mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
fix(content): harden Docker practice guide
This commit is contained in:
@@ -7,13 +7,13 @@
|
||||
图 13-2:Kubernetes 基本概念示意图
|
||||
|
||||
* 节点 (`Node`):一个节点是一个运行 Kubernetes 中的主机。
|
||||
* 容器组 (`Pod`):一个 Pod 对应于由若干容器组成的一个容器组,同个组内的容器共享一个存储卷 (volume)。
|
||||
* 容器组 (`Pod`):Kubernetes 中最小的可部署和调度单元;一个 Pod 包含一个或多个紧密协作的容器,共享网络身份,并可共享一个或多个卷 (volume)。
|
||||
* 容器组生命周期 (`pod-states`):包含所有容器状态集合,包括容器组状态类型,容器组生命周期,事件,重启策略。
|
||||
* 服务 (`services`):一个 Kubernetes 服务是容器组逻辑的高级抽象,同时也对外提供访问容器组的策略。
|
||||
* 卷 (`volumes`):一个卷就是一个目录,容器对其有访问权限。
|
||||
* 标签 (`labels`):标签是用来连接一组对象的,比如容器组。标签可以被用来组织和选择子对象。
|
||||
* 接口权限 (`accessing_the_api`):端口,IP 地址和代理的防火墙规则。
|
||||
* web 界面 (`ux`):用户可以通过 web 界面操作 Kubernetes。
|
||||
* web 界面 (`ux`):用户可以通过 Headlamp 等仍在维护的 web 界面观察和操作 Kubernetes;历史 Dashboard 已停止维护。
|
||||
* 命令行操作 (`cli`):`kubectl` 命令。
|
||||
|
||||
### 13.2.1 节点
|
||||
@@ -82,7 +82,7 @@ $ kubectl drain worker-1 --ignore-daemonsets
|
||||
|
||||
### 13.2.2 容器组
|
||||
|
||||
在 Kubernetes 中,使用的最小调度单位是容器组 (Pod),它是创建、调度、管理的最小单位。一个 Pod 包含一个或多个紧密协作的容器,它们共享网络命名空间和存储卷。
|
||||
在 Kubernetes 中,使用的最小调度单位是容器组 (Pod),它是创建、调度、管理的最小单位。一个 Pod 包含一个或多个紧密协作的容器,它们共享网络命名空间,并可共享一个或多个存储卷。
|
||||
|
||||
Pod 通常不会被直接创建,而是通过 Deployment 等控制器来管理。当节点发生故障时,控制器会在其他可用节点上重新创建 Pod。
|
||||
|
||||
@@ -96,7 +96,7 @@ Pod 通常不会被直接创建,而是通过 Deployment 等控制器来管理
|
||||
|
||||
在一个容器组中,容器都使用相同的网络地址和端口,可以通过本地网络来相互通信。每个容器组都有独立的 IP,可以通过网络来和其他物理主机或者容器通信。
|
||||
|
||||
容器组有一组存储卷 (挂载点),主要是为了让容器在重启之后可以不丢失数据。
|
||||
容器组可以挂载一组存储卷 (挂载点)。卷不只用于持久化,也可用于 `emptyDir` 临时交换、ConfigMap/Secret 投射、日志旁路收集等场景。真正需要跨 Pod 生命周期保留的数据,应使用 PersistentVolume / PersistentVolumeClaim 等持久化机制。
|
||||
|
||||
#### 容器组管理
|
||||
|
||||
@@ -121,7 +121,7 @@ Pod 通常不会被直接创建,而是通过 Deployment 等控制器来管理
|
||||
|
||||
#### 容器组的生命状态
|
||||
|
||||
包括若干状态值:`Pending`、`Running`、`Succeeded`、`Failed`。
|
||||
Pod phase 包括若干状态值:`Pending`、`Running`、`Succeeded`、`Failed`、`Unknown`。
|
||||
|
||||
| 状态 | 说明 |
|
||||
|------|------|
|
||||
@@ -129,6 +129,7 @@ Pod 通常不会被直接创建,而是通过 Deployment 等控制器来管理
|
||||
| **Running** | Pod 已被调度到节点,并且所有容器都已启动。至少有一个容器处于运行状态。|
|
||||
| **Succeeded** | Pod 中的所有容器都正常退出,且不会被重启。|
|
||||
| **Failed** | Pod 中的所有容器都已终止,且至少有一个容器以失败状态退出。|
|
||||
| **Unknown** | 集群无法获取 Pod 状态,常见原因是节点失联。|
|
||||
|
||||
#### 容器组生命周期与重启策略
|
||||
|
||||
@@ -140,7 +141,7 @@ Pod 的重启策略 (`restartPolicy`) 决定了容器退出后的行为:
|
||||
| **OnFailure** | 不重启 | 重启容器 |
|
||||
| **Never** | 不重启 | 不重启 |
|
||||
|
||||
当节点故障或不可达时,节点控制器会将该节点上所有 Pod 的状态标记为 `Failed`。如果这些 Pod 由 Deployment 等控制器管理,控制器会自动在其他节点上重新创建。
|
||||
当节点故障或不可达时,Pod 可能先表现为 `Unknown`,之后根据控制器、驱逐策略和垃圾回收机制转为 `Failed` 或被重新创建。如果这些 Pod 由 Deployment 等控制器管理,控制器会自动在其他节点上重新创建。
|
||||
|
||||
### 13.2.3 Deployment 与 ReplicaSet
|
||||
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
## 13.5 实战练习
|
||||
|
||||
本章将通过一个具体的案例:部署一个 Nginx 网站,并为其配置 Service 和 Ingress,来串联前面学到的知识。
|
||||
本章将通过一个具体的案例:部署一个 Nginx 网站,并为其配置 Service,来串联前面学到的知识。
|
||||
|
||||
开始前请先准备好可用的 Kubernetes 集群和 `kubectl` 上下文。你可以先完成 [14.3 Docker Desktop](../14_kubernetes_setup/14.3_docker-desktop.md) 或 [14.4 Kind](../14_kubernetes_setup/14.4_kind.md),并确认:
|
||||
|
||||
```bash
|
||||
kubectl get nodes
|
||||
```
|
||||
|
||||
### 13.5.1 目标
|
||||
|
||||
1. 部署一个 Nginx Deployment。
|
||||
2. 创建一个 Service 暴露 Nginx。
|
||||
3. (可选) 通过 Ingress 访问服务。
|
||||
3. 通过端口转发或 NodePort 访问服务。
|
||||
|
||||
### 13.5.2 步骤 1:创建 Deployment
|
||||
|
||||
@@ -69,7 +75,15 @@ kubectl apply -f nginx-service.yaml
|
||||
```bash
|
||||
kubectl get svc nginx-service
|
||||
```
|
||||
如果输出端口是 `80:30080/TCP`,你可以通过 `http://<NodeIP>:30080` 访问 Nginx。
|
||||
如果输出端口是 `80:30080/TCP`,你可以通过 `http://<NodeIP>:30080` 访问 Nginx。Docker Desktop、Kind 等本地集群中,NodePort 到宿主机的可达性取决于集群实现;更稳定的本地访问方式是端口转发:
|
||||
|
||||
```bash
|
||||
kubectl port-forward svc/nginx-service 8080:80
|
||||
```
|
||||
|
||||
然后访问 `http://localhost:8080`。
|
||||
|
||||
> Ingress 只有在集群中已安装 Ingress controller 且配置了 IngressClass 时才会生效。当前练习只覆盖 Service;Ingress/Gateway API 建议在完成第 14 章后再单独练习。
|
||||
|
||||
### 13.5.4 步骤 3:模拟滚动更新
|
||||
|
||||
|
||||
Reference in New Issue
Block a user