Skip to content

K8s基本概念

Kubernetes也称为K8s,是用于自动部署、扩缩和管理容器化应用程序的开源管理系统。

1. K8s的历史背景

部署应用的历史演进:
Alt text

2. k8s特点

2.1 服务发现和负载均衡

Kubernetes可以使用DNS名称或自己的IP地址来暴露容器。 如果进入容器的流量很大, Kubernetes可以负载均衡并分配网络流量,从而使部署稳定。

2.2 存储编排

Kubernetes允许你自动挂载你选择的存储系统,例如本地存储、公共云提供商等。

2.3 自动部署和回滚

使用Kubernetes描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为期望状态。 例如,你可以自动化Kubernetes来为你的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。

2.4 自动完成装箱计算

你为Kubernetes提供许多节点组成的集群,在这个集群上运行容器化的任务。 你告诉Kubernetes每个容器需要多少CPU和内存(RAM)。 Kubernetes可以将这些容器按实际情况调度到你的节点上,以最佳方式利用你的资源。

2.5 自我修复

Kubernetes 将重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器, 并且在准备好服务之前不将其通告给客户端。

2.6 密钥与配置管理

Kubernetes允许你存储和管理敏感信息,例如密码、OAuth令牌和SSH密钥。 你可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。

2.7 批处理执行

Kubernetes还可以管理你的批处理和CI(持续集成)工作负载,如有需要,可以替换失败的容器。

2.8 水平扩缩

使用简单的命令、用户界面或根据CPU使用率自动对你的应用进行扩缩。

2.9 IPv4/IPv6双栈

为Pod(容器组)和Service(服务)分配IPv4和IPv6地址。

2.10 可扩展性设计

在不改变上游源代码的情况下为你的 Kubernetes 集群添加功能。

3. Kubernetes架构

Kubernetes 集群由一个控制平面(Control Plane)和一组用于运行容器化应用的工作机器(Node)组成, 每个集群至少需要一个工作节点来运行Pod。
工作节点托管着组成应用负载的Pod。控制平面管理集群中的工作节点和Pod。 在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。 Alt text

3.1 控制平面组件

控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件,例如当不满足Deployment的replicas字段时,要启动新的Pod)。控制平面组件可以在集群中的任何节点上运行。

3.1.1 kube-apiserver

该组件负责公开Kubernetes API,负责处理接受请求的工作。 kube-apiserver是Kubernetes控制平面的对外交互的组件。

3.1.2 etcd

一致且高可用的键值存储(类似redis),用作Kubernetes所有集群数据的后台数据库。

3.1.3 kube-scheduler

kube-scheduler是控制平面的组件,负责监视新创建的、未指定运行节点(node)的Pods, 并选择节点来让Pod在上面运行。

3.1.4 kube-controller-manager

整个k8s集群的决策者,负责在节点出现故障时进行通知和响应,监测代表一次性任务的Job对象,然后创建Pod来运行这些任务直至完成,填充EndpointSlice对象(以提供 Service 和 Pod 之间的链接)。为新的命名空间创建默认的ServiceAccount。

3.2 节点组件

节点组件会在每个节点上运行,负责维护运行的Pod并提供Kubernetes运行时环境。

3.2.1 kubelet

kubelet会在集群中每个节点(node)上运行。 它保证容器(containers)都运行在Pod中。

3.2.2 kube-proxy

kube-proxy是集群中每个节点(node)上所运行的网络代理,能够使集群内部或外部的网络会话与Pod进行网络通信。

3.3 总结

Alt text

最后更新于: