Kubernetes(简称K8s)是Google开源的容器编排平台,作为云原生技术的核心标准,能够实现容器化应用的自动化部署、扩缩容及运维管理。其名称"K8s"是"Kubernetes"的缩写形式,用数字8替代了中间的8个字母"ubernete"。

核心学习原则:0 基础严禁跳步,先夯实前置基础→本地无成本练手吃透核心→阿里云 ACK 集群实战→企业级项目落地,每个阶段必须完成实操再进入下一阶段,全程命令附带逐行注释,新手可直接复制执行。

第一阶段:前置知识储备(预计 2-3 周,K8s 学习的基石,必须 100% 掌握)

K8s 是基于 Linux 和容器的集群管理系统,跳过前置知识直接学习会完全无法理解,以下是必须掌握的核心内容。

1. Linux 系统基础(核心中的核心)

必须掌握知识点
  • 系统基础操作:文件 / 目录管理、用户权限、软件包安装
  • 网络基础:端口、防火墙、TCP/IP、DNS、路由
  • 核心技能:vim 编辑器使用、shell 基础脚本编写、系统资源查看、进程管理

带注释核心命令(新手必练)

# 1. 文件目录管理核心命令
ls -l  # 长格式列出目录内容,显示权限、所有者、大小、修改时间等信息
cd /opt  # 切换到/opt目录,绝对路径切换
mkdir -p /data/k8s  # 递归创建目录,即使父目录不存在也不会报错
rm -rf /tmp/test  # 强制递归删除文件/目录(新手慎用!先在测试目录练习)
cp /root/test.yaml /data/k8s/  # 复制文件到目标目录
mv /data/k8s/test.yaml /data/k8s/deploy.yaml  # 移动/重命名文件

# 2. 权限管理核心命令
chmod 755 /data/start.sh  # 给脚本设置权限:所有者读写执行,组和其他用户读执行
chown -R root:root /data/k8s  # 递归修改目录的所有者和所属组为root
useradd k8suser  # 创建普通用户,日常操作避免直接用root,降低误操作风险

# 3. 网络与进程管理
systemctl stop firewalld  # 临时关闭防火墙(测试环境用,生产环境需配置规则)
systemctl disable firewalld  # 禁止防火墙开机自启
netstat -tulnp  # 查看系统所有监听的端口,对应进程PID和名称
ps -ef | grep docker  # 查看包含docker关键字的进程详情
top  # 实时查看系统CPU、内存、进程资源占用情况

# 4. 基础shell脚本(必练,后续运维自动化核心)
vim clean_log.sh  # 创建日志清理脚本
# 脚本内写入以下内容:
#!/bin/bash
# 功能:清理7天前的日志文件
find /var/log/ -name "*.log" -mtime +7 -exec rm -rf {} \;
echo "日志清理完成"
# 赋予执行权限
chmod 755 clean_log.sh
# 执行脚本
./clean_log.sh
阶段小练习
  1. 准备一台 2 核 4G 的阿里云 ECS(CentOS 7/8 或 Ubuntu 20.04),完成上述所有命令实操
  2. 编写一个 shell 脚本,实现:查看系统磁盘使用率,超过 80% 则输出告警信息到日志文件

2. Docker 容器技术基础

K8s 的底层是容器运行时,Docker 是最主流的容器 runtime,必须掌握容器核心逻辑。

必须掌握知识点
  • 核心概念:镜像、容器、仓库、Dockerfile
  • 核心操作:镜像拉取 / 构建 / 推送、容器启动 / 停止 / 进入 / 日志查看
  • 进阶操作:Docker 数据卷、容器网络、镜像优化
带注释核心命令(新手必练)
# 1. Docker安装(阿里云源,国内访问快,CentOS系统)
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加阿里云Docker软件源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker社区版
yum install -y docker-ce docker-ce-cli containerd.io
# 启动Docker并设置开机自启
systemctl start docker
systemctl enable docker
# 验证安装是否成功,输出版本号即正常
docker version

# 2. 镜像核心操作
docker pull nginx:latest  # 从官方仓库拉取最新版nginx镜像,latest为版本标签
docker images  # 查看本地所有镜像,显示仓库名、标签、镜像ID、大小、创建时间
docker rmi nginx:latest  # 删除本地nginx镜像
docker tag nginx:latest registry.cn-hangzhou.aliyuncs.com/你的命名空间/nginx:v1  # 给镜像打标签,适配阿里云ACR镜像仓库

