前言:
公司项目中部署是使用K8s集群进行部署的,所以特做笔记和感悟如下:
Kubernetes 是什么,为什么要用它?
Kubernetes(简称K8s)源自Google,是一种基于Docker容器的容器集群管理系统。
Kubernetes为容器化的应用提供了资源调度、部署运行、服务发现、运行时扩容缩容等整一套解决方案,利用Kubernetes提供的功能,我们可以非常方便的管理不同主机上部署在容器的应用。
--------------------------------------------------------------------------------------------------------
背景:
企业的发布从之前的单机器部署,按计划(一个月,2周)发布上线已经逐步演变成: 云上部署,微服务, 按需部署(要求随时上线)
那么容器技术就应运而生,通过容器配置好发布需要测环境变量和参数,设置好网络安全访问规则。需要做到 "writer once , run anywhere"
Docker作为一种容器技术已经成为了业界事实上的标准,真正实现了"writer once , run anywhere" 开发者只需要一个镜像就能发布到集群的任意一个节点。
Google 公司在Docker尚未提出自己的容器编排技术的时候直接开源了K8s,可以说占尽先机; (参考谷歌开源的大数据框架,基本等于一次业内变革)
容器编排调度引擎 —— k8s 的优势
- 自动化容器的部署和复制
- 随时扩展或收缩容器规模
- 将容器组织成组,并且提供容器间的负载均衡
- 很容易地升级应用程序容器的新版本
- 提供容器弹性,如果容器失效就替换它,等等...
严格上来说,使用Kubernetes只需一个部署文件,使用一条命令就可以部署多层容器(前端,后台等)的完整集群:
kubectl create -f deploy.yaml
K8s 的集群
如图所示,K8s集群分为一个mater节点,N个node子节点;
1. master节点里面包括 API server, Replication-controller 等组件 (可以在此节点操作整个k8s集群)
1.1 Service会完成如下两件重要的事情:
- 会为Service创建一个本地集群的DNS入口,因此前端Pod只需要DNS查找主机名为 ‘backend-service’,就能够解析出前端应用程序可用的IP地址。
- 现在前端已经得到了后台服务的IP地址,但是它应该访问2个后台Pod的哪一个呢?Service在这2个后台Pod之间提供透明的负载均衡,会将请求分发给其中的任意一个(如下面的动画所示)。通过每个Node上运行的代理(kube-proxy)完成。
1.2 Replication Controller确保任意时间都有指定数量的Pod“副本”在运行。如果为某个Pod创建了Replication Controller并且指定3个副本,它会创建3个Pod,并且持续监控它们。
如果某个Pod不响应,那么Replication Controller会替换它,保持总数为3.
2. node子节点里面包含了多个pod, pod里面可以有多个container (注意node是实体化的,有具体的主机和IP地址,Pod 是一个虚拟单元,可以随时创建和删除)
通常称为Minion。每个节点都运行如下Kubernetes关键组件:
- Kubelet:是主节点代理。
- Kube-proxy:Service使用其将链接路由到Pod,如上文所述。
- Docker或Rocket:Kubernetes使用的容器技术来创建容器。