Kubernetes 学习
学习新技术提升自我价值,Kubernetes 是 Google 开源的容器集群管理系统,对于容器运行时、编排、常规服务都抽象设计出标准完整的 API。
简介
跟着官方中文文档学习 K8s,此文档仅收集学习过程中记录的学习点。内容不够详细,具体内容可直接查看官方文档。
部署文档可参考
使用文档可参考
一个 Kubernetes 集群由一组被称作为节点的机器组成。这些节点上运行 Kubernetes 所管理的容器化应用。集群具有至少一个工作节点。
工作节点托管作为应用负载的组件的Pod。控制平面管理集群中的工作节点和Pod。
Kunernetes 的组件

控制平面组件(Control Plane Components)
控制平面的组件对集群做出全局决策(比如调度),以及检测和相应集群事件(例如,当不满足 replicas 字段时,启动新的 Pod)。
Kube-apiserver
该组件公开了 Kubernetes API。API 服务器是 Kubernetes 控制面的前端。
在设计上考虑了水平伸缩,可以通过部署多个实例进行伸缩。
etcd
etcd 是兼具一致性和高可用性的键值数据库,可作为 Kubernetes 所有集群数据的存储数据库。
kube-scheduler
负责监视新创建的、未指定运行节点(node)的 Pods,选择节点在 Pods 上运行。
调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。
kube-controller-manager
运行控制器进程的控制平面组件。
从逻辑上讲,每个控制器都是一个单独的进程, 但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。
包括:
- 节点控制器(Node Controller):负责在节点出现故障时进行通知和相应
- 任务控制器(Job Controller):检测嗲表一次性任务的 Job 对象,然后创建 Pods 来运行这些任务直至完成
- 端点控制器(Endpoints Controller):填充端点(Endpoints)对象(即加入 Service 与 Pod)
- 服务账户和令牌控制器(Service Account & Token Controller):为新的命名空间创建账户和 API 访问令牌
cloud-controller
云控制器管理器是指嵌入特定云的控制逻辑的 控制平面组件。 云控制器管理器使得你可以将你的集群连接到云提供商的 API 之上, 并将与该云平台交互的组件同与
你的集群交互的组件分离开来。
Node 组件
节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。
Kubernetes 中的工作机器称为节点。
kubelet
一个在集群中每个节点(node)上运行的代理。保证容器(containers)都运行在 Pod 上。
kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建
的容器。
kube-proxy
kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
容器运行时(Container Runtime)
容器运行环境是负责运行容器的软件。
Kubernetes 支持容器运行时,例如 Docker、 containerd、CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
插件(Addons)
插件使用 Kubernetes 资源(DaemonSet、 Deployment 等)实现集群功能。插件中命名空间域的资源属于 kube-system 命名空间
DNS
Web 界面(仪表盘)
待学习安装使用。
Dashboard 是 Kubernetes 集群的通用的、基于 Web 的用户界面。 它使用户可以管理集群中运行的应用程序以及集群本身并进行故障排除。
容器资源监控
容器资源监控 将关于容器的一些常见的时间序列度量值保存到一个集中的数据库中,并提供用于浏览这些数据的界面。
集群层面日志
集群层面日志 机制负责将容器的日志数据 保存到一个集中的日志存储中,该存储能够提供搜索和浏览接口。
特性
- 强大的容器编排能力
- 轻量级
- 开放开源
Kubernetes 核心概念
Pod
Pod 是若干相关容器的组合,Pod 包含的容器运行在同一台宿主机上。
Replication Controller
用来控制管理 Pod 副本(Replica,或者称为实例),是弹性伸缩、滚动升级的核心。
Service
是真实应用服务的抽象,定义了 Pod 的逻辑集合和访问这个 Pod 集合的策略。
Label
用于区分 Pod、Service、Replication Controller 的 Key/Value 对。是 Service 和 Replication Controller 运行的基础。
Node
Kubernetes 属于主从分布式集群架构,Node 运行管理容器,其作为 Kubernetes 的操作单元,用来分配给 Pod (或者说容器)进行绑定,Pod 最终运行 在 Node 上,Node 可以认为是 Pod 的宿主机。
Kubernetes 的架构和部署
Kubernetes 的架构和组件
Kubernetes 属于主从分布式结构。使用 etcd 数据库作为存储中间件,etcd 使用 Raft 一致性算法处理日志复制以保证强一致性。
包含的组件:
- Kubernetes API Server:封装了核心对象的增删改查操作,以 REST API 接口方式提供给外部客户和内部组件调用。
Kubernetes 提供的功能:
- 自动发布与伸缩:可以通过声明式的配置文件定义想要部署的容器,Kubernetes 将自动进行容器的部署,达到期望的结果;通过指定容器副本数,或者设置 根据资源负载情况(CPU、内存使用率),自动对容器组进行快速的伸缩–增减容器数量
- 滚动升级与灰度发布:采用逐步替换的策略实现滚动升级,使用 Kubernetes 也可以很轻易的管理系统的灰度发布
- 服务发现与负载均衡:Kubernetes 通过 DNS 名称或 IP 地址暴露容器的访问方式,并且可在统一容器组内实现负载分发与均衡
- 存储编排:Kubernetes 可以自动挂载指定的存储系统,如 local storage、nfs、云存储等
- 故障恢复:Kubernetes 自动重启已经停机的容器,替换不满足健康检查的容器
- 密钥与配置管理:Kubernetes 可以存储于管理敏感信息,如 Docker Registry 的登录凭证,密码,SSH 密钥等
待整理
Pod 表示集群上一组正在运行的容器。
-
2020-11-19
学习新技术提升自我价值,Kubernetes 是 Google 开源的容器集群管理系统,对于容器运行时、编排、常规服务都抽象设计出标准完整的 API。
-
2021-03-01
Docker 部署安装
-
2022-05-19
声明式方法管理 Kubernetes。
-
2023-08-24
-
2023-08-23