style: apply global formatting fixes (struct, spacing, zhlint)

This commit is contained in:
Baohua Yang
2026-02-21 11:08:52 -08:00
parent ad68b2d973
commit 79ac9c639a
159 changed files with 1708 additions and 882 deletions

View File

@@ -1,4 +1,4 @@
# 第十二章 容器编排
# 第十二章容器编排
本章将介绍容器编排相关的技术与工具

View File

@@ -1,3 +1,3 @@
# etcd
`etcd` `CoreOS` 团队发起的一个管理配置信息和服务发现`Service Discovery`的项目在这一章里面我们将基于 `etcd 3.x` 版本介绍该项目的目标安装和使用以及实现的技术
`etcd` `CoreOS` 团队发起的一个管理配置信息和服务发现 (`Service Discovery`) 的项目在这一章里面我们将基于 `etcd 3.x` 版本介绍该项目的目标安装和使用以及实现的技术

View File

@@ -2,7 +2,7 @@
下面我们使用 [Docker Compose](../../10_compose/README.md) 模拟启动一个 3 节点的 `etcd` 集群
编辑 `compose.yaml` `docker-compose.yml`文件
编辑 `compose.yaml` ( `docker-compose.yml`) 文件
```yaml
services:

View File

@@ -83,11 +83,11 @@ OPTIONS:
### 数据库操作
数据库操作围绕对键值和目录的 CRUD 符合 REST 风格的一套操作Create完整生命周期的管理
数据库操作围绕对键值和目录的 CRUD (符合 REST 风格的一套操作Create) 完整生命周期的管理
etcd 在键的组织上采用了层次化的空间结构类似于文件系统中目录的概念用户指定的键可以为单独的名字 `testkey`此时实际上放在根目录 `/` 下面也可以为指定目录结构 `cluster1/node2/testkey`则将创建相应的目录结构
etcd 在键的组织上采用了层次化的空间结构 (类似于文件系统中目录的概念)用户指定的键可以为单独的名字 `testkey`此时实际上放在根目录 `/` 下面也可以为指定目录结构 `cluster1/node2/testkey`则将创建相应的目录结构
>CRUD Create, Read, Update, Delete是符合 REST 风格的一套 API 操作
>CRUD CreateReadUpdateDelete是符合 REST 风格的一套 API 操作
#### put
@@ -112,7 +112,7 @@ hello
支持的选项为
`--sort` 对结果进行排序
`--sort` 对结果进行排序
`--consistent` 将请求发给主节点保证获取内容的一致性
@@ -127,6 +127,8 @@ $ etcdctl del testkey
### 非数据库操作
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### watch
监测一个键值的变化一旦键值发生更新就会输出最新的值

View File

@@ -2,7 +2,7 @@
本节将介绍 etcd 的几种常见安装方式包括二进制安装Docker 镜像运行以及在 macOS 上的安装
`etcd` 基于 `Go` 语言实现因此用户可以从 [项目主页](https://github.com/etcd-io/etcd) 下载源代码自行编译,也可以下载编译好的二进制文件,甚至直接使用制作好的 `Docker` 镜像文件来体验。
`etcd` 基于 `Go` 语言实现因此用户可以从[项目主页](https://github.com/etcd-io/etcd)下载源代码自行编译,也可以下载编译好的二进制文件,甚至直接使用制作好的 `Docker` 镜像文件来体验。
>注意本章节内容基于 etcd `3.4.x` 版本
@@ -30,7 +30,7 @@ Documentation README-etcdctl.md README.md READMEv2-etcdctl.md etcd etcdctl
其中 `etcd` 是服务主文件`etcdctl` 是提供给用户的命令客户端其他文件是支持文档
下面将 `etcd` `etcdctl` 文件放到系统可执行目录例如 `/usr/local/bin/`
下面将 `etcd` `etcdctl` 文件放到系统可执行目录 (例如 `/usr/local/bin/`)
```bash
$ sudo cp etcd* /usr/local/bin/

View File

