Kubernetes架构原则和对象设计(二)

云原生学习路线导航页(持续更新中)

  • kubernetes学习系列快捷链接
    • Kubernetes架构原则和对象设计(一)
    • Kubernetes常见问题解答

本文从云计算架构发展入手,详细分析了kubernetes的生态系统、设计理念、分层架构、API设计原则、架构设计原则等,并介绍了使用kubelet+staticPod拉起集群的过程

1.云计算的传统分类

在这里插入图片描述

  • 云计算出现之前,对于任何企业,想要搭建自己的服务,需要管理所有内容
    • 基础架构层:网络、存储、 服务器。有了服务器,可能需要进一步做虚拟化,分成很多个虚拟机
    • 支撑服务层:虚拟机上安装操作系统O/S,中间件、各种运行时。
    • 应用层:应用、应用产生的数据
  • 后来出现了云计算的思想,传统分类中将云计算分为以下几种
    • Issa:云厂商提供基础架构层,其余的客户自己负责
    • Pass:云厂商提供基础架构层+支撑服务层,其余的客户自己负责
    • Saas:云厂商提供基础架构层+支撑服务层+应用层,客户只需要使用就好
      • 比如 Oracle、一些ERP软件、腾讯会议软件等,都属于Saas产品,某个公司直接买了软件,给你账号密码,就可以直接用了,其他不用管
  • Kubernetes出现之后,云计算的各个层次 不再有这么清晰的界限
    • kubernetes提供了一套统一的API,这套API既有 基础架构的运维,又有应用软件的接入,因此模糊了层次间的界限
    • 容器提供Dockerfile让应用接入,Kubernetes提供所有自动化的操作,二者可以认为是Pass

2.Kubernetes生态系统

在这里插入图片描述

  • 基础架构管理
    • 要有集群,肯定要先有主机,因此涉及到主机上架
    • 机器有了,要安装和管理OS,管理安全、网络、运行时等
  • 集群管理
    • 基础架构层面能管理了,就需要把机器构建成集群,因此有了集群的安装、节点管理、认证授权、网络存储等等的管理
  • 控制平面
    • kubernetes的管控面组件:master上的、node上的、插件等
  • 数据平面
    • kubernetes面向应用的各种API对象,供用户来跑应用,API对象创建出来后,由管控面来管理
  • kubernetes的两个视角
    • 集群管理员:
      • 负责控制面组件的稳定性、可用性
      • 负责提供具备各种特性的服务,供应用开发者使用,比如提供日志、监控、告警等能力、统一的镜像仓库、网络管理、dns、流水线等
    • 应用开发者
      • 关注自己所要开发的代码,代码开发完要有自动化流水线打包镜像,进行持续集成,有镜像仓库存储镜像,有部署流水线做部署
      • 应用部署时,需要应用开发者关注部署时的一些参数
        • 应用的资源需求:多少cpu、mem、几个实例、带宽多少
        • 应用的高可用:跨地域、跨az部署等
        • 微服务世界里,可能还涉及多个服务之间的依赖关系
        • 服务的扩缩容,服务发现、服务发布等等

3.Kubernetes设计理念

在这里插入图片描述

  • 高可用
    • 应用高可用:应用最根本的就是高可用,尤其对于在线服务,因此kubernetes提供了大量的API对象来确保应用高可用。包括 replicaset、statefulset等
    • kubernetes组件自身高可用:通过一些机制保证每个组件都支持高可用
    • 安全性
      • 通信加密:TLS协议
      • 灵活的认证鉴权 : 对于kubernetes内部有系统账户SA,对于外部系统有user,支持基于SA和User的认证鉴权
      • 良好的隔离性:基于namespace隔离,并支持针对不同namespace的权限控制,谁能访问该ns下对象,能如何访问,都可以控制
      • 数据加密:secret
      • 数据面安全保证:
        • 通过Taints将不同node做隔离,可以让不同应用在物理机层面做隔离
        • psp:Pod Security Policies,可以设置以什么样的权限运行这个pod
          • Pod Security Policies官方文档:kubernetes1.21中弃用了
          • Pod Security Policies基础使用
        • networkPolicy:可以控制a可以访问b的哪个端口…
    • 可移植性
    • 可扩展性

4.Kubernetes的分层架构

kubernetes的分层架构确保了它的扩展性,确保了它的江湖地位

在这里插入图片描述

  • 核心层:提供核心API,提供插件扩展能力
  • 应用层:提供针对不同应用的各种特性,提供路由能力,服务发现、负载均衡等
  • 管理层:为应用提供更高级的隔离性、安全性、资源配额等特性
  • 接口层:供其他系统的对接
  • 生态系统:针对不同层次,都形成了相应的生态系统
    • 针对核心层的下层,有各种Plugin形成的生态系统
      • CRI:docker、containerd等
      • CNI:calico、flannel、cilium等
      • CSI:localDisk、networkDisk、nfs等在这里插入图片描述
    • 针对核心层和应用层,也形成了以Operator为中心的生态系统,并支持Istio、addon扩展等
    • 针对上层,有Helm工具、Kompose、Cabin等形成的生态系统
      在这里插入图片描述

