mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
Refresh k8s docker versions and references
This commit is contained in:
@@ -94,8 +94,8 @@ flowchart LR
|
||||
end
|
||||
```
|
||||
- **LXC** (2013):Docker 最初基于 Linux Containers
|
||||
- **libcontainer** (2014,v0.7):Docker 自研的容器运行时
|
||||
- **runC** (2015,v1.11):捐献给 OCI 的标准容器运行时
|
||||
- **libcontainer** (2014,Docker 0.9):Docker 自研的容器运行时
|
||||
- **runC** (2015,Docker 1.11 整合):捐献给 OCI 的标准容器运行时
|
||||
- **containerd**:高级容器运行时,管理容器生命周期
|
||||
|
||||

|
||||
|
||||
@@ -27,7 +27,7 @@ Docker 支持诸多版本的 [Ubuntu](https://ubuntu.com/server) 操作系统。
|
||||
* Ubuntu Noble 24.04 (LTS),Docker v29.x
|
||||
* Ubuntu Jammy 22.04 (LTS), Docker v29.x
|
||||
|
||||
> **注意**:Ubuntu 20.04 LTS 已于 2025 年 5 月 31 日结束标准支持,不再推荐用于新部署。
|
||||
> **警告**:Ubuntu 20.04 LTS 已于 2025 年 5 月 31 日结束标准支持。对于生产系统,建议升级至 Ubuntu 22.04 LTS 或 Ubuntu 24.04 LTS,以获得长期维护支持。若必须继续使用 20.04,可通过 Ubuntu Pro 订阅获得扩展安全维护(ESM)。
|
||||
|
||||
在 Ubuntu LTS 版本上,目前 Docker 支持 amd64、arm64、armhf、ppc64el、s390x 等 5 个平台;而非 LTS 版本支持的平台通常较少。同时,LTS 版本会获得 5 年的升级维护支持,这样的系统会获得更长期的安全保障,因此在生产环境中推荐使用 LTS 版本。
|
||||
|
||||
|
||||
@@ -16,9 +16,11 @@ Debian 以其稳定性著称,是 Docker 的理想宿主系统。本节将指
|
||||
|
||||
Docker 支持以下版本的 [Debian](https://www.debian.org/intro/about) 操作系统:
|
||||
|
||||
* Debian Trixie 13 (stable)
|
||||
* Debian Bookworm 12 (oldstable)
|
||||
* Debian Bullseye 11 (LTS)
|
||||
* Debian Trixie 13 (stable,2025 年 8 月发布,当前活跃版本)
|
||||
* Debian Bookworm 12 (oldstable,全面支持至 2026 年 6 月,LTS 至 2028 年 6 月)
|
||||
* Debian Bullseye 11 (LTS 长期支持,支持至 2026 年 8 月 31 日)
|
||||
|
||||
> **注意**:Debian Bullseye 11 将于 2026 年 8 月底结束长期支持。建议新部署使用 Bookworm 12 或 Trixie 13。
|
||||
|
||||
#### 卸载旧版本
|
||||
|
||||
|
||||
@@ -16,8 +16,8 @@ Fedora 的快速发布周期(每 6 个月发布新版本)决定了它的用
|
||||
|
||||
Docker 支持以下版本的 [Fedora](https://getfedora.org/) 操作系统:
|
||||
|
||||
* 42
|
||||
* 43
|
||||
* Fedora 42 (支持至 2026 年 5 月)
|
||||
* Fedora 43 (支持至 2026 年 12 月)
|
||||
|
||||
#### 卸载旧版本
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ CentOS (及其替代品 Rocky Linux、AlmaLinux) 是企业级服务器常用的
|
||||
|
||||
#### 系统要求
|
||||
|
||||
> ⚠️ **重要提示**:CentOS 8 已于 2021 年 12 月 31 日停止维护,CentOS 7 已于 2024 年 6 月 30 日结束支持。建议新项目使用 **Rocky Linux** 或 **AlmaLinux** 作为替代。
|
||||
> **严重警告**:CentOS 7 已于 2024 年 6 月 30 日结束所有支持,不再接收任何安全更新。CentOS 8 已于 2021 年 12 月 31 日停止维护。强烈建议新项目使用 **Rocky Linux** 或 **AlmaLinux** 替代,这两个项目由社区维护,提供长期支持承诺。
|
||||
|
||||
Docker 支持 64 位版本 CentOS Stream 9、Rocky Linux 8/9、AlmaLinux 8/9,并且要求内核版本不低于 3.10。
|
||||
|
||||
|
||||
+15
-14
@@ -8,13 +8,13 @@
|
||||
|
||||
针对不同的使用场景,我们推荐以下几种镜像加速配置方案,以确保最佳的拉取速度。
|
||||
|
||||
1. **云服务器用户**:优先使用所在云平台提供的内部加速器 (见本页末尾)
|
||||
2. **本地开发用户**:使用阿里云个人加速器或其他可用的公共加速器
|
||||
> ⚠️ **重要提示**:国内大多数 Docker Hub 加速服务已于 2024 年中旬关闭(包括阿里云、腾讯云、网易云、百度云等)。如下推荐的镜像源可用性因人而异,建议先测试可用性再配置。
|
||||
|
||||
1. **云服务器用户**:优先使用所在云平台提供的内部加速器(见本页末尾"云服务商"部分)
|
||||
2. **本地开发用户**:从以下社区维护的镜像中选择,推荐 `docker.1ms.run`、`dockerproxy.net` 或 DaoCloud 的 `docker.m.daocloud.io`
|
||||
3. **代理方案**:如有条件,可配置 HTTP 代理直接访问 Docker Hub
|
||||
|
||||
* [阿里云加速器](https://cr.console.aliyun.com/cn-hangzhou/instances) (需登录获取个人加速地址)
|
||||
|
||||
本节以 [毫秒镜像](https://docker.1ms.run) 镜像服务 `https://docker.1ms.run` 为例进行介绍。由于镜像加速服务经常变动,建议查阅上方的镜像测试仓库获取最新可用地址。
|
||||
本节以 [毫秒镜像](https://docker.1ms.run) 镜像服务 `https://docker.1ms.run` 为例进行介绍。由于镜像加速服务可用性经常变动,建议查阅 [docker-practice/docker-registry-cn-mirror-test](https://github.com/docker-practice/docker-registry-cn-mirror-test) 获取最新实时状态。
|
||||
|
||||
### 3.9.2 Ubuntu 22.04+、Debian 12+、Rocky/Alma/CentOS Stream 9+
|
||||
|
||||
@@ -90,18 +90,19 @@ Kubernetes 社区已将官方镜像地址从 `k8s.gcr.io` 迁移到 `registry.k8
|
||||
$ docker pull registry.k8s.io/xxx
|
||||
```
|
||||
|
||||
### 3.9.7 不再提供服务的镜像
|
||||
### 3.9.7 已停止服务的镜像列表
|
||||
|
||||
某些镜像不再提供服务,添加无用的镜像加速器,会拖慢镜像拉取速度,你可以从镜像配置列表中删除它们。
|
||||
以下镜像源已停止服务,添加无用的镜像加速器会拖慢拉取速度,请从配置中删除:
|
||||
|
||||
* https://hub.atomgit.com **已于 2024 年底关闭**
|
||||
* https://dockerhub.azk8s.cn **已转为私有**
|
||||
* https://reg-mirror.qiniu.com
|
||||
* https://registry.docker-cn.com
|
||||
* https://hub-mirror.c.163.com
|
||||
* https://mirror.baidubce.com
|
||||
* https://hub.atomgit.com (已于 2024 年底关闭)
|
||||
* https://registry.cn-hangzhou.aliyuncs.com (阿里云 Docker 加速已于 2024 年关闭)
|
||||
* https://dockerhub.azk8s.cn (已转为私有)
|
||||
* https://reg-mirror.qiniu.com (已停止服务)
|
||||
* https://registry.docker-cn.com (已停止服务)
|
||||
* https://hub-mirror.c.163.com (网易云镜像已于 2024 年关闭)
|
||||
* https://mirror.baidubce.com (百度云镜像已停止)
|
||||
|
||||
建议 **watch (页面右上角)** [镜像测试](https://github.com/docker-practice/docker-registry-cn-mirror-test)这个 GitHub 仓库,我们会在此更新各个镜像地址的状态。
|
||||
建议 **watch (页面右上角)** [镜像测试仓库](https://github.com/docker-practice/docker-registry-cn-mirror-test) 这个 GitHub 仓库,我们会实时更新各镜像源的可用状态。
|
||||
|
||||
### 3.9.8 云服务商
|
||||
|
||||
|
||||
@@ -67,13 +67,15 @@ $ docker push username/myapp:v1
|
||||
|
||||
#### 镜像拉取限制
|
||||
|
||||
自 2020 年 11 月起,Docker Hub 对匿名和免费用户实施了拉取速率限制:
|
||||
Docker Hub 对不同类型用户实施拉取速率限制(2025 年 4 月起更新):
|
||||
|
||||
| 用户类型 | 限制 |
|
||||
|---------|------|
|
||||
| **匿名用户** (未登录) | 每 6 小时 100 次请求 |
|
||||
| **免费账户** (已登录) | 每 6 小时 200 次请求 |
|
||||
| **Pro/Team 账户** | 无限制 |
|
||||
| **匿名用户** (未登录) | 每小时 10 次请求 |
|
||||
| **免费账户** (已登录) | 每小时 100 次请求 |
|
||||
| **Pro/Team/Business 账户** | 无限制(公平使用政策) |
|
||||
|
||||
> **注意**:2025 年 4 月前的旧限制为匿名用户每 6 小时 100 次、免费账户每 6 小时 200 次。新政策大幅收紧了匿名拉取额度,建议在 CI/CD 环境中始终配置 `docker login`。
|
||||
|
||||
#### 滥用限流
|
||||
|
||||
|
||||
@@ -104,15 +104,14 @@ REPOSITORY TAG IMAGE ID CREAT
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://hub-mirror.c.163.com",
|
||||
"https://mirror.baidubce.com"
|
||||
"https://docker.your-mirror.example.com"
|
||||
],
|
||||
"insecure-registries": [
|
||||
"192.168.199.100:5000"
|
||||
]
|
||||
}
|
||||
```
|
||||
> 注意:该文件必须符合 `json` 规范,否则 Docker 将不能启动。
|
||||
> 注意:该文件必须符合 `json` 规范,否则 Docker 将不能启动。镜像加速器地址请替换为实际可用的源,具体配置参见 [3.9 镜像加速器](../03_install/3.9_mirror.md)。
|
||||
|
||||
### 6.2.4 其他
|
||||
|
||||
|
||||
@@ -193,7 +193,7 @@ RUN set -x ; cd /app \
|
||||
FROM composer as composer
|
||||
|
||||
COPY database/ /app/database/
|
||||
COPY composer.json /app/
|
||||
COPY composer.json composer.lock /app/
|
||||
|
||||
RUN set -x ; cd /app \
|
||||
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
||||
|
||||
@@ -84,7 +84,7 @@ RUN apt-get update && \
|
||||
|
||||
#### 3. 使用 `set -e` 和 `pipefail`
|
||||
|
||||
默认情况下,管道命令 `cmd1 | cmd2` 只要 `cmd2` 成功,整个 `RUN` 就视为成功。
|
||||
默认情况下,管道命令 `cmd1 | cmd2` 的返回值由最后一个命令 (`cmd2`) 决定,即使前面的命令失败了,整个 `RUN` 仍可能视为成功。
|
||||
|
||||
**❌ 隐蔽的错误**:
|
||||
|
||||
@@ -193,6 +193,6 @@ wget http://example.com/file.tar.gz
|
||||
EOF
|
||||
```
|
||||
|
||||
> 💡 使用 heredoc 需要在 Dockerfile 首行声明 BuildKit 语法版本:`# syntax=docker/dockerfile:1`
|
||||
> 使用 heredoc 需要在 Dockerfile 首行声明 BuildKit 语法版本:`# syntax=docker/dockerfile:1`
|
||||
|
||||
---
|
||||
|
||||
@@ -63,7 +63,9 @@ CMD echo $HOME
|
||||
|
||||
CMD ["sh", "-c", "echo $HOME"]
|
||||
```
|
||||
**优点**:可以使用环境变量、管道等 shell 特性 **缺点**:主进程是 sh,信号无法正确传递给应用
|
||||
**优点**:可以使用环境变量、管道等 shell 特性
|
||||
|
||||
**缺点**:主进程是 sh,信号无法正确传递给应用
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -22,12 +22,12 @@ Docker 创建一个容器的时候,会执行如下操作:
|
||||
|
||||
完成这些之后,容器就可以使用 eth0 虚拟网卡来连接其他容器和其他网络。
|
||||
|
||||
可以在 `docker run` 的时候通过 `--net` 参数来指定容器的网络配置,有 4 个可选值:
|
||||
可以在 `docker run` 的时候通过 `--network` 参数来指定容器的网络配置,有 4 个可选值:
|
||||
|
||||
* `--net=bridge` 这个是默认值,连接到默认的网桥。
|
||||
* `--net=host` 告诉 Docker 不要将容器网络放到隔离的命名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 `--privileged=true`,容器会被允许直接配置主机的网络堆栈。
|
||||
* `--net=container:NAME_or_ID` 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 `lo` 环回接口通信。
|
||||
* `--net=none` 让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。
|
||||
* `--network=bridge` 这个是默认值,连接到默认的网桥。
|
||||
* `--network=host` 告诉 Docker 不要将容器网络放到隔离的命名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 `--privileged=true`,容器会被允许直接配置主机的网络堆栈。
|
||||
* `--network=container:NAME_or_ID` 让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 `lo` 环回接口通信。
|
||||
* `--network=none` 让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。
|
||||
|
||||
### 12.6.3 网络配置细节
|
||||
|
||||
|
||||
@@ -96,6 +96,16 @@ $ sudo modprobe overlay
|
||||
$ sudo modprobe br_netfilter
|
||||
```
|
||||
|
||||
#### cgroup v2 要求:必须
|
||||
|
||||
Kubernetes v1.35 要求节点使用 cgroup v2(不再支持 cgroup v1)。kubelet 在 cgroup v1 节点上会拒绝启动。验证节点是否支持 cgroup v2:
|
||||
|
||||
```bash
|
||||
$ mount | grep cgroup2
|
||||
```
|
||||
|
||||
如果输出包含 `cgroup2`,则系统已支持 cgroup v2。对于仍在使用 cgroup v1 的系统(如较旧的 RHEL 8),需要升级内核或更新系统配置。
|
||||
|
||||
#### 禁用 swap:必须
|
||||
|
||||
kubelet 默认要求禁用 swap,否则可能导致初始化失败或节点无法加入集群。
|
||||
@@ -147,9 +157,9 @@ $ sudo systemctl daemon-reload
|
||||
#### master
|
||||
|
||||
```bash
|
||||
$ systemctl enable containerd
|
||||
$ sudo systemctl enable containerd
|
||||
|
||||
$ systemctl start containerd
|
||||
$ sudo systemctl start containerd
|
||||
|
||||
$ sudo kubeadm init \
|
||||
--image-repository registry.cn-hangzhou.aliyuncs.com/google_containers \
|
||||
|
||||
@@ -60,6 +60,7 @@ $ sudo mv cri-dockerd/cri-dockerd /usr/local/bin/
|
||||
|
||||
$ wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.service
|
||||
$ wget https://raw.githubusercontent.com/Mirantis/cri-dockerd/master/packaging/systemd/cri-docker.socket
|
||||
$ sed -i -e 's,/usr/bin/cri-dockerd,/usr/local/bin/cri-dockerd,' cri-docker.service
|
||||
$ sudo mv cri-docker.service cri-docker.socket /etc/systemd/system/
|
||||
|
||||
# 启动 cri-dockerd
|
||||
@@ -113,6 +114,16 @@ $ sudo yum install -y kubelet kubeadm kubectl
|
||||
|
||||
### 14.2.4 修改内核的运行参数
|
||||
|
||||
#### cgroup v2 要求:必须
|
||||
|
||||
Kubernetes v1.35 要求节点使用 cgroup v2(不再支持 cgroup v1)。kubelet 在 cgroup v1 节点上会拒绝启动。验证节点是否支持 cgroup v2:
|
||||
|
||||
```bash
|
||||
$ mount | grep cgroup2
|
||||
```
|
||||
|
||||
如果输出包含 `cgroup2`,则系统已支持 cgroup v2。对于仍在使用 cgroup v1 的系统(如较旧的 RHEL 8),需要升级内核或更新系统配置。
|
||||
|
||||
#### 加载内核模块
|
||||
|
||||
```bash
|
||||
|
||||
@@ -2,80 +2,309 @@
|
||||
|
||||
[kubectl](https://github.com/kubernetes/kubernetes) 是 Kubernetes 自带的客户端,可以用它来直接操作 Kubernetes。
|
||||
|
||||
使用格式有两种:
|
||||
kubectl 的基本用法格式为:
|
||||
|
||||
```bash
|
||||
kubectl [flags]
|
||||
kubectl [command]
|
||||
kubectl [command] [resource] [name] [flags]
|
||||
```
|
||||
|
||||
其中 `command` 是操作命令(如 get、apply、delete),`resource` 是资源类型(如 pod、deployment、service),`name` 是资源名称(可选),`flags` 是各种选项参数。
|
||||
|
||||
### 14.8.1 get
|
||||
|
||||
显示一个或多个资源
|
||||
显示一个或多个资源。最常用的命令之一,用于查询集群中的资源状态。
|
||||
|
||||
```bash
|
||||
# 查看所有 Pod
|
||||
$ kubectl get pods
|
||||
|
||||
# 查看指定命名空间中的 Deployment
|
||||
$ kubectl get deployment -n kube-system
|
||||
|
||||
# 查看所有资源
|
||||
$ kubectl get all
|
||||
|
||||
# 使用更详细的输出格式
|
||||
$ kubectl get pods -o wide
|
||||
|
||||
# 输出为 YAML 格式
|
||||
$ kubectl get pod my-pod -o yaml
|
||||
|
||||
# 根据标签选择资源
|
||||
$ kubectl get pods -l app=nginx
|
||||
```
|
||||
|
||||
### 14.8.2 describe
|
||||
|
||||
显示资源详情
|
||||
显示资源的详细信息,包括事件、状态、配置等。用于调试和查看资源的完整信息。
|
||||
|
||||
### 14.8.3 create
|
||||
```bash
|
||||
# 查看特定 Pod 的详情
|
||||
$ kubectl describe pod my-pod
|
||||
|
||||
从文件或标准输入创建资源
|
||||
# 查看 Node 的详情
|
||||
$ kubectl describe node node-1
|
||||
|
||||
### 14.8.4 update
|
||||
# 查看 Deployment 的详情
|
||||
$ kubectl describe deployment nginx-deployment
|
||||
```
|
||||
|
||||
从文件或标准输入更新资源
|
||||
### 14.8.3 apply
|
||||
|
||||
从文件或标准输入应用配置。这是声明式资源管理的标准方式,可用于创建或更新资源。
|
||||
|
||||
```bash
|
||||
# 应用 YAML 文件
|
||||
$ kubectl apply -f deployment.yaml
|
||||
|
||||
# 应用目录中的所有 YAML 文件
|
||||
$ kubectl apply -f ./manifests/
|
||||
|
||||
# 从标准输入应用配置
|
||||
$ cat deployment.yaml | kubectl apply -f -
|
||||
```
|
||||
|
||||
### 14.8.4 create
|
||||
|
||||
从文件或标准输入创建资源。与 apply 不同,create 仅用于创建新资源,如果资源已存在会报错。
|
||||
|
||||
```bash
|
||||
# 创建资源
|
||||
$ kubectl create -f pod.yaml
|
||||
|
||||
# 从标准输入创建
|
||||
$ kubectl create -f - < deployment.yaml
|
||||
```
|
||||
|
||||
### 14.8.5 delete
|
||||
|
||||
通过文件名、标准输入、资源名或者 label selector 删除资源
|
||||
删除一个或多个资源。支持按名称、标签、资源类型等多种方式删除。
|
||||
|
||||
```bash
|
||||
# 按名称删除
|
||||
$ kubectl delete pod my-pod
|
||||
|
||||
# 删除整个 Deployment(同时删除其管理的 Pod)
|
||||
$ kubectl delete deployment nginx-deployment
|
||||
|
||||
# 按标签删除
|
||||
$ kubectl delete pods -l app=nginx
|
||||
|
||||
# 从文件删除
|
||||
$ kubectl delete -f deployment.yaml
|
||||
```
|
||||
|
||||
### 14.8.6 logs
|
||||
|
||||
输出 pod 中一个容器的日志
|
||||
查看 Pod 中容器的日志。用于调试应用和查看容器输出。
|
||||
|
||||
### 14.8.7 rollout
|
||||
```bash
|
||||
# 查看 Pod 的日志
|
||||
$ kubectl logs my-pod
|
||||
|
||||
对 Deployment 等资源执行滚动更新/回滚
|
||||
# 查看 Pod 中特定容器的日志
|
||||
$ kubectl logs my-pod -c container-name
|
||||
|
||||
### 14.8.8 exec
|
||||
# 实时跟踪日志(类似 tail -f)
|
||||
$ kubectl logs -f my-pod
|
||||
|
||||
在容器内部执行命令
|
||||
# 查看最近 100 行日志
|
||||
$ kubectl logs my-pod --tail=100
|
||||
|
||||
### 14.8.9 port-forward
|
||||
# 查看 Pod 启动前的日志(适用于已崩溃的容器)
|
||||
$ kubectl logs my-pod --previous
|
||||
```
|
||||
|
||||
将本地端口转发到 Pod
|
||||
### 14.8.7 exec
|
||||
|
||||
### 14.8.10 proxy
|
||||
在运行中的容器内部执行命令。用于调试、排查问题或执行应用内的操作。
|
||||
|
||||
为 Kubernetes API server 启动代理服务器
|
||||
```bash
|
||||
# 进入容器的交互式 shell
|
||||
$ kubectl exec -it my-pod -- /bin/sh
|
||||
|
||||
### 14.8.11 run
|
||||
# 在容器中执行命令
|
||||
$ kubectl exec my-pod -- ls -la /app
|
||||
|
||||
在集群中使用指定镜像启动容器
|
||||
# 在 Pod 中的特定容器执行命令
|
||||
$ kubectl exec -it my-pod -c container-name -- /bin/bash
|
||||
```
|
||||
|
||||
### 14.8.12 expose
|
||||
### 14.8.8 port-forward
|
||||
|
||||
将 replication controller service 或 pod 暴露为新的 Kubernetes service
|
||||
将本地端口转发到 Pod 的端口。用于本地访问集群内的服务,无需暴露 Service。
|
||||
|
||||
### 14.8.13 label
|
||||
```bash
|
||||
# 将本地 8080 端口转发到 Pod 的 80 端口
|
||||
$ kubectl port-forward pod/my-pod 8080:80
|
||||
|
||||
更新资源的 label
|
||||
# 使用随机本地端口
|
||||
$ kubectl port-forward pod/my-pod :80
|
||||
|
||||
### 14.8.14 config
|
||||
# 转发到 Service
|
||||
$ kubectl port-forward svc/my-service 8080:80
|
||||
```
|
||||
|
||||
修改 Kubernetes 配置文件
|
||||
### 14.8.9 rollout
|
||||
|
||||
### 14.8.15 cluster-info
|
||||
对 Deployment、DaemonSet、StatefulSet 等资源执行滚动更新、暂停、继续或回滚操作。
|
||||
|
||||
显示集群信息
|
||||
```bash
|
||||
# 查看滚动更新状态
|
||||
$ kubectl rollout status deployment/nginx-deployment
|
||||
|
||||
# 暂停滚动更新
|
||||
$ kubectl rollout pause deployment/nginx-deployment
|
||||
|
||||
# 继续滚动更新
|
||||
$ kubectl rollout resume deployment/nginx-deployment
|
||||
|
||||
# 查看更新历史
|
||||
$ kubectl rollout history deployment/nginx-deployment
|
||||
|
||||
# 回滚到前一个版本
|
||||
$ kubectl rollout undo deployment/nginx-deployment
|
||||
|
||||
# 回滚到特定版本
|
||||
$ kubectl rollout undo deployment/nginx-deployment --to-revision=2
|
||||
```
|
||||
|
||||
### 14.8.10 label
|
||||
|
||||
向资源添加、修改或删除标签。标签用于组织和选择资源。
|
||||
|
||||
```bash
|
||||
# 为 Pod 添加标签
|
||||
$ kubectl label pod my-pod env=production
|
||||
|
||||
# 修改已有标签
|
||||
$ kubectl label pod my-pod env=staging --overwrite
|
||||
|
||||
# 删除标签
|
||||
$ kubectl label pod my-pod env-
|
||||
|
||||
# 为多个资源添加标签
|
||||
$ kubectl label pods -l app=nginx version=v1
|
||||
```
|
||||
|
||||
### 14.8.11 annotate
|
||||
|
||||
向资源添加或修改注解。注解用于存储任意元数据,不用于资源选择。
|
||||
|
||||
```bash
|
||||
# 添加注解
|
||||
$ kubectl annotate pod my-pod description=”Production pod”
|
||||
|
||||
# 修改注解
|
||||
$ kubectl annotate pod my-pod description=”Staging pod” --overwrite
|
||||
|
||||
# 删除注解
|
||||
$ kubectl annotate pod my-pod description-
|
||||
```
|
||||
|
||||
### 14.8.12 edit
|
||||
|
||||
直接编辑 Kubernetes 资源。编辑器由 `EDITOR` 环境变量指定。
|
||||
|
||||
```bash
|
||||
# 编辑 Pod
|
||||
$ kubectl edit pod my-pod
|
||||
|
||||
# 编辑 Deployment
|
||||
$ kubectl edit deployment nginx-deployment
|
||||
```
|
||||
|
||||
### 14.8.13 config
|
||||
|
||||
管理 kubectl 的配置文件(通常位于 `~/.kube/config`)。
|
||||
|
||||
```bash
|
||||
# 查看当前配置
|
||||
$ kubectl config view
|
||||
|
||||
# 切换上下文
|
||||
$ kubectl config use-context my-cluster
|
||||
|
||||
# 查看所有上下文
|
||||
$ kubectl config get-contexts
|
||||
|
||||
# 设置默认命名空间
|
||||
$ kubectl config set-context --current --namespace=my-namespace
|
||||
```
|
||||
|
||||
### 14.8.14 cluster-info
|
||||
|
||||
显示集群的连接信息和组件状态。
|
||||
|
||||
```bash
|
||||
# 显示集群信息
|
||||
$ kubectl cluster-info
|
||||
|
||||
# 显示完整的集群状态(包括所有组件)
|
||||
$ kubectl get componentstatuses
|
||||
```
|
||||
|
||||
### 14.8.15 version
|
||||
|
||||
显示 kubectl 客户端和 Kubernetes API server 的版本信息。
|
||||
|
||||
```bash
|
||||
# 显示版本
|
||||
$ kubectl version
|
||||
|
||||
# 仅显示客户端版本
|
||||
$ kubectl version --client
|
||||
|
||||
# 以 JSON 格式输出
|
||||
$ kubectl version --output=json
|
||||
```
|
||||
|
||||
### 14.8.16 api-versions
|
||||
|
||||
以 “组/版本” 的格式输出服务端支持的 API 版本
|
||||
列出 API server 支持的所有 API 版本,格式为 “组/版本”。
|
||||
|
||||
### 14.8.17 version
|
||||
```bash
|
||||
$ kubectl api-versions
|
||||
```
|
||||
|
||||
输出服务端和客户端的版本信息
|
||||
### 14.8.17 explain
|
||||
|
||||
### 14.8.18 help
|
||||
解释资源的字段含义。用于了解 YAML 配置文件中各字段的作用。
|
||||
|
||||
显示各个命令的帮助信息
|
||||
```bash
|
||||
# 查看 Pod 资源的字段说明
|
||||
$ kubectl explain pod
|
||||
|
||||
# 查看 Pod 下 spec 字段的说明
|
||||
$ kubectl explain pod.spec
|
||||
|
||||
# 查看具体字段的详细说明
|
||||
$ kubectl explain pod.spec.containers
|
||||
```
|
||||
|
||||
### 14.8.18 auth
|
||||
|
||||
检查用户权限,用于验证 RBAC 配置。
|
||||
|
||||
```bash
|
||||
# 检查当前用户是否有权限执行操作
|
||||
$ kubectl auth can-i create pods
|
||||
|
||||
# 检查特定用户的权限
|
||||
$ kubectl auth can-i create pods --as=other-user
|
||||
```
|
||||
|
||||
### 14.8.19 help
|
||||
|
||||
显示任何命令的帮助信息。
|
||||
|
||||
```bash
|
||||
# 显示 kubectl 的一般帮助
|
||||
$ kubectl help
|
||||
|
||||
# 显示特定命令的帮助
|
||||
$ kubectl get --help
|
||||
|
||||
# 显示资源的 API 文档
|
||||
$ kubectl explain deployment
|
||||
```
|
||||
|
||||
@@ -14,10 +14,10 @@ USAGE:
|
||||
etcdctl
|
||||
|
||||
VERSION:
|
||||
3.4.0
|
||||
3.5.21
|
||||
|
||||
API VERSION:
|
||||
3.4
|
||||
3.5
|
||||
|
||||
|
||||
COMMANDS:
|
||||
@@ -145,5 +145,5 @@ testkey
|
||||
|
||||
```bash
|
||||
$ etcdctl member list
|
||||
422a74f03b622fef, started, node1, http://172.16.238.100:2380, http://172.16.238.100:23
|
||||
422a74f03b622fef, started, node1, http://172.16.238.100:2380, http://172.16.238.100:2379
|
||||
```
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
| 特性 | Google GKE | AWS EKS | Azure AKS |
|
||||
| :--- | :--- | :--- | :--- |
|
||||
| **版本更新** | 最快,通常是 K8s 新特性的首发地 | 相对保守,注重稳定性 | 跟随社区,更新速度适中 |
|
||||
| **控制平面管理** | 全托管,自动升级,免费 (部分区域)| 托管,每小时收费 | 全托管,控制平面免费 |
|
||||
| **控制平面管理** | 全托管,自动升级,$0.10/h(有 Free Tier 抵扣)| 托管,$0.10/h | 全托管,控制平面免费 |
|
||||
| **节点管理** | GKE Autopilot 模式完全托管节点 | Managed Node Groups 简化管理 | Virtual Machine Scale Sets |
|
||||
| **网络模型** | VPC-native, 性能优秀 | AWS VPC CNI, Pod 直接获取 VPC IP | Azure CNI (消耗 IP 多) 或 Kubenet |
|
||||
| **集成度** | 与 GCP 数据分析、AI 服务集成紧密 | 与 AWS IAM, ALB, CloudWatch 集成深度高 | 与 Active Directory, Azure DevOps 集成好 |
|
||||
|
||||
@@ -35,7 +35,7 @@ Kubernetes 作为一个容器编排系统,为了屏蔽底层不同容器运行
|
||||
|
||||
- 早期版本中,Kubernetes 默认使用 docker 作为运行时,通过一个名为 `dockershim` 的桥接组件对接 Docker,Docker 再对接 containerd。
|
||||
- 随着 containerd 原生支持了 CRI 插件,Kubernetes 开始直接与 containerd 通信,去掉了 `dockershim` 和 `dockerd` 的中间层。这就是为什么从 Kubernetes v1.24 开始”弃用 Docker”引发了广泛关注,实际上 Kubernetes 只是弃用 `dockershim`,底层依然在使用从 Docker 基因中诞生的 containerd。
|
||||
- containerd 2.0 移除了已弃用的 CRI v1alpha2 接口,仅保留 CRI v1(Kubernetes 自 v1.26 起仅支持 CRI v1)。如果集群中仍有依赖 CRI v1alpha2 的组件,升级 containerd 2.x 前需先完成迁移。
|
||||
- containerd 2.0 移除了已弃用的 CRI v1alpha2 接口,仅保留 CRI v1(Kubernetes 自 v1.26 起仅支持 CRI v1)。如果集群中仍有依赖 CRI v1alpha2 的组件,升级 containerd 2.x 前需先完成迁移。containerd 2.3(2026 年 4 月)是首个 LTS 版本,支持从 1.7 LTS 直接升级,生产环境推荐使用。
|
||||
|
||||
### 为什么直接使用 containerd?
|
||||
|
||||
@@ -50,7 +50,7 @@ Kubernetes 作为一个容器编排系统,为了屏蔽底层不同容器运行
|
||||
|
||||
- **ctr**:containerd 自带的调试用客户端。它功能比较基础,主要用于开发者在开发 containerd 时进行快速调试,一般不作为最终用户的日常管理工具。
|
||||
- **crictl**:Kubernetes 提供的 CRI 命令行工具。它用于排查 Kubernetes 节点上的容器和沙箱(Pod)问题。
|
||||
- **nerdctl**:这是一个由系统社区成员(主要是 containerd 项目的维护者)开发的,完全兼容 Docker CLI 体验的 containerd 命令行客户端。对于习惯了 `docker run/ps/build` 命令的用户来说,`nerdctl` 可以作为直接操作 containerd 的理想替代品,并且它还支持直接构建镜像(依赖 BuildKit)。
|
||||
- **nerdctl**:这是一个由 containerd 项目维护者开发的,完全兼容 Docker CLI 体验的 containerd 命令行客户端。对于习惯了 `docker run/ps/build` 命令的用户来说,`nerdctl` 可以作为直接操作 containerd 的理想替代品,并且它还支持直接构建镜像(依赖 BuildKit)。
|
||||
|
||||
#### nerdctl 使用示例
|
||||
|
||||
|
||||
@@ -413,6 +413,7 @@ jobs:
|
||||
- name: Run Trivy vulnerability scan
|
||||
# 安全提醒:2026 年 3 月 Trivy GitHub Actions 遭受供应链攻击,
|
||||
# 76 个版本标签被劫持。务必使用不可变的 commit SHA 引用,而非可变标签。
|
||||
# 使用前请到 https://github.com/aquasecurity/trivy-action/releases 核实 SHA 对应正确版本。
|
||||
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # v0.35.0
|
||||
with:
|
||||
image-ref: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest
|
||||
|
||||
@@ -89,7 +89,7 @@ services:
|
||||
- monitoring
|
||||
|
||||
cadvisor:
|
||||
image: ghcr.io/google/cadvisor:latest
|
||||
image: ghcr.io/google/cadvisor:v0.56.2
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
@@ -115,7 +115,7 @@ $ docker compose up -d
|
||||
启动后,访问以下地址:
|
||||
|
||||
* Prometheus: `http://localhost:9090`
|
||||
* Grafana:`http://localhost:3000` (默认账号密码:admin/admin)
|
||||
* Grafana:`http://localhost:3000` (默认账号密码:admin/admin,首次登录后务必立即修改密码)
|
||||
|
||||
### 19.1.3 配置 Grafana 面板
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
`Alpine` 由非商业组织维护的,支持广泛场景的 `Linux` 发行版,它特别为资深/重度 `Linux` 用户而优化,关注安全,性能和资源效能。`Alpine` 镜像可以适用于更多常用场景,并且是一个优秀的可以适用于生产的基础系统/环境。
|
||||
|
||||
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势。相比于其他 `Docker` 镜像,它的容量非常小,压缩后仅约 **3.6 MB**(对比 `Ubuntu` 系列镜像约 `28 MB`),且拥有非常友好的包管理机制。官方镜像来自 `docker-alpine` 项目。
|
||||
`Alpine` Docker 镜像也继承了 `Alpine Linux` 发行版的这些优势。相比于其他 `Docker` 镜像,它的容量非常小,压缩后仅约 **5 MB**(对比 `Ubuntu` 系列镜像约 `28 MB`),且拥有非常友好的包管理机制。官方镜像来自 `docker-alpine` 项目。
|
||||
|
||||
目前 Docker 官方已开始推荐使用 `Alpine` 替代之前的 `Ubuntu` 做为基础镜像环境。这样会带来多个好处。包括镜像下载速度加快,镜像安全性提高,主机之间的切换更方便,占用更少磁盘空间等。
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
```bash
|
||||
REPOSITORY TAG COMPRESSED SIZE
|
||||
alpine latest ~3.6 MB
|
||||
alpine latest ~5 MB
|
||||
debian latest ~30 MB
|
||||
ubuntu latest ~28 MB
|
||||
```
|
||||
@@ -69,4 +69,4 @@ RUN sed -i "s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g" /etc/apk/repositories
|
||||
* `Alpine` 官网:https://www.alpinelinux.org/
|
||||
* `Alpine` 官方仓库:https://github.com/alpinelinux
|
||||
* `Alpine` 官方镜像:https://hub.docker.com/\_/alpine/
|
||||
* `Alpine` 官方镜像仓库:https://github.com/gliderlabs/docker-alpine
|
||||
* `Alpine` 官方镜像仓库:https://github.com/alpinelinux/docker-alpine
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
#### 使用 Debian 官方镜像
|
||||
|
||||
Debian 是一个也是一个常用的基础镜像。
|
||||
Debian 是一个常用的基础镜像。
|
||||
|
||||
|
||||
官方提供了大家熟知的 `debian` 镜像以及面向科研领域的 `neurodebian` 镜像。可以使用 `docker run` 直接运行 `Debian` 镜像。
|
||||
@@ -25,7 +25,7 @@ Debian 是一个也是一个常用的基础镜像。
|
||||
```bash
|
||||
$ docker run -it debian bash
|
||||
root@668e178d8d69:/# cat /etc/issue
|
||||
Debian GNU/Linux 8
|
||||
Debian GNU/Linux 12
|
||||
```
|
||||
`Debian` 镜像很适合作为基础镜像,构建自定义镜像。
|
||||
|
||||
|
||||
@@ -24,8 +24,8 @@ jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: docker/setup-buildx-action@v3
|
||||
- uses: actions/checkout@v6
|
||||
- uses: docker/setup-buildx-action@v4
|
||||
- uses: docker/build-push-action@v6
|
||||
with:
|
||||
context: .
|
||||
|
||||
@@ -171,7 +171,7 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \
|
||||
-o app .
|
||||
|
||||
# 最终镜像
|
||||
FROM alpine:3.17
|
||||
FROM alpine:3.21
|
||||
|
||||
RUN apk add --no-cache ca-certificates tzdata
|
||||
|
||||
@@ -233,7 +233,7 @@ name = "rust-app"
|
||||
path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
actix-web = "4.4"
|
||||
actix-web = "4.13"
|
||||
tokio = { version = "1.35", features = ["full"] }
|
||||
serde = { version = "1.0", features = ["derive"] }
|
||||
serde_json = "1.0"
|
||||
@@ -242,7 +242,7 @@ serde_json = "1.0"
|
||||
|
||||
```dockerfile
|
||||
# Stage 1: 编译
|
||||
FROM rust:1.75-alpine AS builder
|
||||
FROM rust:1.95-alpine AS builder
|
||||
|
||||
RUN apk add --no-cache musl-dev
|
||||
|
||||
@@ -255,7 +255,7 @@ COPY src ./src
|
||||
RUN cargo build --release
|
||||
|
||||
# Stage 2: 运行镜像
|
||||
FROM alpine:3.17
|
||||
FROM alpine:3.21
|
||||
|
||||
RUN apk add --no-cache ca-certificates
|
||||
|
||||
@@ -499,7 +499,7 @@ binlog_format = ROW
|
||||
#### Redis 缓存部署
|
||||
|
||||
```dockerfile
|
||||
FROM redis:7-alpine
|
||||
FROM redis:8-alpine
|
||||
|
||||
# 复制 Redis 配置
|
||||
COPY redis.conf /usr/local/etc/redis/redis.conf
|
||||
@@ -632,7 +632,7 @@ services:
|
||||
|
||||
# Redis 缓存
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
image: redis:8-alpine
|
||||
container_name: redis
|
||||
command: redis-server --appendonly yes --requirepass redispass
|
||||
volumes:
|
||||
@@ -848,7 +848,7 @@ services:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
|
||||
redis:
|
||||
image: redis:7-alpine
|
||||
image: redis:8-alpine
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
|
||||
@@ -403,7 +403,7 @@ Kubernetes 进阶 (Week 24-36)
|
||||
- 《Docker 深入浅出》- 本书的原版
|
||||
- 《Kubernetes 权威指南》- 深入 Kubernetes 的必读书
|
||||
- 《容器技术核心技术与应用》- 理解底层实现
|
||||
- 《SRE Google 运维之道》- 生产环保最佳实践
|
||||
- 《SRE Google 运维之道》- 生产环境最佳实践
|
||||
|
||||
#### 博客和社区
|
||||
|
||||
|
||||
@@ -7,6 +7,30 @@
|
||||
"GitHub": "https://github.com/yeasy/docker_practice"
|
||||
}
|
||||
},
|
||||
"plugins": [
|
||||
"-livereload",
|
||||
"mermaid-gb3",
|
||||
"github",
|
||||
"page-treeview",
|
||||
"editlink"
|
||||
],
|
||||
"pluginsConfig": {
|
||||
"mermaid-gb3": {
|
||||
"theme": "default"
|
||||
},
|
||||
"github": {
|
||||
"url": "https://github.com/yeasy/docker_practice"
|
||||
},
|
||||
"editlink": {
|
||||
"base": "https://github.com/yeasy/docker_practice/blob/master/",
|
||||
"label": "编辑本页"
|
||||
},
|
||||
"page-treeview": {
|
||||
"copyright": "Copyright © yeasy",
|
||||
"minHeaderCount": "2",
|
||||
"minHeaderDeep": "2"
|
||||
}
|
||||
},
|
||||
"pdf": {
|
||||
"pageNumbers": true,
|
||||
"fontSize": 12,
|
||||
|
||||
Reference in New Issue
Block a user