Kubernetes是一个完备的分布式系统支撑平台,具有完备的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力,透明的服务注册和服务发现机制,内建智能负载均衡器,强大的故障发现和自我修复能力,服务滚动升级和在线扩容能力,可扩展的资源和自动调度机制,以及多粒度的资源配额管理能力。所以,Kubernetes是一个全新的基于容器技术的分布式架构解决方案,并且是一个一站式的完备的分布式系统开发和支撑平台。
遵从Kubernetes的设计思想,传统系统架构中的和业务无关的底层代码和功能模块,都可以立刻从我们的视线中消失,我们不必再费心于负载均衡器的选型和部署实施问题,不必考虑引入或自研一个复杂的服务治理框架,不必头疼服务监控和故障处理模块的开发。总之,使用Kubernetes提供 的解决方案,我们节省不少于30%的开发成本。
Kubernetes中几个重要的概念:
Master:
- kube-apiserver:所有资源的增删改查的唯一入口
- kube-controller-manager:所有资源对象的自动化控制中心
- kube-scheduler:资源调度(pod调度)
- etcd server:存储进程
- Node:
- kubelet:负责Pod对应的容器的创建、启停等,与Master节点密切协作,实现集群管理
- kube-proxy:实现Kubernetes service的通信与负载均衡
- Docker Engine:负责本机容器创建和管理
Pod:
- Pause:跟容器
- containers:多个用户业务相关的容器
每个Pod一个ip称为Pod ip
Pod的运行状态:
- Pending:API Server已经创建Pod,但所需要的容器镜像还没有创建,或者正在下载
- Running:Pod内所有容器都创建了,且至少一个容器处于运行状态、正在启动状态或者正在重启状态
- Succeeded:Pod内所有容器都成功执行退出,且不会再重启
- Failed:Pod内所有容器均已退出,但至少有一个容器退出为失败状态
- Unknown:无法获取该Pod的状态
Pod的重启策略(RestartPolicy)
- Always:默认,当容器失效时,由kubelet自动重启该容器
- OnFailure:当容器终止运行且退出码非0时,由kubelet自动重启该容器
- Never:不重启
Pod的健康检查
- LivenessProbe探针:存活检测,如果LivenessProbe探针探测到容器不健康,则由kubelet将其杀掉,并根据重启策略做相应的处理。如果一个容器不包含LivenessProbe探针,那么kubelet认为容器的LivenessProbe探针一直返回‘success’
- ReadinessProbe探针:判断容器是否启动启动完成(ready),可以接收请求。如果ReadinessProbe探测到失败,则Pod的状态将被修改。Endpoint Controller将从Service的Endpoint中删除包含该容器所在Pod的Endpoint。
Pod的调度:
- NodeSelector:根据label调度
- NodeAffinity:亲和性调度,更灵活
- DaemonSet的Pod调度:在每个Node只运行一个Pod
- Job批处理调度
RC:
主要功能之一是自动部署一个容器应用的多个副本,并持续监控副本数量,在集群内始终维持指定副本数
- 通过定义RC实现Pod的创建及副本数量的自动控制
- RC里包括完整的Pod定义模板
- RC通过Label Selector实现对Pod副本的自动控制
- 通过改变RC中Pod的副本数量,实现Pod的弹性伸缩
- 通过改变RC里Pod模板的镜像版本,实现Pod的滚动升级
PV:
- 可以理解为Kubernetes集群中某个网络存储中对应的一块存储
- 只能是网络存储,不属于任何Node,但可以在每个Node上访问
- 并不是定义在Pod上的,而是独立于Pod之外定义
- PV目前只有几种类型:GCE Persistent Disks、NFS、RBD、iSCSCI、AWS EBS、GFS等
Service:
主要目的是在Pod对外服务的前端加一层负载均衡,因为Pod的ip地址可能是会改变。