5.API设计原则

在这里插入图片描述
在这里插入图片描述

  • 声明式API 允许重复操作:比如网络抖动,上次处理了一半,下次还可以再处理一次,最终处理结果是一致的,这对分布式太重要了
  • API彼此互补和可组合:这个就解答了为什么Deployment不直接管理pod,而是通过ReplicaSet管理,二者负责的功能特性不同
  • 高层API以业务为出发点进行设计,底层API是为了满足某个或某些高层API而设计
  • 避免简单封装,一个API对象要有自己确定的含义,不要通过代码逻辑让他具备完全不同的两种功能

6.Kubernetes对象之间的组合关系

  • Kubernetes如何通过对象的组合完成业务描述在这里插入图片描述
  • 只要业务有持续的发布和更新行为,就应该使用deployment,而不是直接使用replicaset
  • 如上图,不同对象的组合方式,可以分成三种
    • 引用依赖:比如pod中有一个属性的值,指向了某个对象。比如pod的nodeName,声明了它要调度到的node;ingress中有个serviceName指向某个service
    • 基于命名规范:比如deployment和replicas的名字,是deploymentName+hash值的关系,这种关系写在代码程序里。这种规范要非常小心,如果这段代码有变更,有一定风险打破原来的命名规范,造成致命bug
    • 基于标签:比如ReplicaSet和pod之间的关联关系,是通过 selector.matchLabels 做关联的。Service和pod的关联关系也是这种方式。

7.架构设计原则

 - 所有组件都在内存中维护状态,指的是 组件应该自己维护一份缓存,通过watch维护缓存数据的一致性,不要任何数据都去请求apiserver。比如calico没有遵循这个规范,在数据量很大的集群中,就有可能把apiserver打挂

8.Kubernetes集群搭建的设计:引导原则

在这里插入图片描述

  • Selft-hosting:即自己能够管理自己,没有外部依赖,不过很难做到,这是一个系统的设计目标
  • kubernetes 管控组件,其实都将自身容器化,用pod运行来保证自身的高可用。实际上也是实现了自己管自己
    • 在kube-system ns下,可以看到 控制平面的 etcd、apiserver、controller-manager、schedule 组件都是用 pod 运行的
      在这里插入图片描述
    • 实现方式:
      • kubelet本身是不能容器化的,因为它要作为kubernetes的初始化系统,负责把master上管控组件拉起来。启动pod方式:staticPod
      • 查看kubelet的配置文件,其中有 staticPod的路径,kubelet除了会从apiserver处得知要启动的pod,还会监听 staticPod路径 下所有文件,将其拉起为pod
        在这里插入图片描述
        在这里插入图片描述
        在这里插入图片描述
    • 因此,实践中一般将kubelet配置为systemd,即守护进程。然后由kubelet将 kubernetes的管控组件拉起来。
    • 我们经常使用 kubeadm 搭建一个kubernetes集群,其实就是使用了Static pod
      • staticpod不依赖完整的kubernetes集群,只需要有kubelet+容器运行时,就可以在所在节点,把容器运行起来,因此staticpod最经典的场景就是 作为kubernetes集群的bootstrap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/486679.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自建服务器,数据安全有保障

在远程桌面工具的选择上,向日葵和TeamViewer功能强大,但都存在收费昂贵、依赖第三方服务器、数据隐私难以完全掌控等问题。相比之下,RustDesk 凭借开源免费、自建服务的特性脱颖而出!用户可以在自己的服务器上部署RustDesk服务端&…

发布Apache2.4** 局域网无法访问

1。 防火墙关闭 或者 设置入站规则 2,查看httpd.conf 文件 设置配置 原 Listen 80 修改成 Listen 192.168.31.127:90 3.确保 本地IP 是否正确

Flutter解压文件并解析数据

Flutter解压文件并解析数据 前言 在 Flutter 开发中,我们经常需要处理文件的读取和解压。 这在处理应用数据更新、安装包、存档文件等场景中尤为常见。 本文将介绍如何在Flutter中使用archive插件来解压文件并解析数据。 准备 在开始之前,我们需要…

HiveSQL题——炸裂函数(explodeposexplode)

目录 一、炸裂函数的知识点 1.1?炸裂函数 ?explode? posexplode 1.2 lateral view 侧写视图 二、实际案例 2.1 每个学生及其成绩 0 问题描述 1 数据准备 2 数据分析 3 小结 2.2?日期交叉问题 0 问题描述 1 数据准备 2 数据分析 3 小结 2.3?用户消费金额 …

从差分电容到多轴测量:解读 BendLabs 柔性弯曲传感器核心技术

BendLabs是一家技术公司,致力于通过灵活的软传感解决方案将运动测量和理解带给世界。BendLabs柔性弯曲传感器由医用级有机硅制成,能够满足精确、多轴、柔软、灵活的传感需求。BendLabs柔性弯曲传感器采用差分电容原理,具有高精度、低功耗、无…

