一、K8S架构
K8S平台作用:容器编排,包括启动容器,自动化部署、扩展和管理容器应用、还有回收容器。
注:最新版本的K8S用containerd代替了docker
二、关键技术
k8s对容器的编排能力体现在上述几种控制器的作用上,deployment用来部署无状态的容器应用如nginx,statefulset用来部署有状态的应用如mysql、sqlserver,daemonset用于部署需要在集群每个节点都存在的应用如守护进程,而job/cronjob适用于一次性的任务。这些控制器通过replicaset来进行维持pod的数量,当pod挂了,会自动拉起一个pod,从而能够给服务提供的高可用能力。
那部署出来的容器应用是怎么提供服务的呢?那就是通过service对外提供服务,service能通过label过滤出属于同一服务的pod,并且统一对外暴露访问IP(可以理解为相同标签的pod的集群IP)和端口,当外部访问该IP:端口时,会通过iptables规则转发到实际的POD上。Headless Services是一种特殊的service,它不会被分配ClusterIP,当外部访问时,会将Endpoints(即podIP数组)返回,也就将服务端的所有节点地址返回,让客户端自行要通过负载策略完成负载均衡。
三、典型特征
可移植:支持公有云,私有云,混合云,多重云(multi-cloud)
可扩展:模块化,插件化,可挂载,可组合
自动化:自动部署,自动重启,自动复制,自动伸缩/扩展