# 3. 容器核心操作
# 启动一个nginx容器,核心参数注释
docker run -d \  # -d 后台运行容器,返回容器ID
--name nginx-test \  # 给容器设置名称,方便后续管理
-p 8080:80 \  # 端口映射,宿主机8080端口映射到容器内80端口
-v /data/nginx/html:/usr/share/nginx/html \  # 数据卷挂载,宿主机目录映射到容器内目录,容器删除数据不丢失
nginx:latest  # 容器使用的镜像名称:版本

docker ps  # 查看当前正在运行的容器
docker ps -a  # 查看所有容器(包括停止的)
docker logs -f nginx-test  # 实时查看容器日志,-f 持续刷新输出,排查问题必用
docker exec -it nginx-test /bin/bash  # 进入容器内部,-it 交互式终端,进入后可执行容器内命令
docker stop nginx-test  # 停止运行中的容器
docker start nginx-test  # 启动已停止的容器
docker rm nginx-test  # 删除已停止的容器,加-f可强制删除运行中的容器

# 4. Dockerfile构建镜像(核心,后续应用打包必用)
vim Dockerfile  # 创建Dockerfile文件,文件名必须是Dockerfile
# 写入以下内容,构建一个自定义nginx镜像
FROM nginx:latest  # 基础镜像,基于官方nginx最新版构建
MAINTAINER your-name  # 镜像维护者信息
COPY index.html /usr/share/nginx/html/  # 将宿主机当前目录的index.html复制到容器内
EXPOSE 80  # 声明容器暴露的端口
CMD ["nginx", "-g", "daemon off;"]  # 容器启动时执行的命令,前台运行nginx

# 构建镜像命令,-t 设置镜像名称和版本,. 代表Dockerfile在当前目录
docker build -t my-nginx:v1 .
阶段小练习
  1. 完成 Docker 安装,启动 nginx 容器,通过宿主机 IP+8080 端口访问到 nginx 默认页面
  2. 编写 Dockerfile,构建一个包含自定义首页的 nginx 镜像,启动容器并成功访问自定义页面
  3. 开通阿里云容器镜像服务 ACR,将自己构建的镜像推送到 ACR 仓库

3. 网络与云计算基础

  • 网络核心:理解 OSI 七层模型、TCP/IP 协议、HTTP/HTTPS、网关、子网划分、负载均衡原理
  • 云计算基础:理解 IaaS/PaaS/SaaS 概念,掌握阿里云 ECS、VPC、SLB、NAS 基础操作,熟悉阿里云控制台使用

第二阶段:K8s 核心概念入门与本地环境搭建(预计 2-3 周,无成本练手,吃透核心)

本地环境使用 Minikube(单节点 K8s 集群,专为学习设计),无需多台服务器,零成本上手,避免直接操作阿里云产生不必要的费用。

1. K8s 核心架构与概念(先理解再动手)

核心架构

K8s 集群分为控制平面(Master 节点)工作节点(Node 节点),新手先记住核心作用:

  • Master 节点:集群的 "大脑",负责集群管理、调度、API 对接,核心组件:kube-apiserver、etcd、kube-scheduler、controller-manager
  • Node 节点:集群的 "工人",负责运行业务容器,核心组件:kubelet、kube-proxy、容器运行时(Docker/containerd)
必须掌握的核心资源(80% 运维操作都围绕这些)
资源名称 核心作用 新手速记
Pod K8s 最小部署单元,一个 Pod 包含 1 个或多个容器,共享网络和存储 容器的 "集体宿舍",K8s 不直接管理容器,只管理 Pod
Deployment 无状态应用部署控制器,管理 Pod 的创建、扩容、滚动更新、回滚 应用的 "大管家",日常部署业务的核心资源
Service 为 Pod 提供固定访问地址,实现 Pod 的负载均衡,解决 PodIP 动态变化的问题 应用的 "固定门牌号 + 负载均衡器"
Namespace 实现集群资源隔离,给不同业务 / 环境划分独立命名空间 集群的 "文件夹",避免不同业务资源冲突
ConfigMap 存储非敏感配置信息,实现配置和代码分离 应用的 "配置文件中心"
Secret 存储敏感信息(密码、密钥、证书),加密存储 应用的 "密码箱"
PV/PVC PV 是集群存储资源,PVC 是用户对存储的申请,实现存储和应用解耦 应用的 "硬盘",PV 是硬盘资源,PVC 是申请使用硬盘
Ingress 实现集群 HTTP/HTTPS 七层路由,对外暴露服务 集群的 "大门",统一流量入口

