【金蝶天燕鲲鹏云最佳实践 四】Kubernetes学习系列(一):kubernetes初探
Kubernetes基础知识
Kubernetes最初源于谷歌内部的Borg,提供了面向应用的容器集群部署和管理系统。Kubernetes 的目标旨在消除编排物理/虚拟计算,网络和存储基础设施的负担,并使应用程序运营商和开发人员完全将重点放在以容器为中心的原语上进行自助运营。Kubernetes 也提供稳定、兼容的基础(平台),用于构建定制化的workflows 和更高级的自动化任务。
Kubernetes 具备完善的集群管理能力,包括多层次的安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建负载均衡器、故障发现和自我修复能力、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力。
Kubernetes 还提供完善的管理工具,涵盖开发、部署测试、运维监控等各个环节。Kubernetes借鉴了Borg的设计理念,比如Pod、Service、Labels和单Pod单IP等。Kubernetes的整体架构跟Borg非常像,如下图所示:
Kubernetes主要由以下几个核心组件组成:
etcd保存了整个集群的状态;
apiserver提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制;
controller manager负责维护集群的状态,比如故障检测、自动扩展、滚动更新等;
scheduler负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上;
kubelet负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理;
Container runtime负责镜像管理以及Pod和容器的真正运行(CRI);
kube-proxy负责为Service提供cluster内部的服务发现和负载均衡;
2.Kubernetes组件与对象
Kubernetes的复杂度主要源于其众多的组件之间复杂的关联以及内部所管理的大量资源。我们以往学习Kubernetes的方法都是先从上而下学,也就是先去了解概念,再将概念装载为一个整体,个人认为这种方法对于理解K8s这种大规模的架构来说,会让人仅仅局限于对概念的梳理,少了对背后的理念的探究。所以,这篇文章将从下而上,一点一点去理解K8s中的众多组件与对象。
k8s说白了就是一个大规模的容器调度平台,既然是用来调度容器的,那么就先从容器开始了解。以docker为代表的容器,在短暂的时间内,迅速发展,到现在已经形成标准容器规范(OCI),拥有生机蓬勃的生态与社区。容器技术基于Linux的LXC进行包括网络,PID,用户等多维度的隔离,使用cgroups技术进行资源配额控制,以及更加安全的gvisor。在实际环境中实施容器应用时,最麻烦的问题其实就是当容器的数量变多时,容器间跨主机的通信,容器的集中调配,以及如何能够更好的按照业务逻辑去对容器进行分类等是在k8s等容器调度平台出来前最让头疼的。
核心组件上述已经有初步了解,本章内容只是对k8s的了解,不会深入到具体实现细节。k8s的最小调度资源对象是pod,pod的概念不同于一个独立的容器,pod更适合进行业务层面的切分,它是微服务中一个尽可能小但是却有完整功能的某一个服务。所以,如果你是一个前后分离的项目,一个pod中会包含这两个部分,而不是将这两个有明显紧关联的项目分成两个pod;如果是分布式项目中的独立模块,则适合将一个模块放入一个pod。
接下来,k8s将不同类型的应用进行分类,包括无状态类型(ReplicaSet,Deployment),有状态类型(statefulset),守护进程类型(DaemonSet),定时任务类型(Job,CronJob)等。
同时,当pod进行水平扩展后,为确保能正确对这些相同节点进行正确的服务发现与负载均衡,将一个Deployment抽象成Endpoint,使用Service对象来代表业务上的服务,配合kube-proxy组件,完成负载均衡,使用kube-dns(coredns)组件实现动态服务发现。
- 点赞
- 收藏
- 关注作者
评论(0)