【数字电路与逻辑设计】实验二 数值比较器

文章总览:YuanDaiMa2048博客文章总览 【数字电路与逻辑设计】实验二 数值比较器 一、实验内容二、设计过程(一)真值表(二)设计思路 三、源代码(一)代码说明:(二&#xff…

39 vector深入理解 · 迭代器失效深度浅拷贝

目录 一、迭代器失效 (一)外部迭代器失效 1、扩容引起的野指针问题 2、删除引起的逻辑问题 二、深度浅拷贝 一、迭代器失效 迭代器可以理解为像指针一样的类对象,但不要一味地认为迭代器就是指针,指针可以实现迭代器&#xff…

2024年认证杯SPSSPRO杯数学建模C题(第一阶段)云中的海盐解题全过程文档及程序

2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现: 巴黎气候协定提出的目标是:在2100年前,把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平,并为1.5摄氏度而努力。但事实上,许多之前的…

AI智能体Prompt预设词指令大全+GPTs应用使用

AI智能体使用指南 直接复制在AI工具助手中使用(提问前) 可前往SparkAi系统用户官网进行直接使用 SparkAI系统介绍文档:Docs 常见AI智能体GPTs应用大全在线使用 自定义添加制作AI智能体进行使用: 文章润色器 你是一位具有敏锐洞察…

Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理-方法二

1.先导入数据到origin 2.导入文件的时候注意:名字短的这个是,或者你打开后看哪个里面有800,因为我的激光重频是1.25Hz(应该是,不太确定单位是KHz还是MHz),所以对应的时间是800s。 3.选中两列直接…

Mybatis框架进阶(标签)

1. <if>标签 DROP DATABASE IF EXISTS mybatis_test; CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4; use mybatis_test;DROP TABLE IF EXISTS user_info; CREATE TABLE user_info (id INT ( 11 ) NOT NULL AUTO_INCREMENT,username VARCHAR ( 127 ) NOT…

【知识点】图与图论入门

何为图论 见名知意&#xff0c;图论 (Graph Theory) 就是研究 图 (Graph) 的数学理论和方法。图是一种抽象的数据结构&#xff0c;由 节点 (Node) 和 连接这些节点的 边 (Edge) 组成。图论在计算机科学、网络分析、物流、社会网络分析等领域有广泛的应用。 如下&#xff0c;这…

泷羽sec-burp(4)burp常见用法 以及 漏洞测试理论 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

Linux上传代码的步骤与注意事项

最近因为工作需要&#xff0c;要上传代码到 DPDK 上&#xff0c;代码已经上传成功&#xff0c;记录一下过程&#xff0c;给大家提供一个参考。我这次需要上传的是pmd&#xff0c;即poll mode driver。 1 Coding Style 要上传代码&#xff0c;第一件事就是需要知道Coding Styl…

vllm0.5.0的v1/completions各参数说明

一、调用示例 curl -X POST \http://ip:8001/v1/completions \-H accept: application/json \-H Content-Type: application/json \-d {"model": "qwen-api","prompt": ["讲个中文笑话"],"best_of": 1,"n": 1,&qu…

Java项目实战II基于微信小程序的作品集展示(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、核心代码 五、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着移动互联网技术的飞速…

物联网入门-Arduino的下载与配置教程(以ESP32为例)-2024

教程介绍 本次教程主要讲述如何下载与配置Arduino&#xff0c;以及开发版对应驱动的下载安装 原文链接&#xff1a;物联网入门-Arduino的下载与配置教程(以ESP32为例)-2024 步骤概述 1&#xff1a;下载Arduino 2&#xff1a;安装Arduino 3&#xff1a;下载安装驱动 4&am…

13.在 Vue 3 中使用OpenLayers加载鹰眼控件示例教程

在 WebGIS 开发中&#xff0c;鹰眼控件 是一个常用的功能&#xff0c;它可以为用户提供当前地图位置的概览&#xff0c;帮助更好地定位和导航。在本文中&#xff0c;我们将基于 Vue 3 的 Composition API 和 OpenLayers&#xff0c;创建一个简单的鹰眼控件示例。 效果预览 在最…

Flink如何基于数据版本使用最新离线数据

业务场景 假设批量有一张商户表&#xff0c;表字段中有商户名称和商户分类两个字段。 批量需要将最新的商户名称和分类的映射关系推到hbase供实时使用。 原实现方案 a.原方案内容 为解决批量晚批问题&#xff0c;批量推送hbase表时一份数据产生两类rowkey&#xff1a;T-1和…

从GCC源码分析C语言编译原理——源码表层分析(脚本篇)

目录 一、目录结构 二、有意思的小功能 三、install脚本 脚本变量和设置 程序名称变量 模式和命令 参数解析 主要逻辑 四、主要功能脚本 ------------------------------------------------------------------------------------------------------------------------…