简单易学的Kubernetes(k8s):架构和源码解读

科技   科技   2024-02-19 08:30   黑龙江  
1▲ 点击上方"DevOps和k8s全栈技术"关注公众号

Kubernetes(K8s)为云原生应用提供了强大的管理和编排能力。本文将深入探讨Kubernetes的架构,解剖其核心组件,以帮助读者更好地理解这个复杂而强大的系统。

第一部分:K8S基本概念和架构介绍

1. Kubernetes基本概念

  • Pods: 是Kubernetes的最小调度单元,可以包含一个或多个容器。

  • Nodes: 是物理或虚拟机器,运行着Pods。

  • Cluster: 由多个Nodes组成的集合,共同工作来运行应用程序。

  • Services: 提供Pods的稳定网络和DNS标识。

2.Kubernetes整体架

Kubernetes的架构是Master节点和Worker节点。

Master节点是集群的控制中心,主要包含以下组件:

  • etcd: etcd是一个分布式键值存储,用于保存整个集群的配置数据和状态信息。它通过Raft一致性算法保证高可用和数据一致性。etcd的数据模型是一个分层的键值树,其中包含了集群的所有配置信息,如Pods、Services、Nodes等。

  • kube-apiserver: kube-apiserver是Kubernetes的API服务器,它是集群的控制面的入口。它处理外部和内部的API请求,验证用户身份,对资源进行增删改查等。kube-apiserver的设计允许它通过多个实例水平扩展,确保高可用性。

  • kube-controller-manager: kube-controller-manager包含了多个控制器,每个控制器负责一类任务。常见的控制器包括Replication Controller、Namespace Controller、Service Account Controller等。这些控制器通过监听etcd中的资源变更来保持集群状态的一致性。

  • kube-scheduler: kube-scheduler负责将Pod调度到合适的Node上运行。它考虑了诸如资源需求、节点健康状况、调度策略等因素,并决定将Pod调度到哪个Node上。kube-scheduler可以通过配置和自定义策略进行扩展。


Worker节点主要负责运行pod,主要包含以下组件:

  • kubelet: kubelet是Node上的代理,负责与Master节点通信,确保Pod按照期望状态运行。它定期从API Server获取Pod配置,通过调用容器运行时(如Docker)来创建和管理容器。kubelet还负责监控容器的状态,以确保它们一直处于运行状态。

  • kube-proxy: kube-proxy维护网络规则和负责Pod之间的通信。它通过在每个Node上运行,为集群中的Service提供负载均衡和服务发现功能。kube-proxy使用iptables或者IPVS等技术来实现网络规则。

  • Container Runtime: Container Runtime是实际运行容器的软件,它负责解析镜像、创建容器、执行容器命令等。常见的Container Runtimes包括Docker(k8s1.24版本开始不支持docker了)、containerd、CRI-O等。Kubernetes通过CRI(Container Runtime Interface)定义了与Container Runtimes之间的标准接口,使得用户可以灵活选择Container Runtime。


3. Kubernetes网络模型

Kubernetes的网络模型是一个平面网络,每个Pod都有一个唯一的IP地址,可以直接与其他Pod通信。这种扁平化的网络模型简化了应用程序的网络配置和管理。各个Node上的kube-proxy通过维护iptables规则来实现Service的负载均衡。

4. 安全性与认证机制

Kubernetes具有严密的安全性机制,包括基于RBAC的权限控制、TLS加密通信、Pod安全策略等。认证机制通过API Server和kubelet之间的证书进行验证,确保只有授权的用户和组件才能访问集群。

5. 扩展性与自定义资源

Kubernetes的设计允许用户通过自定义资源(Custom Resource Definition,CRD)和控制器来扩展其功能。这使得用户能够定义和管理自己的资源类型,通过编写控制器来控制这些资源的行为。


第二部分:深入剖析K8S源码

源码地址:https://github.com/kubernetes/kubernetes

Kubernetes(K8s)是用 Go 语言编写的开源容器编排系统。深入解析 K8s 的源码涉及多个模块和组件,以下是对关键部分的简要解析:

1. 源码结构概览