2. 本地 Minikube 环境搭建(国内适配,带全注释命令)

环境要求
  • 硬件:CPU≥2 核,内存≥2GB,磁盘空闲≥20GB
  • 系统:已安装好 Docker 的 Linux/Windows/Mac,推荐 Linux 虚拟机 / 阿里云 ECS
带注释安装 & 启动命令
# 1. 安装Minikube二进制文件(Linux系统,国内镜像源,避免外网访问失败)
# 下载最新稳定版Minikube
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# 安装到系统可执行路径,赋予执行权限
sudo install minikube-linux-amd64 /usr/local/bin/minikube
# 验证安装,输出版本号即成功
minikube version

# 2. 安装kubectl(K8s命令行工具,集群操作核心)
# 添加阿里云K8s软件源
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
# 安装kubectl(和Minikube版本匹配,推荐稳定版)
yum install -y kubectl-1.28.3
# 验证安装
kubectl version --client

# 3. 启动Minikube集群(国内专属配置,解决镜像拉取失败问题)
minikube start \
--driver=docker \  # 指定驱动为docker,提前安装好docker
--image-mirror-country=cn \  # 国内镜像源,解决墙的问题
--image-repository=registry.cn-hangzhou.aliyuncs.com/google_containers \  # 阿里云镜像仓库
--kubernetes-version=v1.28.3 \  # 指定K8s版本,和kubectl版本一致
--memory=2048 \  # 分配2G内存,可根据自己机器调整
--cpus=2  # 分配2核CPU

# 4. 集群验证命令
minikube status  # 查看Minikube集群状态,所有组件running即正常
kubectl cluster-info  # 查看集群核心组件地址,验证集群连通性
kubectl get nodes  # 查看集群节点,能看到minikube节点状态为Ready即搭建成功
kubectl get pods --all-namespaces  # 查看所有命名空间的Pod,系统组件全部Running即正常

# 5. 常用Minikube辅助命令
minikube stop  # 停止集群
minikube delete  # 删除集群(测试出错可重置)
minikube dashboard  # 启动K8s可视化面板,新手可直观查看集群资源

3. kubectl 核心命令详解(带全注释,运维必背)

kubectl 是 K8s 集群操作的唯一命令行工具,所有运维操作都基于它,以下是按场景分类的核心命令,全部附带注释。

1. 集群信息与配置命令
kubectl config get-contexts  # 查看所有集群上下文,可管理多个集群
kubectl config use-context minikube  # 切换到指定集群上下文,多集群管理必用
kubectl config set-context --current --namespace=default  # 设置当前默认命名空间
kubectl api-resources  # 查看集群支持的所有资源类型,忘记资源名时用

2. 资源查看命令(日常排查最常用)

# 通用格式:kubectl get 资源类型 [名称] [参数]
# 资源类型简写:pods=po, deployments=deploy, services=svc, namespaces=ns, nodes=no

kubectl get ns  # 查看集群所有命名空间
kubectl get nodes -o wide  # 查看所有节点详情,-o wide显示IP、系统版本等额外信息
kubectl describe node minikube  # 查看节点详细信息,包括资源使用、事件、污点,节点故障排查必用

# Pod相关查看
kubectl get pods  # 查看默认命名空间下的所有Pod
kubectl get pods -n kube-system  # 查看指定命名空间(kube-system)下的Pod,-n 指定命名空间
kubectl get pods -A -o wide  # -A 查看所有命名空间的Pod,-o wide显示Pod所在节点、IP等信息
kubectl describe pod <pod名称>  # 查看Pod详细信息、生命周期事件,Pod启动失败排查核心命令
kubectl logs -f <pod名称>  # 实时查看Pod内容器日志,-f持续刷新,业务故障排查必用
kubectl logs -f <pod名称> -c <容器名称>  # 一个Pod有多个容器时,指定容器查看日志
kubectl exec -it <pod名称> -- /bin/bash  # 进入Pod内的容器,交互式终端,和docker exec用法一致

# Deployment/Service相关查看
kubectl get deploy  # 查看默认命名空间的所有Deployment
kubectl describe deploy <deployment名称>  # 查看Deployment详情、事件、副本状态
kubectl get svc -o wide  # 查看所有Service,显示集群IP、端口、关联的标签等信息
kubectl get svc <svc名称> -n <命名空间>  # 查看指定命名空间的Service详情

