Kubernetes(K8S)是云技术的最核心的部分,也是构建是云原生的基石,下面我就全面来详解Kubernetes(K8S)。

K8S

K8S,是Kubernetes的缩写,是Google开发的容器编排平台,现在由云原生计算基金会(CNCF)进行维护。

K8S,主要解决以下4大点:

1、容器编排

Docker解决了容器部署的问题,容器部署后,就会涉及到容器的编排。

K8S是一个强大而灵活的容器编排平台,可以帮助用户轻松地部署、扩展、和管理容器化应用程序。

2、容器管理

K8S可以管理多个容器化的应用程序,它负责调度、和管理容器实例的生命周期,包括:创建、启动、监控、重启和销毁等操作。

3、自动化部署

K8S可以自动化地部署,和扩展容器化的应用程序。

并且,K8S还可以根据应用程序的负载需求,自动扩展容器实例数量,确保应用程序能够满足变化的负载需求。

4、安全可用

K8S具有强大的高可用性、和容错性,可以在节点故障、或者容器故障时,自动重新调度容器实例,确保应用程序的可用性。

K8S架构

K8S架构,如下图所示:

K8S主要会包含:主节点(Master)、和子节点(Node),这两大组件。

Master组件

Master 组件,是 K8S控制平面的核心部分,负责:管理整个集群的状态、和配置,类似人的《大脑》。

Master 组件通常运行在单独的节点上,以确保高可用性和可靠性。

1.kube-apiserver

kube-apiserver :是 Kubernetes 集群的前端接口,是所有组件、和用户与集群通信的,唯一入口。

kube-apiserver 提供了RESTful API接口,用于管理,比如:集群状态、配置、和操作…等。

并且,kube-apiserver 还可用通过认证、授权、和准入控制,来保护、和管理 API 的访问权限。

2.etcd

etcd 是一个分布式、一致性的键值存储数据库,这个与Redis类似,都是key-value的组件。

etcd 主要用于存储:集群的配置信息、状态、和元数据,这些信息都存储在etcd中。

3.kube-scheduler

kube-scheduler :是 Kubernetes 的调度组件,负责将新创建的 Pod ,调度到集群中的节点上,并考虑节点资源的可用性、和负载情况。

4、kube-controller-manager

Kubernetes控制器管理器,包含:多个控制器,负责监控集群的状态,并根据预设的期望状态来实现集群的自愈、和自动化操作。

常见的控制器包括 ReplicaSet 控制器、Deployment 控制器、StatefulSet 控制器…等等,如下图所示:

这些控制器,主要负责管理:Pod 、和其他资源的生命周期,确保它们按照用户期望的方式运行、和管理。

2、Node组件

Node 节点是 Kubernetes 集群的工作节点,类似K8S的手和脚,类似《四肢》,执行Master的操作指令。

主要分为,如下组件:

  • kubelet: kubelet负责:管理节点上的Pod和容器,与主Master通信,并根据Master的指令创建、启动、监控、和终止Pod。
  • kube-proxy: kube-proxy负责:实现Kubernetes Service的负载均衡和代理转发,以及维护网络规则和iptables规则等。
  • Container Runtime: 负责管理和运行容器,比如:Docker、containerd…等容器,都可用在运行。

3、Networking组件

Pod网络插件,负责为Pod分配IP地址,并提供Pod之间和Pod与外部网络之间的网络通信。

Cluster网络组件,负责为集群中的节点分配IP地址,并提供节点之间的通信。

K8S和Docker的关系

Docker 、和 Kubernetes 是两个不同的技术,它们分别解决:容器化应用程序、和容器化编排

两者的关系,类似:操作系统和应用场景的关系,两者主要是:结合起来使用的。

Docker 是一种开源的容器化平台,用于:创建、打包和运行容器化应用程序。

Docker 主要提供了容器构建、镜像管理、容器运行、和容器存储等功能,适用于单个容器应用程序的构建和部署。

而K8S, 则是一个容器编排平台,用于自动部署、扩展和管理容器化应用程序的。

K8S支持多种容器运行时环境,包括:Docker、containerd、cri-o 等,也就是说Docker只是K8S其中的一种容器而已。

尽管,K8S不依赖于 Docker,但 Docker 作为目前最流行、和广泛使用的容器运行时环境,通常被视为K8S的默认容器。

K8S总结

总之,K8S提供了容器编排和集群管理的能力,而 Docker 提供了容器化应用程序的构建、打包和运行的能力,两者结合起来共同构建云原生系统。