Use a better structure

This commit is contained in:
Baohua Yang
2026-02-09 09:32:05 -08:00
parent fdb879dcf2
commit e669ee0fe8
167 changed files with 2462 additions and 2462 deletions

View File

@@ -1,4 +1,4 @@
# Kubernetes
## Kubernetes
`Kubernetes` Google 团队发起并维护的基于 Docker 的开源容器集群管理系统它不仅支持常见的云平台而且支持内部数据中心

View File

@@ -1,8 +1,8 @@
# Kubernetes 高级特性
## Kubernetes 高级特性
掌握了 Kubernetes 的核心概念Pod, Service, Deployment我们需要了解更多高级特性以构建生产级应用
## Helm - 包管理工具
### Helm - 包管理工具
[Helm](https://helm.sh/) 被称为 Kubernetes 的包管理器(类似于 Linux 的 apt/yum。它将一组 Kubernetes 资源定义文件打包为一个 **Chart**。
@@ -10,7 +10,7 @@
* **版本管理**轻松回滚应用的发布版本
* **模板化**支持复杂的应用部署逻辑配置
## Ingress - 服务的入口
### Ingress - 服务的入口
Service 虽然提供了负载均衡但通常是 4 TCP/UDP**Ingress** 提供了 7 HTTP/HTTPS路由能力充当集群的网关
@@ -20,7 +20,7 @@ Service 虽然提供了负载均衡,但通常是 4 层TCP/UDP。**Ingres
常见的 Ingress Controller有 Nginx Ingress Controller, Traefik, Istio Gateway
## Persistent Volume (PV) StorageClass
### Persistent Volume (PV) StorageClass
容器内的文件是临时的对于有状态应用如数据库需要持久化存储
@@ -28,7 +28,7 @@ Service 虽然提供了负载均衡,但通常是 4 层TCP/UDP。**Ingres
* **PV (Persistent Volume)**实际的存储资源NFS, AWS EBS, Ceph
* **StorageClass**定义存储类支持动态创建 PV
## Horizontal Pod Autoscaling (HPA)
### Horizontal Pod Autoscaling (HPA)
HPA 根据 CPU 利用率或其他指标如内存自定义指标自动扩缩 Deployment ReplicaSet 中的 Pod 数量
@@ -53,7 +53,7 @@ spec:
averageUtilization: 50
```
## ConfigMap Secret
### ConfigMap Secret
* **ConfigMap**存储非机密的配置数据配置文件环境变量
* **Secret**存储机密数据密码Token证书 Etcd 中加密存储

View File

@@ -1,4 +1,4 @@
# 基本概念
## 基本概念
![](../_images/kubernetes_design.jpg)
@@ -13,27 +13,27 @@
* web 界面`ux`用户可以通过 web 界面操作 Kubernetes
* 命令行操作`cli``kubectl`命令
## 节点
### 节点
`Kubernetes` 节点是实际工作的点节点可以是虚拟机或者物理机器依赖于一个集群环境每个节点都有一些必要的服务以运行容器组并且它们都可以通过主节点来管理必要服务包括 Dockerkubelet 和代理服务
### 容器状态
#### 容器状态
容器状态用来描述节点的当前状态现在其中包含三个信息
#### 主机IP
##### 主机IP
主机 IP 需要云平台来查询`Kubernetes` 把它作为状态的一部分来保存如果 `Kubernetes` 没有运行在云平台上节点 ID 就是必需的IP 地址可以变化并且可以包含多种类型的 IP 地址如公共 IP私有 IP动态 IPipv6 等等
#### 节点周期
##### 节点周期
通常来说节点有 `Pending``Running``Terminated` 三个周期如果 Kubernetes 发现了一个节点并且其可用那么 Kubernetes 就把它标记为 `Pending`然后在某个时刻Kubernetes 将会标记其为 `Running`节点的结束周期称为 `Terminated`一个已经 `Terminated` 的节点不会接受和调度任何请求并且已经在其上运行的容器组也会删除
#### 节点状态
##### 节点状态
节点的状态主要是用来描述处于 `Running` 的节点当前可用的有 `NodeReachable` `NodeReady`以后可能会增加其他状态`NodeReachable` 表示集群可达`NodeReady` 表示 kubelet 返回 Status Ok 并且 HTTP 状态检查健康
### 节点管理
#### 节点管理
节点并非 Kubernetes 创建而是由云平台创建或者就是物理机器虚拟机 Kubernetes 节点仅仅是一条记录节点创建之后Kubernetes 会检查其是否可用 Kubernetes 节点用如下结构保存
@@ -56,7 +56,7 @@
Kubernetes 校验节点可用依赖于 ID在当前的版本中有两个接口可以用来管理节点节点控制和 Kube 管理
### 节点控制
#### 节点控制
Kubernetes 主节点中节点控制器是用来管理节点的组件主要包含
@@ -65,15 +65,15 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
节点控制有一个同步轮询主要监听所有云平台的虚拟实例会根据节点状态创建和删除可以通过 `--node_sync_period`标志来控制该轮询如果一个实例已经创建节点控制将会为其创建一个结构同样的如果一个节点被删除节点控制也会删除该结构 Kubernetes 启动时可用通过 `--machines`标记来显示指定节点同样可以使用 `kubectl` 来一条一条的添加节点两者是相同的通过设置 `--sync_nodes=false`标记来禁止集群之间的节点同步你也可以使用 api/kubectl 命令行来增删节点
## 容器组
### 容器组
Kubernetes 使用的最小单位是容器组容器组是创建调度管理的最小单位 一个容器组使用相同的 Docker 容器并共享卷挂载点一个容器组是一个特定应用的打包集合包含一个或多个容器
和运行的容器类似一个容器组被认为只有很短的运行周期容器组被调度到一组节点运行直到容器的生命周期结束或者其被删除如果节点死掉运行在其上的容器组将会被删除而不是重新调度也许在将来的版本中会添加容器组的移动
### 容器组设计的初衷
#### 容器组设计的初衷
### 资源共享和通信
#### 资源共享和通信
容器组主要是为了数据共享和它们之间的通信
@@ -81,11 +81,11 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
容器组有一组存储卷挂载点主要是为了让容器在重启之后可以不丢失数据
### 容器组管理
#### 容器组管理
容器组是一个应用管理和部署的高层次抽象同时也是一组容器的接口容器组是部署水平放缩的最小单位
### 容器组的使用
#### 容器组的使用
容器组可以通过组合来构建复杂的应用其本来的意义包含
@@ -95,7 +95,7 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
* 代理网桥
* 控制器管理配置以及更新
### 替代方案
#### 替代方案
为什么不在一个单一的容器里运行多个程序
@@ -104,27 +104,27 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
* 3.方便使用用户不必运行独立的程序管理也不用担心每个应用程序的退出状态
* 4.高效考虑到基础设施有更多的职责容器必须要轻量化
### 容器组的生命状态
#### 容器组的生命状态
包括若干状态值`pending``running``succeeded``failed`
#### pending
##### pending
容器组已经被节点接受但有一个或多个容器还没有运行起来这将包含某些节点正在下载镜像的时间这种情形会依赖于网络情况
#### running
##### running
容器组已经被调度到节点并且所有的容器都已经启动至少有一个容器处于运行状态或者处于重启状态
#### succeeded
##### succeeded
所有的容器都正常退出
#### failed
##### failed
容器组中所有容器都意外中断了
### 容器组生命周期
#### 容器组生命周期
通常来说如果容器组被创建了就不会自动销毁除非被某种行为触发而触发此种情况可能是人为或者复制控制器所为唯一例外的是容器组由 succeeded 状态成功退出或者在一定时间内重试多次依然失败
@@ -173,16 +173,16 @@ Kubernetes 校验节点可用依赖于 ID。在当前的版本中有两个接
* 节点控制器标记容器组 `failed`
* 如果容器组运行在一个控制器下容器组将会在其他地方重新创建
## Replication Controllers
### Replication Controllers
## 服务
### 服务
##
###
## 标签
### 标签
## 接口权限
### 接口权限
## web界面
### web界面
## 命令行操作
### 命令行操作

View File

@@ -1,8 +1,8 @@
# 架构设计
## 架构设计
任何优秀的项目都离不开优秀的架构设计本小节将介绍 Kubernetes 在架构方面的设计考虑
## 基本考虑
### 基本考虑
如果让我们自己从头设计一套容器管理平台有如下几个方面是很容易想到的
@@ -11,7 +11,7 @@
* 一套资源调度系统管理哪个容器该分配到哪个节点上
* 一套对容器内服务进行抽象和 HA 的系统
## 运行原理
### 运行原理
下面这张图完整展示了 Kubernetes 的运行原理
@@ -23,9 +23,9 @@
从这张图上我们没有能发现 Kubernetes 中对于控制平面的分布式实现但是由于数据后端自身就是一套分布式的数据库 Etcd因此可以很容易扩展到分布式实现
## 控制平面
### 控制平面
### 主节点服务
#### 主节点服务
主节点上需要提供如下的管理服务
@@ -33,7 +33,7 @@
* `scheduler` 负责对资源进行调度分配某个 pod 到某个节点上 pluggable 意味着很容易选择其它实现方式
* `controller-manager` 负责管理控制器包括 endpoint-controller刷新服务和 pod 的关联信息 replication-controller维护某个 pod 的复制为配置的数值
### Etcd
#### Etcd
这里 Etcd 即作为数据后端又作为消息中间件
@@ -41,7 +41,7 @@
组件可以自动的去侦测 Etcd 中的数值变化来获得通知并且获得更新后的数据来执行相应的操作
## 工作节点
### 工作节点
* kubelet 是工作节点执行操作的 agent负责具体的容器生命周期管理根据从数据库中获取的信息来管理容器并上报 pod 运行状态等
* kube-proxy 是一个简单的网络访问代理同时也是一个 Load Balancer它负责将访问到某个服务的请求具体分配给工作节点上的 Pod同一类标签

View File

@@ -1,8 +1,8 @@
# Kubernetes 简介
## Kubernetes 简介
![](../_images/kubernetes_logo.png)
## 什么是 Kubernetes
### 什么是 Kubernetes
Kubernetes常简称为 K8s Google 开源的容器编排引擎如果说 Docker 解决了"如何打包和运送集装箱"的问题那么 Kubernetes 解决的就是"如何管理海量集装箱的调度、运行和维护"的问题
@@ -12,7 +12,7 @@ Kubernetes常简称为 K8s是 Google 开源的容器编排引擎。如果
---
## 为什么需要 Kubernetes
### 为什么需要 Kubernetes
当我们在单机运行几个容器时Docker Compose 就足够了但在生产环境中我们需要面对
@@ -26,26 +26,26 @@ Kubernetes 完美解决了这些问题。
---
## 核心概念
### 核心概念
### Pod (豆荚)
#### Pod (豆荚)
Kubernetes 的最小调度单位一个 Pod 可以包含一个或多个紧密协作的容器共享网络和存储就像豌豆荚里的豌豆一样
### Node (节点)
#### Node (节点)
运行 Pod 的物理机或虚拟机
### Deployment (部署)
#### Deployment (部署)
定义应用的期望状态需要 3 个副本镜像版本为 v1K8s 会持续确保当前状态符合期望状态
### Service (服务)
#### Service (服务)
定义一组 Pod 的访问策略提供稳定的 Cluster IP DNS 名称负责负载均衡
### Namespace (命名空间)
#### Namespace (命名空间)
用于多租户资源隔离
---
## Docker 用户如何过渡
### Docker 用户如何过渡
如果你已经熟悉 Docker学习 K8s 会很容易
@@ -58,7 +58,7 @@ Kubernetes 的最小调度单位。一个 Pod 可以包含一个或多个紧密
---
## 架构
### 架构
Kubernetes 也是 C/S 架构 **Master (控制平面)** **Worker (工作节点)** 组成
@@ -67,7 +67,7 @@ Kubernetes 也是 C/S 架构,由 **Master (控制平面)** 和 **Worker (工
---
## 学习建议
### 学习建议
Kubernetes 的学习曲线较陡峭建议的学习路径
1. **理解基本概念**Pod, Deployment, Service
@@ -77,7 +77,7 @@ Kubernetes 的学习曲线较陡峭。建议的学习路径:
---
## 延伸阅读
### 延伸阅读
- [Minikube 安装](../kubernetes/setup/README.md)本地体验 K8s
- [Kubernetes 官网](https://kubernetes.io/):官方文档

View File

@@ -1,14 +1,14 @@
# Kubernetes 实战练习
## Kubernetes 实战练习
本章将通过一个具体的案例部署一个 Nginx 网站并为其配置 Service Ingress来串联前面学到的知识
## 目标
### 目标
1. 部署一个 Nginx Deployment
2. 创建一个 Service 暴露 Nginx
3. 可选通过 Ingress 访问服务
## 步骤 1创建 Deployment
### 步骤 1创建 Deployment
创建一个名为 `nginx-deployment.yaml` 的文件
@@ -42,7 +42,7 @@ spec:
kubectl apply -f nginx-deployment.yaml
```
## 步骤 2创建 Service
### 步骤 2创建 Service
创建一个名为 `nginx-service.yaml` 的文件
@@ -75,7 +75,7 @@ kubectl get svc nginx-service
如果输出端口是 `80:30080/TCP`你可以通过 `http://<NodeIP>:30080` 访问 Nginx
## 步骤 3模拟滚动更新 (Rolling Update)
### 步骤 3模拟滚动更新 (Rolling Update)
修改 `nginx-deployment.yaml`将镜像版本改为 `nginx:latest`
@@ -89,7 +89,7 @@ kubectl apply -f nginx-deployment.yaml
kubectl rollout status deployment/nginx-deployment
```
## 步骤 4清理资源
### 步骤 4清理资源
练习结束后记得清理资源