3. 资源创建 / 更新 / 删除命令(声明式管理,K8s 核心操作)

# 核心命令:kubectl apply -f yaml文件  # 声明式创建/更新资源,生产环境标准用法
# 示例:通过yaml文件创建Deployment,先创建nginx-deploy.yaml文件
vim nginx-deploy.yaml
# 写入Deployment配置内容,后续练习会详细讲解
# 执行创建/更新,yaml文件有变更时执行会自动滚动更新
kubectl apply -f nginx-deploy.yaml
# 查看yaml文件定义的资源状态
kubectl get -f nginx-deploy.yaml
# 删除yaml文件中定义的所有资源
kubectl delete -f nginx-deploy.yaml

# 临时创建/删除(测试用,不推荐生产环境使用)
kubectl create ns test-ns  # 创建命名空间
kubectl delete ns test-ns  # 删除命名空间(谨慎!会删除命名空间下所有资源)
kubectl delete pod <pod名称>  # 删除指定Pod,Deployment管理的Pod会自动重建
kubectl scale deploy <deployment名称> --replicas=3  # 扩容/缩容Deployment,设置副本数为3

4. 入门级实操练习(必须完成,吃透核心逻辑)

练习目标

在 Minikube 集群中部署 nginx 应用,实现:Pod 正常运行→通过 Service 访问→扩容副本→滚动更新→版本回滚全流程操作。

带注释完整步骤
# 步骤1:创建独立命名空间,实现资源隔离
kubectl create ns nginx-demo
# 切换默认命名空间为nginx-demo,后续命令不用再加-n参数
kubectl config set-context --current --namespace=nginx-demo

# 步骤2:编写Deployment的yaml文件,定义nginx应用
vim nginx-deploy.yaml
# 写入以下内容,每行都有注释,新手务必理解每个字段的含义
apiVersion: apps/v1  # K8s API版本,Deployment固定用apps/v1
kind: Deployment  # 资源类型为Deployment
metadata:
  name: nginx-demo  # Deployment名称,同一命名空间内唯一
  labels:
    app: nginx-demo  # 资源标签,用于筛选和关联
spec:
  replicas: 2  # Pod副本数量,启动2个相同的Pod
  selector:
    matchLabels:
      app: nginx-demo  # 标签选择器,必须和下面template里的Pod标签一致
  template:  # Pod模板,定义Pod的规格
    metadata:
      labels:
        app: nginx-demo  # Pod的标签,和selector匹配
    spec:
      containers:  # 容器定义
      - name: nginx  # 容器名称
        image: nginx:1.25.3  # 容器使用的镜像,固定版本,不用latest,方便版本管理
        ports:
        - containerPort: 80  # 容器暴露的端口,和nginx监听端口一致
        resources:  # 资源限制,避免Pod占用节点所有资源
          requests:  # 资源申请,调度时根据这个分配节点
            cpu: 100m
            memory: 128Mi
          limits:  # 资源上限,超过会被限制或重启
            cpu: 200m
            memory: 256Mi

# 步骤3:创建Deployment,执行部署
kubectl apply -f nginx-deploy.yaml
# 验证部署结果,查看Deployment状态,READY显示2/2代表2个副本全部就绪
kubectl get deploy
# 查看Pod状态,2个Pod全部Running即为正常
kubectl get pods -o wide

# 步骤4:创建Service,为Pod提供固定访问地址
vim nginx-svc.yaml
# 写入以下内容
apiVersion: v1  # Service固定API版本
kind: Service  # 资源类型为Service
metadata:
  name: nginx-demo-svc
spec:
  type: NodePort  # Service类型,NodePort可通过节点IP+端口访问,测试环境用
  selector:
    app: nginx-demo  # 标签选择器,和Deployment的Pod标签一致,关联对应的Pod
  ports:
  - port: 80  # Service在集群内的访问端口
    targetPort: 80  # 转发到Pod的容器端口,和Deployment里的containerPort一致
    nodePort: 30080  # 节点端口,范围30000-32767,固定端口,不指定会随机分配

# 创建Service
kubectl apply -f nginx-svc.yaml
# 验证Service,查看CLUSTER-IP、端口信息
kubectl get svc

# 步骤5:访问测试
# Minikube环境执行,获取访问地址
minikube service nginx-demo-svc -n nginx-demo
# 或通过节点IP+30080端口访问,curl测试
curl $(minikube ip):30080

