K8s新版本变化
2026/1/15大约 4 分钟KubernetesK8s容器编排云原生DevOps
K8s 新版本变化
本章介绍 Kubernetes 从 1.17 到 1.35(2026年)的重要变化,帮助读者了解新版本特性和迁移注意事项。
版本演进概览
| 版本 | 发布时间 | 重要变化 |
|---|---|---|
| 1.20 | 2020.12 | 宣布废弃 dockershim |
| 1.24 | 2022.05 | 正式移除 dockershim |
| 1.25 | 2022.08 | 镜像仓库迁移到 registry.k8s.io |
| 1.26 | 2022.12 | 动态资源分配 Alpha |
| 1.28 | 2023.08 | Sidecar 容器支持 |
| 1.30 | 2024.04 | Pod 调度就绪 GA |
| 1.32 | 2024.12 | DRA 结构化参数 Beta |
| 1.35 | 2025.12 | 多项安全特性 GA |
容器运行时变化
Docker 到 containerd
K8s 1.24 正式移除 dockershim,不再直接支持 Docker 作为容器运行时。
新版安装 containerd
# 安装 containerd
yum install -y containerd.io
# 生成默认配置
containerd config default > /etc/containerd/config.toml
# 修改配置:使用 systemd cgroup
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 修改 sandbox 镜像地址
sed -i 's|registry.k8s.io/pause:3.8|registry.aliyuncs.com/google_containers/pause:3.9|' /etc/containerd/config.toml
# 启动服务
systemctl enable --now containerdcrictl 命令
containerd 使用 crictl 替代 docker 命令:
| Docker 命令 | crictl 命令 | 说明 |
|---|---|---|
docker ps | crictl ps | 查看容器 |
docker images | crictl images | 查看镜像 |
docker pull | crictl pull | 拉取镜像 |
docker logs | crictl logs | 查看日志 |
docker exec | crictl exec | 进入容器 |
# 配置 crictl
cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
EOF镜像仓库迁移
k8s.gcr.io → registry.k8s.io
从 K8s 1.25 开始,默认镜像仓库从 k8s.gcr.io 迁移到 registry.k8s.io。
# 旧版(已废弃)
docker pull k8s.gcr.io/pause:3.6
# 新版
docker pull registry.k8s.io/pause:3.9
# 国内镜像
docker pull registry.aliyuncs.com/google_containers/pause:3.9镜像拉取脚本(新版)
# K8s 1.30+ 镜像列表
images=(
kube-apiserver:v1.30.0
kube-controller-manager:v1.30.0
kube-scheduler:v1.30.0
kube-proxy:v1.30.0
pause:3.9
etcd:3.5.12-0
coredns/coredns:v1.11.1
)
for imageName in ${images[@]}; do
# 从阿里云拉取
crictl pull registry.aliyuncs.com/google_containers/$imageName
# 重新打标签
ctr -n k8s.io images tag registry.aliyuncs.com/google_containers/$imageName registry.k8s.io/$imageName
done新版集群安装
环境准备(新版)
# 关闭 swap(必须)
swapoff -a
sed -i '/swap/d' /etc/fstab
# 加载内核模块
cat > /etc/modules-load.d/k8s.conf <<EOF
overlay
br_netfilter
EOF
modprobe overlay
modprobe br_netfilter
# 内核参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system安装 kubeadm(新版)
# 添加 K8s 仓库(阿里云镜像)
cat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes-new/core/stable/v1.30/rpm/repodata/repomd.xml.key
EOF
# 安装组件
yum install -y kubelet kubeadm kubectl
# 启用 kubelet
systemctl enable --now kubelet初始化集群(新版)
# 初始化 Master
kubeadm init \
--kubernetes-version=v1.30.0 \
--pod-network-cidr=10.244.0.0/16 \
--service-cidr=10.96.0.0/12 \
--image-repository=registry.aliyuncs.com/google_containers \
--cri-socket=unix:///run/containerd/containerd.sock
# 配置 kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config重要新特性
1. Gateway API(1.24+ GA)
Gateway API 是 Ingress 的下一代替代方案,提供更强大的流量管理能力。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-gateway
spec:
gatewayClassName: nginx
listeners:
- name: http
port: 80
protocol: HTTP
---
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-route
spec:
parentRefs:
- name: my-gateway
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: api-service
port: 80802. Pod Security Admission(1.25+ GA)
替代已废弃的 PodSecurityPolicy,提供 Pod 安全标准。
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
labels:
# 强制执行 restricted 策略
pod-security.kubernetes.io/enforce: restricted
# 警告 baseline 违规
pod-security.kubernetes.io/warn: baseline安全级别:
| 级别 | 说明 |
|---|---|
| privileged | 无限制,允许已知特权提升 |
| baseline | 最小限制,防止已知特权提升 |
| restricted | 严格限制,遵循 Pod 安全最佳实践 |
3. Sidecar 容器(1.28+ Beta)
原生支持 Sidecar 容器,解决 Init 容器和普通容器的生命周期问题。
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
initContainers:
- name: logshipper
image: fluentd:latest
restartPolicy: Always # 标记为 Sidecar
containers:
- name: myapp
image: myapp:latest4. 动态资源分配 DRA(1.30+ Beta)
支持 GPU、FPGA 等特殊硬件的动态分配。
apiVersion: resource.k8s.io/v1alpha2
kind: ResourceClaim
metadata:
name: gpu-claim
spec:
resourceClassName: gpu.nvidia.com
---
apiVersion: v1
kind: Pod
spec:
containers:
- name: gpu-app
resources:
claims:
- name: gpu
resourceClaims:
- name: gpu
source:
resourceClaimName: gpu-claim5. 原地 Pod 资源调整(1.33+ Beta)
无需重启 Pod 即可调整 CPU/内存资源。
# 动态调整 Pod 资源
kubectl patch pod mypod --subresource resize -p '{"spec":{"containers":[{"name":"app","resources":{"requests":{"cpu":"500m"}}}]}}'废弃和移除的功能
| 功能 | 废弃版本 | 移除版本 | 替代方案 |
|---|---|---|---|
| dockershim | 1.20 | 1.24 | containerd/CRI-O |
| PodSecurityPolicy | 1.21 | 1.25 | Pod Security Admission |
| k8s.gcr.io | 1.25 | - | registry.k8s.io |
kubectl run --generator | 1.18 | 1.21 | kubectl create |
| 旧版 Ingress API | 1.19 | 1.22 | networking.k8s.io/v1 |
extensions/v1beta1 | 1.16 | 1.22 | apps/v1 |
升级注意事项
升级前检查
# 检查废弃 API 使用情况
kubectl get --raw /metrics | grep apiserver_requested_deprecated_apis
# 使用 kubent 检查
kubent
# 检查节点状态
kubectl get nodes -o wide升级步骤
# 1. 升级 kubeadm
yum upgrade -y kubeadm-1.30.x
# 2. 检查升级计划
kubeadm upgrade plan
# 3. 执行升级(Master)
kubeadm upgrade apply v1.30.0
# 4. 升级 kubelet 和 kubectl
yum upgrade -y kubelet-1.30.x kubectl-1.30.x
systemctl daemon-reload
systemctl restart kubelet
# 5. 升级 Node(在每个 Node 上执行)
kubeadm upgrade node小结
K8s 从 1.17 到 1.35 经历了重大变化:容器运行时从 Docker 迁移到 containerd,镜像仓库迁移到 registry.k8s.io,安全模型从 PSP 迁移到 PSA。新版本带来了 Gateway API、Sidecar 容器、动态资源分配等强大特性。升级时需注意废弃 API 的迁移。
面试题预览
常见面试题
- K8s 为什么移除 Docker 支持?
- containerd 和 Docker 有什么区别?
- Gateway API 相比 Ingress 有什么优势?
