♥
2019年8月28星期三
第47篇原创
引言
最近Kubernetes比较火,新技术快速火起来,一定有它强大的优势,Hr反馈,招聘时会Kubernetes的很少,风口上的Kubernetes一起学学?扫盲贴,参考《Kubernetes进阶实践》。
可以说,当今云计算最热门的趋势是 容器,这是服务器虚拟化和云应用程序部署的基础技术。
与传统的虚拟机管理程序和基于虚拟机的方法相比,容器的关键优势在于每个容器工作负载可以共享主机操作系统,而不是每个拥有自己的主机或客户操作系统映像的虚拟机。虚拟机在内存中占用相当多的空间,并且需要更多时间(几分钟而不是几分之一秒)来部署和配置。
1.为什么会出现Kubernetes
Kubernetes希腊语,舵手,飞行员之意。
巨人的肩膀Google 2014年发布。
Docker镜像文件部署,复杂度虽然降低了,但以容器格式运行的应用程序间的协同却成了一个新的亟待解决的问题,这种需求在微服务架构中表现得尤为明显。结果,以Kubernetes为代表的容器编排系统应需而生。
2.容器与虚拟机的区别
容器与传统的虚拟机管理程序和基于虚拟机的方法相比,容器的关键优势在于每个容器工作负载可以共享主机操作系统,而不是每个拥有自己的主机或客户操作系统映像的虚拟机。虚拟机在内存中占用相当多的空间。
容器由应用程序本身和它的环境依赖(库和其他应用程序)两部分组成,并在宿主机(Host)操作系统的用户空间中运行,但与操作系统的其他进程互相隔离,它们的实现机制有别于诸如VMWare、KVM和Xen等实现方案的传统虚拟化技术。容器与虚拟机的对比关系如图所示
由于同一个宿主机上的所有容器都共享其底层操作系统(内核空间),这就使得容器在体积上要比传统的虚拟机小得多。
总结:
部署快
系统开销小
容易迁移:build once,run anywhere。
降低复杂度:configure once,run anywhere。
3.Kubernetes特性
(1)自动装箱建构于容器之上,基于资源依赖及其他约束自动完成容器部署且不影响其可用性,并通过调度机制混合关键型应用和非关键型应用的工作负载于同一节点以提升资源利用率。
(2)自我修复(自愈)支持容器故障后自动重启、节点故障后重新调度容器,以及其他可用节点、健康状态检查失败后关闭容器并重新创建等自我修复机制。
(3)水平扩展支持通过简单命令或UI手动水平扩展,以及基于CPU等资源负载率的自动水平扩展机制。
(4)服务发现和负载均衡
Kubernetes通过其附加组件之一的KubeDNS(或CoreDNS)为系统内置了服务发现功能,它会为每个Service配置DNS名称,并允许集群内的客户端直接使用此名称发出访问请求,而Service则通过iptables或ipvs内建了负载均衡机制。
(5)自动发布和回滚Kubernetes支持“灰度”更新应用程序或其配置信息,它会监控更新过程中应用程序的健康状态,以确保它不会在同一时刻杀掉所有实例,而此过程中一旦有故障发生,就会立即自动执行回滚操作。
(6)密钥和配置管理Kubernetes的ConfigMap实现了配置数据与Docker镜像解耦,需要时,仅对配置做出变更而无须重新构建Docker镜像,这为应用开发部署带来了很大的灵活性。此外,对于应用所依赖的一些敏感数据,如用户名和密码、令牌、密钥等信息,Kubernetes专门提供了Secret对象为其解耦,既便利了应用的快速开发和交付,又提供了一定程度上的安全保障。
(7)存储编排Kubernetes支持Pod对象按需自动挂载不同类型的存储系统,这包括节点本地存储、公有云服务商的云存储(如AWS和GCP等),以及网络存储系统(例如,NFS、iSCSI、GlusterFS、Ceph、Cinder和Flocker等)。
(8)批量处理执行除了服务型应用,Kubernetes还支持批处理作业及CI(持续集成),如果需要,一样可以实现容器故障后恢复
4.集群架构
一个典型的Kubernetes集群由多个工作节点(worker node)和一个集群控制平面(control plane,即Master),以及一个集群状态存储系统(etcd)组成。其中Master节点负责整个集群的管理工作,为集群提供管理接口,并监控和编排集群中的各个工作节点。各节点负责以Pod的形式运行容器,因此,各节点需要事先配置好容器运行依赖到的所有服务和资源,如容器运行时环境等。Kubernetes的系统架构如图:
美团点评集群管理与调度架构图:
总结:
1.Kubernetes集群主要由Master和Node两类节点组成。
2.Master主要包含API Server、controller-manager、Scheduler和etcd几个组件,其中API Server是整个集群的网关。
3.Node主要由kubelet、kube-proxy和容器引擎等组件构成,kubelet是Kubernetes集群的工作于节点之上的代理组件。
4.完整的Kubernetes集群还需要部署有CoreDNS(或KubeDNS)、Prometheus(或HeapSter)、Dashboard和Ingress Controller几个附加组件。
5.Kubernetes的网络中主要存在四种类型的通信:同一Pod内的容器间通信、各Pod间的通信、Pod与Service间的通信,以及集群外部的流量同Service之间的通信。
6.Kubernetes集群主要由Master和Node两类节点组成。
7。Master主要包含API Server、controller-manager、Scheduler和etcd几个组件,其中API Server是整个集群的网关。
8。Node主要由kubelet、kube-proxy和容器引擎等组件构成,kubelet是Kubernetes集群的工作于节点之上的代理组件。
9。完整的Kubernetes集群还需要部署有CoreDNS(或KubeDNS)、Prometheus(或HeapSter)、Dashboard和Ingress Controller几个附加组件。
10.Kubernetes的网络中主要存在四种类型的通信:同一Pod内的容器间通信、各Pod间的通信、Pod与Service间的通信,以及集群外部的流量同Service之间的通信。
参考
论文:《Large-scale cluster management at Google with Borg》
《美团点评Kubernetes集群管理实践》https://tech.meituan.com/2019/08/22/kubernetes-cluster-management-practice.html
《Kubernetes进阶实践》
留言区互动
告诉我你想了解哪方面的知识,我尽量更新。
如果觉得对你有帮助,点赞转发支持我。
公众号:【转行程序员】专注新人转行入门指导,老兵技术提升,包含各种新手学习资料,架构师技能提升系列文章,还能给小姐姐介绍程序员男票,给小哥哥介绍小姐姐,欢迎关注。