# 步骤6:应用扩容,将副本数从2扩容到4
kubectl scale deploy nginx-demo --replicas=4
# 验证扩容结果,READY显示4/4即为成功
kubectl get deploy
kubectl get pods

# 步骤7:滚动更新,将nginx版本从1.25.3更新到1.26.0
# 方式1:修改yaml文件的image字段,重新apply(推荐,可追溯)
sed -i 's/nginx:1.25.3/nginx:1.26.0/g' nginx-deploy.yaml
kubectl apply -f nginx-deploy.yaml
# 方式2:命令行直接更新(测试用)
# kubectl set image deploy/nginx-demo nginx=nginx:1.26.0

# 查看滚动更新过程
kubectl rollout status deploy nginx-demo
# 查看更新历史
kubectl rollout history deploy nginx-demo

# 步骤8:版本回滚,更新出错时回滚到上一个版本
kubectl rollout undo deploy nginx-demo
# 验证回滚结果,查看镜像版本是否回到1.25.3
kubectl describe deploy nginx-demo | grep Image

# 练习收尾:清理测试资源
kubectl delete -f nginx-deploy.yaml
kubectl delete -f nginx-svc.yaml
kubectl delete ns nginx-demo

第三阶段:阿里云 ACK 集群实战入门(预计 2 周,贴合阿里云运维岗位需求)

Minikube 仅用于学习,企业生产环境 90% 的阿里云 K8s 运维都是基于ACK(容器服务 Kubernetes 版),托管版 ACK 由阿里云维护 Master 节点,新手无需关注控制面运维,只需要聚焦 Worker 节点和业务应用,大幅降低学习门槛。

1. 阿里云环境准备

  1. 注册阿里云账号,完成实名认证,开通容器服务 ACK、容器镜像服务 ACR、云服务器 ECS、负载均衡 SLB、专有网络 VPC 权限
  2. 资源规划:新手推荐创建ACK 托管版集群,地域选择离自己近的,Worker 节点选择 2 台 2 核 4G 的 ECS(按量付费,测试完可释放,避免费用浪费)
  3. 权限配置:给账号授予 AliyunCSFullAccess、AliyunECSFullAccess、AliyunVPCFullAccess 权限,避免操作时权限不足

2. ACK 托管集群创建(新手友好,可视化操作)

  1. 登录阿里云控制台,搜索「容器服务 Kubernetes 版」,进入 ACK 控制台
  2. 左侧导航栏选择「集群」→「创建集群」,选择「托管版」
  3. 基础配置:
    • 集群名称:自定义,如 ack-demo-cluster
    • 地域:选择就近地域,如华东 1(杭州)
    • Kubernetes 版本:选择稳定版,如 1.28.3,和本地学习版本一致
    • 容器运行时:默认 containerd,兼容 Docker 镜像
  4. 网络配置:选择自动创建 VPC 和交换机,网络插件选择 Terway(阿里云自研,性能更好,支持网络策略)
  5. 节点配置:Worker 节点选择 2 台 ecs.g6.large(2 核 4G),系统盘 40GiB,按量付费
  6. 其他配置:默认即可,点击「下一步:确认配置」,勾选服务协议,点击「创建集群」
  7. 等待 10-15 分钟,集群创建完成,状态显示「运行中」即可进入下一步

3. 本地 kubectl 连接 ACK 集群(核心,实现本地操作阿里云集群)

方式 1:通过 kubeconfig 文件连接(推荐)
# 步骤1:阿里云控制台获取kubeconfig文件
# 1. 进入ACK集群详情页,左侧导航栏选择「集群信息」
# 2. 切换到「连接信息」Tab,选择「公网访问」,开启公网访问开关
# 3. 复制kubeconfig内容,到本地服务器

# 步骤2:本地配置kubeconfig文件
# 编辑kubeconfig配置文件,默认路径~/.kube/config
vim ~/.kube/config
# 粘贴从阿里云复制的kubeconfig内容,保存退出
# 给配置文件设置权限,避免权限过大报错
chmod 600 ~/.kube/config

# 步骤3:验证集群连接
# 查看集群节点,能看到阿里云ACK的2台Worker节点,状态Ready即为连接成功
kubectl get nodes
# 查看集群信息,验证连通性
kubectl cluster-info
# 查看集群命名空间,能看到kube-system等系统命名空间
kubectl get ns
方式 2:通过阿里云 CloudShell 连接

