zoukankan      html  css  js  c++  java
  • 浅析Kubernetes的工作原理

    先放一张Kubernetes的架构图:

    整体来看,是一个老大,多个干活的这种结构,基本上所有的分布式系统都是这样,但是里面的组件名称就纷繁复杂,下面将一一解析。

    1、元数据存储与集群维护

    作为一个集群系统,总要有一个统一的地方维护整个集群以及任务的元数据。而且作为集群系统的控制节点,为了高可用性,往往存在多个Master,在多个Master中间,总要有一个Leader。

    在Kubernetes里面,统一的存储使用etcd来保存,Leader的选举也是通过etcd进行,因而有apiserver有参数--etcd-servers,controller和scheduler都有参数--master string指向apiserver,并且有参数--leader-elect选举出Leader,也会有熟悉的--address ip。

    2、API层与命令行

    作为一个分布式系统,每一层都会有自己的API,但是对外往往需要一个统一的API接口层,一般除了酷酷的界面之外,为了自动化,往往会有一个命令行可以执行操作,其实命令里面封装的也是对API的调用。

    对于Kubernetes,API层是一个单独的进程apiserver提供,认证和鉴权也是在这一层实现的,所有对于kubernetes的管理平台的访问都是通过apiserver这一层进行的。

    对于命令行,kubernetes是kubectl,通过向apiserver调用执行操作,例如pod,service,deployment等。Kubernetes也有自己的类似package的管理,Kubernetes Helm,但是命令就变成了helm了。

    3、调度

    当运行一个容器的时候,放在哪台节点上,这个过程是调度。对于Kubernetes,调度是由一个单独的进程scheduler负责的。

    Kubernetes也支持通过对Node设置Label,从而将pod放在某些节点上。另外kubernetes还有NodeAffinity:

    • RequiredDuringSchedulingRequiredDuringExecution:在调度的时候必须部署到某些节点,运行期如果条件不满足则重新调度

    • RequiredDuringSchedulingIgnoredDuringExecution :在调度的时候必须部署到某些节点,运行期就算了。

    • PreferredDuringSchedulingIgnoredDuringExecution :在调度的时候最好部署到某些节点,运行期就算了。

    4、副本与弹性伸缩

    容器如果部署无状态服务,一个好处就是可以多副本,并且可以弹性伸缩。

    在Kubernetes里面,副本数目是以pod为单位的,由controller进程控制,可以通过创建一个Deployment来控制副本数。

    Kubernetes也可以实现autoscaling。有一个组件Horizontal Pod Autoscaling,可以通过监控CPU的使用情况动态调整Pod的数量。

    5、编排

    为了能够通过编排文件一键创建整个应用,需要有编排功能。Kubernetes的编排是基于yml文件。

    6、服务发现与DNS

    容器平台的一个重要的功能是服务发现,也即当容器的地址改变的时候,可以自动进行服务之间的关联。

    一般的服务发现首先要通过DNS将服务名和应用关联起来,可以基于DNS对一个服务的多个应用进行内部负载均衡,也有直接加一个内部负载均衡器来做这件事情。

    Kubernetes的DNS组件是通过skyDNS实现的,负载均衡是通过将DNS转化为VIP,有个内置的负载均衡器kube-proxy来完成这件事情。

    7、容器

    Kubernetes支持Docker、RKT等多种容器格式。

    8、网络

    容器的网络配置有Docker Libnetwork Container Network Model(CNM)和Container Network Interface(CNI)两个阵营。Docker Libnetwork的优势就是原生,而且和Docker容器生命周期结合紧密;缺点也可以理解为是原生,被Docker“绑架”。Kubernetes属于CNI阵营,CNI的优势是兼容其他容器技术(e.g. rkt)及上层编排系统(Kuberneres & Mesos),而且社区活跃势头迅猛,缺点是非Docker原生。

    9、存储

    Kubernetes可以创建Persistent Volumes,支持GCE,AWS,NFS,GlusterFS,Ceph等。

    10、监控

    容器的监控中Prometheus +cadvisor是主流的方案,而cadvisor来自Kubernetes的一个组件。

    11、大数据与包管理

    在kubernetes里面部署大数据可以参考https://github.com/kubernetes/examples

    12、负载均衡

    这里的负载均衡指的是外部负载均衡。在kubernetes中,外部负载均衡器是通过一个ingress controller根据请求进行创建,如果在云平台例如GCE,可创建云平台的负载均衡器,云平台的负载均衡器可通过NodePort连接到后端的Service。

    13、节点

    kubernetes的Node上跑的是kubelet。

    14、升级与回滚

    所有的容器平台对于容器多副本的升级全部都是要滚动升级,在Kubernetes里面,同样有对rolling update的支持。

    转至 https://www.cnblogs.com/163yun/p/9518901.html

  • 相关阅读:
    SVN服务器搭建(一)
    排序算法二:冒泡排序
    【LeetCode】136. Single Number
    【LeetCode】217. Contains Duplicate
    【LeetCode】189. Rotate Array
    【LeetCode】122. Best Time to Buy and Sell Stock II
    【LeetCode】26. Remove Duplicates from Sorted Array
    【LeetCode】20. Valid Parentheses
    【LeetCode】680. Valid Palindrome II
    【LeetCode】345. Reverse Vowels of a String
  • 原文地址:https://www.cnblogs.com/wintersoft/p/10767781.html
Copyright © 2011-2022 走看看