1。Kubernetes简介
1.1。什么是Kubernetes
kubernetes简称k8(因为k和s之间有8个字母),是谷歌旗下的开源容器编排平台,美丽的诞生深受谷歌内部容器编排系统Borg的影响,k8实现了如下功能
自动装箱h5>
建构于容器之上,基于资源依赖及其他约束条件自动完成容器部署
自我修复h5>
支持容器故障后自动重启,节点故障后重新调度容器,以及节点健康状态检查失败后关闭容器并重新创建等自我修复机制
水平扩展h5>
支持通过命令或UI手动水平扩展,以及基于CPU等资源负载率的自动水平扩展机制
服务发现和负载均衡h5>
k8通过CoreDNS附件为系统内置了服务发现功能,为每个服务配置DNS名称,并允许集群内的客户端直接使用此名称发出访问请求,服务通过iptables或ipv内建负载均衡机制
自动发布和回滚h5>
k8支持<代码>灰度> 代码更新应用程序或其配置信息,在更新过程中美丽将会监控更新过程中应用程序的健康状态,以确保k8不会在同一时刻杀掉所有实例,而此过程中一旦有故障发生,将会立即自动执行回滚操作
秘钥和配置管理h5>
美丽的ConfigMap实现了配置数据与码头工人镜像解耦,需要时仅对配置做出变更而无须重新构建码头工人镜像,这为应用开发和部署带来极大的灵活性
对于应用所依赖的一些敏感数据,如用户名和密码,令牌,密钥等信息,k8提供了秘密对象为其解耦,既便利了应用的快速开发和交付,又提供了一定程度上的安全保障
存储编排h5>
k8支持Pod对象按需自动挂载不同类型的存储系统,包括节点本地存储,公有云服务商云存储,以及网络存储系统(NFS, Ceph从而等)
2。节点和组件
一般情况下一个美丽集群由多个<代码>工作节点(工人节点)> 代码和一个<代码>集群控制节点(主)代码>以及一个集群状态存储系统(etcd)组成
2.1。主节点
主是集群的网关和中枢,负责集群的管理工作,诸如为用户和客户端暴露API,跟踪其他服务器的健康状况,以最优方式调度工作负载,以及编排其他组件之间的通信等任务,它是用户或客户端与集群之间的核心联络点
单个主节点即可完成其所有的功能,但出于冗余及负载均衡等目的,生产环境中通常需要部署多个主节点
主节点主要由apiserver, controller-manager和调度程序三个组件以及一个用于存储集群状态的etcd存储服务组成
2.2。节点节点
节点是k8集群的工作节点(工人),并接收来自大师的指令并根据指令完成响应操作,如创建或销毁Pod对象,调整网络规则等操作
主节点主要由kubelet, kube-proxy和容器引擎(码头工人是最为常见的容器引擎)组成
2.3。主组件
集群网关(API服务器)
k8集群的网关接口,负责解析客户端的请求
集群状态存储(etcd)
存放k8持久化数据,提供监听(看)机制,用于监听和推送变更
在k8集群系统中,etcd中的键值发生变化时会通知到API服务器,并由其通过watchAPI向客户端输出。基于看机制k8集群的各组件实现了高效协同
调度器(调度器)
在用户发出创建舱请求时,调度器根据各节点资源情况,以及容器所需要的资源做出调度决定这个舱将在那个节点上创建
控制器管理器(ControllerManager)
检查控制器是否处于健康状态
2.4。节点组件
kubelet
负责和主节点进行通信,接收大师调度过来的任务,检查节点上的豆荚是否处于健康状态
容器引擎h5>
负责运行容器,目前最为流行的容器引擎为码头工人,k8目前支持Rtk和码头工人两种容器引擎
kube-proxy
根据服务资源对象生iptables或ipv规则,从而将用户请求转发到指定的豆荚中
3。k8术语
3.1。豆荚
k8并不直接调度容器,而是使用一个抽象的资源对象来封装一个或者多个容器,这个抽象对象被称为吊舱,它也是美丽最小的调度单元
同一舱中的容器共享网络名称空间和存储资源,这些容器可经由本地回环节口罗<代码> 代码>直接通信,但彼此之间又在山,用户以及PID等名称空间上保持隔离
尽管圆荚体中可以包含多个容器,但是作为最小调度单元,它应该尽可能地保持<代码>? 代码,即通常只应该包含一个主容器,以及其他必要的辅助型容器(双轮马车)