无需本地配置,直接在阿里云控制台点击「CloudShell」,自动完成集群连接,新手测试可直接使用。

4. ACK 集群基础运维核心操作(适配阿里云生态,带注释命令)

# 1. 节点运维操作(阿里云ECS节点)
kubectl get nodes -o wide  # 查看所有Worker节点,显示节点IP、ECS规格、系统版本
kubectl describe node <节点名称>  # 查看节点详情,资源使用、标签、污点、事件,节点故障排查
kubectl cordon <节点名称>  # 标记节点为不可调度,新的Pod不会调度到该节点,维护节点前必用
kubectl drain <节点名称> --ignore-daemonsets  # 节点排水,排空节点上的Pod,迁移到其他节点,节点下线前必用
kubectl uncordon <节点名称>  # 恢复节点调度,维护完成后执行

# 2. 命名空间管理(企业级必用,按环境/业务隔离)
kubectl create ns prod  # 创建生产环境命名空间
kubectl create ns test  # 创建测试环境命名空间
kubectl get ns  # 查看所有命名空间

# 3. 阿里云专属存储操作(云盘PV/PVC)
# ACK集群默认集成阿里云云盘存储,直接创建PVC即可自动创建PV,无需手动配置
vim pvc-demo.yaml
# 写入以下内容,创建阿里云高效云盘PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cloud-disk-pvc
  namespace: test
spec:
  accessModes:
    - ReadWriteOnce  # 阿里云云盘仅支持单节点读写,固定值
  resources:
    requests:
      storage: 20Gi  # 申请20GiB存储空间
  storageClassName: alicloud-disk-efficiency  # 存储类,高效云盘,ACK默认提供

# 创建PVC
kubectl apply -f pvc-demo.yaml
# 查看PVC状态,STATUS为Bound即为绑定成功,自动创建了对应的PV
kubectl get pvc -n test
kubectl get pv

# 4. 阿里云SLB类型Service(生产环境对外暴露服务标准用法)
# NodePort仅测试用,生产环境用LoadBalancer类型,自动创建阿里云SLB负载均衡
vim nginx-svc-slb.yaml
# 写入以下内容
apiVersion: v1
kind: Service
metadata:
  name: nginx-slb-svc
  namespace: test
spec:
  type: LoadBalancer  # Service类型为LoadBalancer,自动创建阿里云SLB
  selector:
    app: nginx-demo
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

# 创建Service
kubectl apply -f nginx-svc-slb.yaml
# 查看Service,EXTERNAL-IP会显示SLB的公网IP,等待1-2分钟分配完成
kubectl get svc -n test
# 验证访问,通过SLB公网IP即可访问,浏览器/curl测试
curl <SLB公网IP>

5. 阶段实操练习

在 ACK 集群中完成第二阶段的 nginx 全流程部署,使用阿里云 SLB 类型 Service 对外暴露服务,使用云盘 PVC 挂载 nginx 配置文件,实现配置持久化。

第四阶段:K8s 进阶运维与阿里云生态集成(预计 3-4 周,企业级运维必备)

完成前面三个阶段,你已经可以完成基础的应用部署和运维,本阶段是阿里云 K8s 运维工程师的核心竞争力,掌握后可胜任企业级生产环境运维工作。

1. 应用生命周期全管理

  • 滚动更新与蓝绿 / 灰度发布:掌握 Deployment 滚动更新策略配置,基于阿里云 ACK 实现蓝绿发布、金丝雀发布
  • 健康检查:配置 Pod 的存活探针(livenessProbe)、就绪探针(readinessProbe)、启动探针(startupProbe),实现应用故障自动重启、流量自动摘除
  • 资源管理:配置 Pod 的 CPU / 内存 requests 和 limits,避免资源抢占,掌握 LimitRange 命名空间资源限制、ResourceQuota 资源配额
  • 版本回滚:掌握多版本管理,回滚到指定历史版本,配置更新策略,避免更新时业务中断

2. 阿里云 ACK 网络与存储进阶

  • 网络进阶:掌握 Terway 网络插件的网络策略、固定 IP 配置,Ingress 控制器部署(阿里云 ACK 默认集成 Nginx Ingress,自动绑定 SLB),配置 HTTPS 证书、域名路由、灰度路由
  • 存储进阶:掌握阿里云 NAS/OSS 存储的 PV/PVC 配置,实现多 Pod 共享存储,StatefulSet 有状态应用的存储管理,存储快照与备份