@@ -6,7 +6,7 @@
12-5 etcd 项目标识
`etcd` `CoreOS` 团队于 2013 6 月发起的开源项目它的目标是构建一个高可用的分布式键值`key-value`数据库基于 `Go` 语言实现我们知道在分布式系统中各种服务的配置信息的管理分享服务的发现是一个很基本同时也是很重要的问题`CoreOS` 项目就希望基于 `etcd` 来解决这一问题
`etcd` `CoreOS` 团队于 2013 6 月发起的开源项目它的目标是构建一个高可用的分布式键值 (`key-value`) 数据库基于 `Go` 语言实现我们知道在分布式系统中各种服务的配置信息的管理分享服务的发现是一个很基本同时也是很重要的问题`CoreOS` 项目就希望基于 `etcd` 来解决这一问题
`etcd` 目前在 [github.com/etcd-io/etcd](https://github.com/etcd-io/etcd) 进行维护。

View File

@@ -42,7 +42,7 @@ kubectl [command]
## port-forward
将本地端口转发到Pod
将本地端口转发到 Pod
## proxy
@@ -70,7 +70,7 @@ kubectl [command]
## api-versions
"组/版本" 的格式输出服务端支持的 API 版本
/版本 的格式输出服务端支持的 API 版本
## version

View File

@@ -1,10 +1,10 @@
## Kubernetes 高级特性
掌握了 Kubernetes 的核心概念Pod, Service, Deployment我们需要了解更多高级特性以构建生产级应用
掌握了 Kubernetes 的核心概念 (PodServiceDeployment) 我们需要了解更多高级特性以构建生产级应用
### Helm - 包管理工具
[Helm](https://helm.sh/) 被称为 Kubernetes 的包管理器类似于 Linux 的 apt/yum。它将一组 Kubernetes 资源定义文件打包为一个 **Chart**。
[Helm](https://helm.sh/) 被称为 Kubernetes 的包管理器 (类似于 Linux 的 apt/yum)。它将一组 Kubernetes 资源定义文件打包为一个 **Chart**。
* **安装应用**`helm install my-release bitnami/mysql`
* **版本管理**轻松回滚应用的发布版本
@@ -12,25 +12,25 @@
### Ingress - 服务的入口
Service 虽然提供了负载均衡但通常是 4 TCP/UDP**Ingress** 提供了 7 HTTP/HTTPS路由能力充当集群的网关
Service 虽然提供了负载均衡但通常是 4 (TCP/UDP)**Ingress** 提供了 7 (HTTP/HTTPS) 路由能力充当集群的网关
* **域名路由**基于 Host 将请求转发不同服务 (api.example.com -> api-svc, web.example.com -> web-svc)
* **路径路由**基于 Path 将请求转发 (/api -> api-svc, / -> web-svc)
* **域名路由**基于 Host 将请求转发不同服务 (api.example.com -> api-svcweb.example.com -> web-svc)
* **路径路由**基于 Path 将请求转发 (/api -> api-svc / -> web-svc)
* **SSL/TLS**集中管理证书
常见的 Ingress Controller有 Nginx Ingress Controller, Traefik, Istio Gateway
常见的 Ingress Controller Nginx Ingress ControllerTraefikIstio Gateway
### Persistent VolumePV StorageClass
### Persistent Volume StorageClass
容器内的文件是临时的对于有状态应用如数据库需要持久化存储
容器内的文件是临时的对于有状态应用 (如数据库)需要持久化存储
* **PVC (Persistent Volume Claim)**用户申请存储的声明
* **PV (Persistent Volume)**实际的存储资源NFS, AWS EBS, Ceph
* **PV (Persistent Volume)**实际的存储资源 (NFSAWS EBSCeph )
* **StorageClass**定义存储类支持动态创建 PV
### Horizontal Pod AutoscalingHPA
### Horizontal Pod Autoscaling
HPA 根据 CPU 利用率或其他指标如内存自定义指标自动扩缩 Deployment ReplicaSet 中的 Pod 数量
HPA 根据 CPU 利用率或其他指标 (如内存自定义指标) 自动扩缩 Deployment ReplicaSet 中的 Pod 数量
```yaml
apiVersion: autoscaling/v2
@@ -55,7 +55,7 @@ spec:
### ConfigMap Secret
* **ConfigMap**存储非机密的配置数据配置文件环境变量
* **Secret**存储机密数据密码Token证书 Etcd 中加密存储
* **ConfigMap**存储非机密的配置数据 (配置文件环境变量)
* **Secret**存储机密数据 (密码Token证书) Etcd 中加密存储
通过将配置与镜像分离保证了容器的可移植性

View File

@@ -6,16 +6,16 @@
12-2 Kubernetes 基本概念示意图
* 节点`Node`一个节点是一个运行 Kubernetes 中的主机
* 容器组`Pod`一个 Pod 对应于由若干容器组成的一个容器组同个组内的容器共享一个存储卷(volume)
* 容器组生命周期`pod-states`包含所有容器状态集合包括容器组状态类型容器组生命周期事件重启策略以及 replication controllers
* 节点 (`Node`)一个节点是一个运行 Kubernetes 中的主机
* 容器组 (`Pod`)一个 Pod 对应于由若干容器组成的一个容器组同个组内的容器共享一个存储卷 (volume)
* 容器组生命周期 (`pod-states`)包含所有容器状态集合包括容器组状态类型容器组生命周期事件重启策略以及 replication controllers
* Replication Controllers主要负责指定数量的 pod 在同一时间一起运行
* 服务`services`一个 Kubernetes 服务是容器组逻辑的高级抽象同时也对外提供访问容器组的策略
* `volumes`一个卷就是一个目录容器对其有访问权限
* 标签`labels`标签是用来连接一组对象的比如容器组标签可以被用来组织和选择子对象
* 接口权限`accessing_the_api`端口IP 地址和代理的防火墙规则
* web 界面`ux`用户可以通过 web 界面操作 Kubernetes
* 命令行操作`cli``kubectl`命令
* 服务 (`services`)一个 Kubernetes 服务是容器组逻辑的高级抽象同时也对外提供访问容器组的策略
* (`volumes`)一个卷就是一个目录容器对其有访问权限
* 标签 (`labels`)标签是用来连接一组对象的比如容器组标签可以被用来组织和选择子对象
* 接口权限 (`accessing_the_api`)端口IP 地址和代理的防火墙规则
* web 界面 (`ux`)用户可以通过 web 界面操作 Kubernetes
* 命令行操作 (`cli`)`kubectl` 命令
### 节点
@@ -25,7 +25,7 @@
容器状态用来描述节点的当前状态现在其中包含三个信息
##### 主机IP
##### 主机 IP
主机 IP 需要云平台来查询`Kubernetes` 把它作为状态的一部分来保存如果 `Kubernetes` 没有运行在云平台上节点 ID 就是必需的IP 地址可以变化并且可以包含多种类型的 IP 地址如公共 IP私有 IP动态 IPipv6 等等
@@ -67,17 +67,17 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
* 集群范围内节点同步
* 单节点生命周期管理
节点控制有一个同步轮询主要监听所有云平台的虚拟实例会根据节点状态创建和删除可以通过 `--node_sync_period`标志来控制该轮询如果一个实例已经创建节点控制将会为其创建一个结构同样的如果一个节点被删除节点控制也会删除该结构 Kubernetes 启动时可用通过 `--machines`标记来显示指定节点同样可以使用 `kubectl` 来一条一条的添加节点两者是相同的通过设置 `--sync_nodes=false`标记来禁止集群之间的节点同步你也可以使用 api/kubectl 命令行来增删节点
节点控制有一个同步轮询主要监听所有云平台的虚拟实例会根据节点状态创建和删除可以通过 `--node_sync_period` 标志来控制该轮询如果一个实例已经创建节点控制将会为其创建一个结构同样的如果一个节点被删除节点控制也会删除该结构 Kubernetes 启动时可用通过 `--machines` 标记来显示指定节点同样可以使用 `kubectl` 来一条一条的添加节点两者是相同的通过设置 `--sync_nodes=false` 标记来禁止集群之间的节点同步你也可以使用 api/kubectl 命令行来增删节点
### 容器组
Kubernetes 使用的最小单位是容器组容器组是创建调度管理的最小单位 一个容器组使用相同的 Docker 容器并共享卷挂载点一个容器组是一个特定应用的打包集合包含一个或多个容器
Kubernetes 使用的最小单位是容器组容器组是创建调度管理的最小单位一个容器组使用相同的 Docker 容器并共享卷 (挂载点)一个容器组是一个特定应用的打包集合包含一个或多个容器
和运行的容器类似一个容器组被认为只有很短的运行周期容器组被调度到一组节点运行直到容器的生命周期结束或者其被删除如果节点死掉运行在其上的容器组将会被删除而不是重新调度也许在将来的版本中会添加容器组的移动
和运行的容器类似一个容器组被认为只有很短的运行周期容器组被调度到一组节点运行直到容器的生命周期结束或者其被删除如果节点死掉运行在其上的容器组将会被删除而不是重新调度(也许在将来的版本中会添加容器组的移动)
#### 容器组设计的初衷
容器组Pod的设计主要是为了解决应用间的紧密协作和资源共享问题
容器组 (Pod) 的设计主要是为了解决应用间的紧密协作和资源共享问题
#### 资源共享和通信
@@ -85,7 +85,7 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
在一个容器组中容器都使用相同的网络地址和端口可以通过本地网络来相互通信每个容器组都有独立的 IP可用通过网络来和其他物理主机或者容器通信
容器组有一组存储卷挂载点主要是为了让容器在重启之后可以不丢失数据
容器组有一组存储卷 (挂载点)主要是为了让容器在重启之后可以不丢失数据
#### 容器组管理
@@ -105,10 +105,10 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
为什么不在一个单一的容器里运行多个程序
* 1.透明化为了使容器组中的容器保持一致的基础设施和服务比如进程管理和资源监控这样设计是为了用户的便利性
* 2.解偶软件之间的依赖每个容器都可能重新构建和发布Kubernetes 必须支持热发布和热更新将来
* 3.方便使用用户不必运行独立的程序管理也不用担心每个应用程序的退出状态
* 4.高效考虑到基础设施有更多的职责容器必须要轻量化
* 1透明化为了使容器组中的容器保持一致的基础设施和服务比如进程管理和资源监控这样设计是为了用户的便利性
* 2解偶软件之间的依赖每个容器都可能重新构建和发布Kubernetes 必须支持热发布和热更新 (将来)
* 3方便使用用户不必运行独立的程序管理也不用担心每个应用程序的退出状态
* 4高效考虑到基础设施有更多的职责容器必须要轻量化
#### 容器组的生命状态
@@ -120,7 +120,7 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
##### running
容器组已经被调度到节点并且所有的容器都已经启动至少有一个容器处于运行状态或者处于重启状态
容器组已经被调度到节点并且所有的容器都已经启动至少有一个容器处于运行状态 (或者处于重启状态)
##### succeeded
@@ -144,19 +144,19 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
* 始终重启容器容器组保持 `running`
* 失败时容器组变为 `succeeded`
* 从不容器组变为 `succeeded`
* 容器组状态 `running`1容器容器异常退出
* 容器组状态 `running` 1 容器容器异常退出
* 记录失败事件
* 如果重启策略为
* 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running`
* 从不容器组变为 `failed`
* 容器组状态 `running`2容器1容器异常退出
* 容器组状态 `running` 2 容器 1 容器异常退出
* 记录失败事件
* 如果重启策略为
* 始终重启容器容器组保持 `running`
* 失败时重启容器容器组保持 `running`
* 从不容器组保持 `running`
* 当有2容器退出
* 当有 2 容器退出
* 记录失败事件
* 如果重启策略为
* 始终重启容器容器组保持 `running`
@@ -181,25 +181,25 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
### Replication Controllers
> Replication ControllerRC是早期的控制器类型现代 Kubernetes 更推荐使用 ReplicaSet/Deployment
> Replication Controller (RC) 是早期的控制器类型现代 Kubernetes 更推荐使用 ReplicaSet/Deployment
### 服务
> 服务Service定义一组 Pod 的逻辑集合和访问它们的策略
> 服务 (Service) 定义一组 Pod 的逻辑集合和访问它们的策略
###
> Volume包含可被 Pod 中容器访问的数据的目录
> (Volume) 包含可被 Pod 中容器访问的数据的目录
### 标签
> 标签Label是附加到对象 Pods上的键值对用于组织和选择对象子集
> 标签 (Label) 是附加到对象 ( Pods) 上的键值对用于组织和选择对象子集
### 接口权限
> 接口权限通过认证授权和准入控制来保护 Kubernetes API 的访问
### web界面
### web 界面
> Kubernetes Dashboard 是一个基于 Web 的用户界面用于管理集群

View File

@@ -19,7 +19,7 @@
12-3 Kubernetes 运行原理图
可见Kubernetes 首先是一套分布式系统由多个节点组成节点分为两类一类是属于管理平面的主节点/控制节点Master Node一类是属于运行平面的工作节点Worker Node
可见Kubernetes 首先是一套分布式系统由多个节点组成节点分为两类一类是属于管理平面的主节点/控制节点 (Master Node)一类是属于运行平面的工作节点 (Worker Node)
显然复杂的工作肯定都交给控制节点去做了工作节点负责提供稳定的操作接口和能力抽象即可
@@ -27,7 +27,7 @@
### 控制平面
控制平面Control Plane Kubernetes 集群的大脑负责做出全局决策如调度以及检测和响应集群事件
控制平面 (Control Plane) Kubernetes 集群的大脑负责做出全局决策 (如调度) 以及检测和响应集群事件
#### 主节点服务
@@ -35,7 +35,7 @@
* `apiserver` 是整个系统的对外接口提供一套 RESTful [Kubernetes API](https://kubernetes.io/zh/docs/concepts/overview/kubernetes-api/),供客户端和其它组件调用;
* `scheduler` 负责对资源进行调度分配某个 pod 到某个节点上 pluggable 意味着很容易选择其它实现方式
* `controller-manager` 负责管理控制器包括 endpoint-controller刷新服务和 pod 的关联信息 replication-controller维护某个 pod 的复制为配置的数值
* `controller-manager` 负责管理控制器包括 endpoint-controller (刷新服务和 pod 的关联信息) replication-controller (维护某个 pod 的复制为配置的数值)
#### Etcd
@@ -48,7 +48,7 @@
### 工作节点
* kubelet 是工作节点执行操作的 agent负责具体的容器生命周期管理根据从数据库中获取的信息来管理容器并上报 pod 运行状态等
* kube-proxy 是一个简单的网络访问代理同时也是一个 Load Balancer它负责将访问到某个服务的请求具体分配给工作节点上的 Pod同一类标签
* kube-proxy 是一个简单的网络访问代理同时也是一个 Load Balancer它负责将访问到某个服务的请求具体分配给工作节点上的 Pod (同一类标签)
![Proxy 代理对服务的请求](./_images/kube-proxy.png)

View File

@@ -8,11 +8,11 @@
### 什么是 Kubernetes
Kubernetes常简称为 K8s Google 开源的容器编排引擎如果说 Docker 解决了"如何打包和运送集装箱"的问题那么 Kubernetes 解决的就是"如何管理海量集装箱的调度、运行和维护"的问题
Kubernetes (常简称为 K8s) Google 开源的容器编排引擎如果说 Docker 解决了 如何打包和运送集装箱 的问题那么 Kubernetes 解决的就是 如何管理海量集装箱的调度运行和维护 的问题
它不仅仅是一个编排系统更是一个**云原生应用操作系统**
> **名字由来**Kubernetes 在希腊语中意为"舵手""飞行员"K8s 是因为 k s 之间有 8 个字母
> **名字由来**Kubernetes 在希腊语中意为 舵手 飞行员K8s 是因为 k s 之间有 8 个字母
---
@@ -32,23 +32,25 @@ Kubernetes 完美解决了这些问题。
### 核心概念
#### Pod豆荚
本节涵盖了相关内容与详细描述主要探讨以下几个方面
Kubernetes 的最小调度单位一个 Pod 可以包含一个或多个紧密协作的容器共享网络和存储就像豌豆荚里的豌豆一样
#### Pod (豆荚)
#### Node节点
Kubernetes 的最小调度单位一个 Pod 可以包含一个或多个紧密协作的容器 (共享网络和存储)就像豌豆荚里的豌豆一样
#### Node (节点)
运行 Pod 的物理机或虚拟机
#### Deployment部署
#### Deployment (部署)
定义应用的期望状态需要 3 个副本镜像版本为 v1K8s 会持续确保当前状态符合期望状态
定义应用的期望状态 (需要 3 个副本镜像版本为 v1)K8s 会持续确保当前状态符合期望状态
#### Service服务
#### Service (服务)
定义一组 Pod 的访问策略提供稳定的 Cluster IP DNS 名称负责负载均衡
#### Namespace命名空间
#### Namespace (命名空间)
用于多租户资源隔离
@@ -69,17 +71,17 @@ Kubernetes 的最小调度单位。一个 Pod 可以包含一个或多个紧密
### 架构
Kubernetes 也是 C/S 架构 **Control Plane控制平面****Worker Node工作节点** 组成
Kubernetes 也是 C/S 架构 **Control Plane (控制平面) **** Worker Node (工作节点)** 组成
- **Control Plane**负责决策API Server, Scheduler, Controller Manager, etcd
- **Worker Node**负责干活Kubelet, Kube-proxy, Container Runtime
- **Control Plane**负责决策 (API ServerSchedulerController Manageretcd)
- **Worker Node**负责干活 (KubeletKube-proxyContainer Runtime)
---
### 学习建议
Kubernetes 的学习曲线较陡峭建议的学习路径
1. **理解基本概念**Pod, Deployment, Service
1. **理解基本概念**PodDeploymentService
2. **动手实践**使用 Minikube Kind 在本地搭建集群
3. **部署应用**编写 YAML 部署一个无状态应用
4. **深入原理**网络模型存储机制调度算法

View File

@@ -6,7 +6,7 @@
1. 部署一个 Nginx Deployment
2. 创建一个 Service 暴露 Nginx
3. 可选通过 Ingress 访问服务
3. (可选) 通过 Ingress 访问服务
### 步骤 1创建 Deployment
@@ -75,7 +75,7 @@ kubectl get svc nginx-service
如果输出端口是 `80:30080/TCP`你可以通过 `http://<NodeIP>:30080` 访问 Nginx
### 步骤 3模拟滚动更新Rolling Update
### 步骤 3模拟滚动更新
修改 `nginx-deployment.yaml`将镜像版本改为 `nginx:1.27-alpine`

View File

@@ -1,6 +1,6 @@
# 部署 Kubernetes
目前Kubernetes 支持在多种环境下使用包括本地主机UbuntuDebianCentOSFedora 云服务[腾讯云](https://cloud.tencent.com/act/cps/redirect?redirect=10058&cps_key=3a5255852d5db99dcd5da4c72f05df61)、[阿里云](https://www.aliyun.com/product/kubernetes?source=5176.11533457&userCode=8lx5zmtu&type=copy)、[百度云](https://cloud.baidu.com/product/cce.html) 等)
目前Kubernetes 支持在多种环境下使用包括本地主机 (UbuntuDebianCentOSFedora )云服务 ([腾讯云](https://cloud.tencent.com/act/cps/redirect?redirect=10058&cps_key=3a5255852d5db99dcd5da4c72f05df61)、[阿里云](https://www.aliyun.com/product/kubernetes?source=5176.11533457&userCode=8lx5zmtu&type=copy)、[百度云](https://cloud.baidu.com/product/cce.html)等)
你可以使用以下几种方式部署 Kubernetes

View File

@@ -4,8 +4,8 @@
### 核心特性
* **轻量级**移除过时的非必须的 Kubernetes 功能如传统的云提供商插件使用 SQLite 作为默认数据存储也支持 Etcd/MySQL/Postgres
* **单一二进制**所有组件API Server, Controller Manager, Scheduler, Kubelet, Kube-proxy打包在一个进程中运行
* **轻量级**移除过时的非必须的 Kubernetes 功能 (如传统的云提供商插件)使用 SQLite 作为默认数据存储 (也支持 Etcd/MySQL/Postgres)
* **单一二进制**所有组件 (API ServerController ManagerSchedulerKubeletKube-proxy) 打包在一个进程中运行
* **开箱即用**内置 Helm ControllerTraefik Ingress controllerServiceLBLocal-Path-Provisioner
* **安全**默认启用安全配置基于 TLS 通信
@@ -13,7 +13,7 @@
K3s 的安装非常简单官方提供了便捷的安装脚本
#### 脚本安装Linux
#### 脚本安装
K3s 提供了极为便捷的安装脚本
@@ -39,7 +39,7 @@ k3s-master Ready control-plane,master 1m v1.35.1+k3s1
### 快速使用
K3s 内置了 `kubectl` 命令通过 `k3s kubectl` 调用为了方便通常会建立别名或配置 `KUBECONFIG`
K3s 内置了 `kubectl` 命令 (通过 `k3s kubectl` 调用)为了方便通常会建立别名或配置 `KUBECONFIG`
```bash
## 读取 K3s 的配置文件

View File

@@ -4,12 +4,12 @@
### 为什么选择 Kind
Kind 相比其他本地集群方案 Minikube有以下显著优势
Kind 相比其他本地集群方案 ( Minikube) 有以下显著优势
* **轻量便捷**只要有 Docker 环境即可无需额外虚拟机
* **多集群支持**可以轻松在本地启动多个集群
* **多版本支持**支持指定 Kubernetes 版本进行测试
* **HA 支持**支持模拟高可用集群 Control Plane
* **HA 支持**支持模拟高可用集群 ( Control Plane)
### 安装 Kind
@@ -23,7 +23,7 @@ Kind 是一个二进制文件,并在 PATH 中即可使用。以下是不同系
brew install kind
```
#### Linux / WindowsWSL2
#### Linux / Windows
可以下载二进制文件

View File

@@ -1,14 +1,14 @@
## 使用 kubeadm 部署 Kubernetes使用 Docker
## 使用 kubeadm 部署 Kubernetes (使用 Docker)
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `Kubernetes` 集群的最佳实践
> **重要说明** Kubernetes 1.24 内置 `dockershim` 已被移除Kubernetes 默认不再直接使用 Docker Engine 作为容器运行时CRI因此**更推荐参考**同目录下的[使用 kubeadm 部署 KubernetesCRI 使用 containerd](kubeadm.md)
> **重要说明** Kubernetes 1.24 内置 `dockershim` 已被移除Kubernetes 默认不再直接使用 Docker Engine 作为容器运行时 (CRI)因此**更推荐参考**同目录下的[使用 kubeadm 部署 Kubernetes (CRI 使用 containerd)](kubeadm.md)
>
> 本文档主要用于历史环境/学习目的如果你确实需要在较新版本中继续使用 Docker Engine通常需要额外部署 `cri-dockerd` 并在 `kubeadm init/join` 中指定 `--cri-socket`
### 安装 Docker
参考 [安装 Docker](../../03_install/README.md) 一节安装 Docker
参考[安装 Docker](../../03_install/README.md) 一节安装 Docker
### 安装 **kubelet****kubeadm****kubectl**
@@ -58,6 +58,8 @@ $ sudo yum install -y kubelet kubeadm kubectl
### 修改内核的运行参数
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 加载内核模块
运行以下命令
@@ -72,7 +74,7 @@ $ sudo modprobe overlay
$ sudo modprobe br_netfilter
```
#### 禁用 swap必须
#### 禁用 swap (必须)
kubelet 默认要求禁用 swap否则可能导致初始化失败或节点无法加入集群
@@ -101,6 +103,10 @@ $ sysctl --system
为了让 kubelet 正确运行我们需要对其进行一些必要的配置
#### 概述
总体概述了以下内容
#### 修改 `kubelet.service`
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
@@ -169,7 +175,7 @@ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
#### node 工作节点
**另一主机**重复**部署** 小节以前的步骤安装配置好 kubelet根据提示加入到集群
**另一主机**重复**部署**小节以前的步骤安装配置好 kubelet根据提示加入到集群
```bash
$ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
@@ -186,7 +192,7 @@ $ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
* `scheduler` 负责对资源进行调度分配某个 pod 到某个节点上
* `controller-manager` 负责管理控制器包括 endpoint-controller刷新服务和 pod 的关联信息 replication-controller维护某个 pod 的复制为配置的数值
* `controller-manager` 负责管理控制器包括 endpoint-controller (刷新服务和 pod 的关联信息) replication-controller (维护某个 pod 的复制为配置的数值)
#### 工作节点服务
@@ -208,6 +214,10 @@ $ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
这里以 `flannel` 为例进行介绍
#### 概述
总体概述了以下内容
#### flannel
检查 podCIDR 设置

View File

@@ -1,12 +1,12 @@
## 使用 kubeadm 部署 KubernetesCRI 使用 containerd
## 使用 kubeadm 部署 Kubernetes (CRI 使用 containerd)
`kubeadm` 提供了 `kubeadm init` 以及 `kubeadm join` 这两个命令作为快速创建 `Kubernetes` 集群的最佳实践
> **版本说明**Kubernetes 版本更新较快约每 4 个月一个新版本本文档基于 Kubernetes 1.35 编写请访问 [Kubernetes 官方发布页](https://kubernetes.io/releases/) 获取最新版本信息。
> **版本说明**Kubernetes 版本更新较快 (约每 4 个月一个新版本)本文档基于 Kubernetes 1.35 编写请访问 [Kubernetes 官方发布页](https://kubernetes.io/releases/)获取最新版本信息。
### 安装 containerd
参考 [安装 Docker](../../03_install/README.md) 一节添加 apt/yum 之后执行如下命令
参考[安装 Docker](../../03_install/README.md) 一节添加 apt/yum 之后执行如下命令
```bash
## debian 系
@@ -276,6 +276,8 @@ $ sudo yum install -y kubelet kubeadm kubectl cri-tools kubernetes-cni
### 修改内核的运行参数
本节涵盖了相关内容与详细描述主要探讨以下几个方面
#### 加载内核模块
运行以下命令
@@ -290,7 +292,7 @@ $ sudo modprobe overlay
$ sudo modprobe br_netfilter
```
#### 禁用 swap必须
#### 禁用 swap (必须)
kubelet 默认要求禁用 swap否则可能导致初始化失败或节点无法加入集群
@@ -319,6 +321,10 @@ $ sysctl --system
为了让 kubelet 正确运行我们需要对其进行一些必要的配置
#### 概述
总体概述了以下内容
#### 修改 `kubelet.service`
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
@@ -393,7 +399,7 @@ kubeadm join 192.168.199.100:6443 --token cz81zt.orsy9gm9v649e5lf \
#### node 工作节点
**另一主机**重复**部署** 小节以前的步骤安装配置好 kubelet根据提示加入到集群
**另一主机**重复**部署**小节以前的步骤安装配置好 kubelet根据提示加入到集群
```bash
$ systemctl enable cri-containerd
@@ -420,7 +426,7 @@ CONTAINER_RUNTIME_ENDPOINT=/run/cri-containerd/cri-containerd.sock crictl ps -a
* `scheduler` 负责对资源进行调度分配某个 pod 到某个节点上
* `controller-manager` 负责管理控制器包括 endpoint-controller刷新服务和 pod 的关联信息 replication-controller维护某个 pod 的复制为配置的数值
* `controller-manager` 负责管理控制器包括 endpoint-controller (刷新服务和 pod 的关联信息) replication-controller (维护某个 pod 的复制为配置的数值)
#### 工作节点服务
@@ -442,6 +448,10 @@ CONTAINER_RUNTIME_ENDPOINT=/run/cri-containerd/cri-containerd.sock crictl ps -a
这里以 `flannel` 为例进行介绍
#### 概述
总体概述了以下内容
#### flannel
检查 podCIDR 设置