1. 为什么需要K8S CKA认证模拟环境?
在准备Kubernetes Certified Administrator(CKA)认证考试时,搭建一个真实的练习环境至关重要。官方考试是在真实的Kubernetes集群上操作,而模拟环境能让你:
- 反复练习kubectl命令操作而不担心破坏生产环境
- 模拟考试中可能遇到的各种故障场景(如节点故障、网络分区等)
- 熟悉etcd备份恢复、集群升级等高风险操作
- 测试不同版本的Kubernetes兼容性问题
我最初准备CKA时,直接在公有云上创建集群练习,结果一天就烧掉了50多美元。后来改用本地VMware虚拟化方案,不仅零成本,还能随时快照回滚。下面分享我的环境搭建方案,已经帮助20多位同事通过认证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境规划与资源准备
2.1 硬件需求建议
我的测试机配置(笔记本):
- CPU:i7-11800H (8核16线程)
- 内存:32GB DDR4
- 存储:1TB NVMe SSD
最低推荐配置:
- 4核CPU
- 16GB内存
- 100GB可用存储
提示:Kubernetes对磁盘IOPS要求较高,机械硬盘会导致集群启动缓慢
2.2 软件组件选择
| 组件 | 版本选择建议 | 备注 |
|---|---|---|
| VMware | Workstation 16 Pro | 个人学习可免费试用30天 |
| 操作系统 | Ubuntu 22.04 LTS | 对K8s兼容性最好 |
| Kubernetes | v1.26~v1.28 | 匹配当前CKA考试版本 |
| Container运行时 | containerd 1.6+ | 考试已不再使用Docker |
| CLI工具 | kubectl 1.28 | 与集群版本±1个小版本内兼容 |
3. 逐步搭建K8S模拟环境
3.1 VMware虚拟机配置
创建3台虚拟机(1控制平面+2工作节点):
bash复制# 控制平面节点配置示例
vmware-vdiskmanager -c -s 40GB -a lsilogic -t 0 controller.vmdk
vmrun -T ws create "controller.vmx" -c 4 -m 4096 -d "Ubuntu 64-bit"
关键参数:
- 每节点至少2vCPU/4GB内存
- 网络适配器选择NAT模式(方便上网下载组件)
- 开启虚拟化引擎的"虚拟化Intel VT-x/EPT"选项
3.2 操作系统基础配置
在所有节点执行:
bash复制# 禁用swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 设置时区同步
sudo timedatectl set-timezone Asia/Shanghai
sudo apt install -y chrony && sudo systemctl enable chrony
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
3.3 安装容器运行时(containerd)
bash复制# 安装依赖
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
# 添加Docker仓库(containerd在其包中)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装containerd
sudo apt-get update
sudo apt-get install -y containerd.io
# 生成默认配置并启用systemd cgroup驱动
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
4. Kubernetes集群部署
4.1 安装kubeadm/kubelet/kubectl
bash复制sudo apt-get update
sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update
sudo apt-get install -y kubelet=1.28.0-00 kubeadm=1.28.0-00 kubectl=1.28.0-00
sudo apt-mark hold kubelet kubeadm kubectl
4.2 初始化控制平面
在控制节点执行:
bash复制sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.56.10 \
--kubernetes-version v1.28.0
关键参数说明:
--apiserver-advertise-address:设为控制节点的IP--pod-network-cidr:需要与后续安装的CNI插件匹配
成功后会输出加入集群的命令,类似:
bash复制kubeadm join 192.168.56.10:6443 --token xxxx \
--discovery-token-ca-cert-hash sha256:xxxx
4.3 安装网络插件(Flannel)
bash复制kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
验证安装:
bash复制kubectl get pods -n kube-system
# 应看到flannel pod运行中
5. 模拟考试环境配置
5.1 配置kubectl命令补全
bash复制echo 'source <(kubectl completion bash)' >> ~/.bashrc
echo 'alias k=kubectl' >> ~/.bashrc
echo 'complete -F __start_kubectl k' >> ~/.bashrc
source ~/.bashrc
5.2 创建模拟考题场景
示例1:模拟etcd备份恢复
bash复制# 备份
ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
snapshot save snapshot.db
# 破坏集群
sudo rm -rf /var/lib/etcd/member/
# 恢复
ETCDCTL_API=3 etcdctl snapshot restore snapshot.db \
--data-dir /var/lib/etcd/new \
--initial-cluster controller=https://192.168.56.10:2380 \
--initial-advertise-peer-urls https://192.168.56.10:2380 \
--name controller
示例2:节点维护模拟
bash复制# 标记节点不可调度
kubectl cordon worker1
# 排空节点
kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data
# 维护后重新加入
kubectl uncordon worker1
6. 常见问题排查指南
6.1 kubelet服务无法启动
检查日志:
bash复制journalctl -xeu kubelet
常见原因:
- 未禁用swap:重新执行
swapoff -a - cgroup驱动不匹配:检查
/var/lib/kubelet/config.yaml中的cgroupDriver是否为systemd - 证书过期:执行
kubeadm certs renew all
6.2 Pod一直处于Pending状态
诊断步骤:
bash复制kubectl describe pod <pod-name>
kubectl get events --sort-by='.metadata.creationTimestamp'
可能原因:
- 资源不足:检查
kubectl describe nodes中的Allocatable资源 - 未满足节点选择器:检查pod的nodeSelector配置
- PV绑定失败:检查StorageClass和PVC配置
6.3 网络连通性问题
排查工具:
bash复制# 检查Calico/IPVS状态
ipvsadm -Ln
calicoctl node status
# 测试跨节点通信
kubectl run -it --rm --image=alpine test -- sh
ping <other-pod-ip>
7. 高效练习方法建议
-
时间管理训练:
- 使用
time kubectl ...记录每个操作耗时 - 考试时平均每题只有6分钟
- 使用
-
重点练习领域(按考试权重排序):
- 集群架构(25%):etcd备份恢复、升级集群
- 工作负载管理(15%):Deployment滚动更新、配置ConfigMap
- 服务网络(20%):Service/Ingress配置、网络策略
- 存储(10%):PV/PVC创建、StorageClass配置
- 故障排查(30%):Pod日志分析、节点状态检查
-
推荐练习资源:
bash复制# 官方模拟题 git clone https://github.com/cncf/curriculum.git # 社区题库 kubectl create deployment nginx --image=nginx kubectl expose deployment nginx --port=80 --type=NodePort
我在实际练习中发现,最耗时的往往是etcd操作和网络策略配置。建议对这两个领域额外加强练习,考试前至少完整演练3次etcd备份恢复流程。