3. 可观测性体系搭建(运维核心,故障排查的基石)

阿里云 ACK 默认集成了完整的可观测产品,无需自建,开箱即用:

  • 监控告警:对接阿里云 ARMS Prometheus 监控,配置集群节点、组件、业务应用的监控大盘,设置告警规则,异常及时通知
  • 日志管理:对接阿里云日志服务 SLS,采集集群节点、容器、应用日志,配置日志检索、可视化、日志告警,实现日志全生命周期管理
  • 链路追踪:对接阿里云 ARMS 链路追踪,实现微服务应用的全链路可观测,定位接口耗时、异常问题

4. 弹性伸缩与高可用

  • Pod 水平扩缩容 HPA:根据 CPU / 内存使用率、自定义指标,自动扩缩容 Pod 副本数,应对业务流量波动
  • 节点自动扩缩容:基于阿里云弹性伸缩,实现 ACK 集群 Worker 节点的自动扩缩容,降低资源成本
  • 高可用配置:多可用区集群部署,Pod 拓扑分布约束,反亲和性配置,避免单点故障,保障业务可用性

5. 安全与权限管理

  • RBAC 权限控制:掌握 Role、ClusterRole、RoleBinding、ClusterBinding 配置,给不同用户 / 服务账号配置最小权限,避免权限过大
  • 阿里云 RAM 权限对接:配置 RAM 用户和 RBAC 权限联动,实现阿里云控制台操作权限精细化管理
  • 容器安全:配置 Pod 安全上下文,镜像安全扫描(阿里云 ACR 自带),网络策略限制 Pod 间访问,避免安全风险

6. 故障排查核心方法论与命令

新手必背故障排查流程:

  1. 查看 Pod 状态:kubectl get pods,确定 Pod 异常状态(Pending/ImagePullBackOff/CrashLoopBackOff/ErrImagePull 等)
  2. 查看 Pod 事件:kubectl describe pod <pod名称>,定位异常原因,90% 的问题都能在这里找到答案
  3. 查看容器日志:kubectl logs -f <pod名称>,定位应用层报错
  4. 进入容器调试:kubectl exec -it <pod名称> -- /bin/bash,测试网络、配置、依赖是否正常
  5. 节点排查:节点资源不足、端口占用、磁盘满、网络不通等,kubectl describe node <节点名称>查看节点事件和资源使用

常见异常状态原因速查:

  • Pending:资源不足、调度失败、PVC 绑定失败、污点容忍不匹配
  • ImagePullBackOff/ErrImagePull:镜像地址错误、镜像不存在、私有镜像仓库权限不足、网络无法拉取镜像
  • CrashLoopBackOff:容器启动后退出,应用程序报错、配置错误、健康检查失败、资源不足 OOM
  • RunContainerError:容器运行时错误,配置文件错误、权限不足、端口占用

第五阶段:全流程实战练习项目(可直接写进简历,从入门到企业级)

项目 1:入门级 - ACK 集群部署静态网站(1 天可完成)

项目目标

在阿里云 ACK 集群中部署一个 Nginx 静态网站,实现:HTTPS 域名访问、配置文件持久化、多副本高可用、基础监控告警。

核心步骤
  1. 准备静态网站代码,打包成 Docker 镜像,推送到阿里云 ACR 仓库
  2. 创建命名空间、ConfigMap 存储 nginx 配置文件、阿里云 NAS PVC 存储网站代码
  3. 编写 Deployment,配置多副本、健康检查、资源限制、挂载 ConfigMap 和 PVC
  4. 创建 LoadBalancer 类型 Service,绑定阿里云 SLB
  5. 配置 Ingress,绑定自定义域名和 HTTPS 证书(阿里云 SSL 证书服务),实现域名 HTTPS 访问
  6. 配置基础监控,设置网站不可访问告警
验收标准
  • 浏览器通过域名 HTTPS 正常访问静态网站
  • 网站内容更新后,滚动更新无业务中断
  • 删除任意 Pod,自动重建,网站访问不受影响
  • 网站不可访问时,能收到告警通知

项目 2:进阶级 - 前后端分离微服务应用部署(3 天可完成)

项目目标

部署一套完整的前后端分离微服务应用(SpringBoot 后端 + Vue 前端 + MySQL 数据库),实现:配置与代码分离、敏感信息加密存储、数据持久化、服务间调用、内外网访问隔离。