K8s 的源码仓库结构清晰,主要模块包括 cmdpkgstagingapi 等。以下是其中一些关键目录的简要描述:

  • cmd 目录: 包含各个 K8s 组件的入口点,如 kube-apiserver、kube-controller-manager 等。

  • pkg 目录: 包含 K8s 的核心库,定义了许多基本的数据结构、函数和工具。

  • staging 目录: 包含实验性的和尚未正式发布的代码。

  • api 目录: 定义了 K8s 的 API 资源,如 Pod、Service 等。


2. kube-apiserver

kube-apiserver 是 K8s 集群的 API 服务器,是整个系统的入口。关键源码文件和实现细节包括:

  • cmd/kube-apiserver 目录: 包含 kube-apiserver 的入口点和初始化逻辑。

  • pkg/apiserver 目录: 定义了 API Server 的核心逻辑和接口。

  • pkg/master 目录: 包含 API Server 的核心控制器逻辑。


3. etcd 存储系统

etcd 是 K8s 集群的分布式键值存储系统,用于保存整个集群的状态和配置信息。相关源码和关键实现细节包括:

  • pkg/storage 目录: 包含 K8s 与存储系统交互的通用接口和逻辑。

  • pkg/master/master.go 文件: 定义了 K8s 控制面的核心 Master 结构,负责与 etcd 交互。

  • staging/src/k8s.io/etcd 目录: 包含 etcd 的源码。


4. kube-controller-manager

kube-controller-manager 包含了多个控制器,负责监控集群状态并确保其满足用户的期望状态。相关源码和实现细节包括:

  • cmd/kube-controller-manager 目录: 包含 kube-controller-manager 的入口点和初始化逻辑。

  • pkg/controller 目录: 定义了 K8s 控制器的通用接口和基础逻辑。

  • pkg/controller/<controller_name> 目录: 每个控制器的具体实现。


5. kube-scheduler

kube-scheduler 负责将 Pod 调度到集群中的合适节点上,以确保资源的高效利用。相关源码和实现细节包括:

  • cmd/kube-scheduler 目录: 包含 kube-scheduler 的入口点和初始化逻辑。

  • pkg/scheduler 目录: 定义了 K8s 调度器的通用接口和基础逻辑。

  • pkg/scheduler/algorithm 目录: 包含调度算法的实现。


6. kubelet

kubelet 运行在每个节点上,负责管理节点上的容器,与 kube-apiserver 通信并确保 Pod 的正常运行。相关源码和实现细节包括:

  • cmd/kubelet 目录: 包含 kubelet 的入口点和初始化逻辑。

  • pkg/kubelet 目录: 定义了 K8s kubelet 的核心逻辑和接口。

  • pkg/kubelet/kubelet_pods.go 文件: 定义了 Pod 生命周期管理的关键逻辑。


7. kube-proxy

kube-proxy 负责维护网络规则,实现 Pod 之间的通信和 Service 的负载均衡。相关源码和实现细节包括:

  • cmd/kube-proxy 目录: 包含 kube-proxy 的入口点和初始化逻辑。

  • pkg/proxy 目录: 定义了 K8s kube-proxy 的核心逻辑和接口。

  • pkg/proxy/iptables.go 文件: 定义了 iptables 规则维护的关键逻辑。


上面只是源码中的一部分,更详细的源码解读需要参考官网:https://github.com/kubernetes/kubernetes


本周精彩文章推荐

1、现代化战机之路:美国空军U-2侦察机基于Jenkins和k8s的CI/CD架构演进
2、干掉99%传统运维:基于Jenkins和K8S构建DevOps流水线
3、合肥电信/Kubernetes技术培训
4、安全实践:保障 Kubernetes 生产环境的安全性
5、Kubernetes 1.29 发布:新增特性一览
6、基于K8S运行一个猜字游戏程序:包含完整步骤|附带Go开发贪吃蛇小游戏


作者微信:luckylucky421302


加微信,可以进学习交流群。


             点赞收藏,服务器10年不宕机

DevOps和k8s全栈技术
专注于DevOps,Kubernetes,Linux,Docker,istio,微服务,Spring Cloud,python,go,数据库,Nginx,Tomcat,云计算等技术分享~
 最新文章