核心步骤
  1. 后端 SpringBoot 应用编写 Dockerfile,构建镜像推送到 ACR;前端 Vue 应用打包,构建 Nginx 镜像推送到 ACR
  2. 规划命名空间,test 和 prod 环境隔离
  3. 使用 ConfigMap 存储后端应用配置文件,Secret 存储 MySQL 数据库账号密码
  4. 使用 StatefulSet 部署 MySQL 数据库,挂载阿里云云盘 PVC,实现数据持久化,创建 ClusterIP 类型 Service,仅集群内可访问
  5. 部署后端 Deployment,配置健康检查、资源限制,通过 Service 名称访问 MySQL 数据库,创建 ClusterIP 类型 Service
  6. 部署前端 Deployment,配置 nginx 反向代理后端接口,创建 Ingress,对外暴露前端访问地址
  7. 配置网络策略,限制只有前端 Pod 能访问后端 Pod,只有后端 Pod 能访问 MySQL 数据库,提升安全性
验收标准
  • 前端页面正常访问,能正常调用后端接口,实现数据增删改查
  • 数据库数据持久化,Pod 重启 / 重建后数据不丢失
  • 配置文件修改无需重新构建镜像,更新 ConfigMap 后生效
  • 外网无法直接访问后端和数据库,仅能通过前端页面访问,实现访问隔离

项目 3:企业级 - 基于阿里云 ACK 的 DevOps 全流程项目(1 周可完成)

项目目标

搭建一套完整的 CI/CD 流水线,实现:代码提交→自动构建镜像→镜像扫描→自动部署到 ACK 集群→监控告警全流程自动化,贴合企业生产环境 DevOps 规范。

核心步骤
  1. 代码托管:使用阿里云 Codeup/GitHub 托管前后端应用代码
  2. 镜像仓库:阿里云 ACR 创建私有仓库,配置镜像安全扫描
  3. 流水线搭建:使用阿里云云效 Flow/Jenkins,配置 CI/CD 流水线
    • CI 阶段:拉取代码→单元测试→代码扫描→构建 Docker 镜像→推送到 ACR→镜像安全扫描
    • CD 阶段:更新 Deployment 镜像版本→自动部署到 ACK 测试集群→自动化测试→审批通过后部署到生产集群
  4. 配置 K8s 应用健康检查、滚动更新策略、自动扩缩容 HPA
  5. 搭建完整的可观测体系:ARMS Prometheus 监控大盘、SLS 日志采集、链路追踪、异常告警配置
  6. 配置集群备份:使用阿里云 ACK 集群备份能力,定期备份集群资源和应用数据
验收标准
  • 代码提交到 master 分支后,自动触发流水线,完成构建和测试环境部署
  • 镜像存在高危漏洞时,流水线自动终止,不允许部署到生产环境
  • 应用部署支持滚动更新,更新过程无业务中断,支持一键回滚
  • 应用 CPU / 内存使用率过高、接口报错、服务不可用时,能自动触发告警
  • 集群和应用数据定期备份,可快速恢复

第六阶段:学习资源与进阶规划

官方学习资源(权威无坑)

  1. Kubernetes 官方文档:https://kubernetes.io/zh-cn/docs/home/
  2. 阿里云 ACK 官方文档:https://help.aliyun.com/zh/ack/
  3. 阿里云云原生大学:https://edu.aliyun.com/roadmap/cloudnative

认证与进阶

  1. 入门:阿里云 ACA 云原生容器工程师认证
  2. 进阶:阿里云 ACP 云原生容器工程师认证(运维岗位敲门砖)
  3. 资深:Kubernetes CKA/CKAD 认证

新手避坑指南

  1. 严禁跳步学习:先 Linux→Docker→K8s 基础→ACK 实战,不要一开始就搞复杂的微服务和 CI/CD
  2. 镜像版本不要用 latest:生产环境必须固定镜像版本,避免版本不一致导致的异常,方便回滚
  3. 必须配置资源限制:所有 Pod 都要配置 CPU / 内存 requests 和 limits,避免个别 Pod 占用节点所有资源,导致集群雪崩
  4. 测试环境优先:所有新操作先在 Minikube/ACK 测试集群验证,没问题再上生产环境
  5. 不要直接修改 Pod:Deployment 管理的 Pod,直接删除会自动重建,必须修改 Deployment 的 yaml 配置,通过声明式管理

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