把集群摸清楚再上手
目标
熟练掌握首次进入集群时要做的七项工作:调查、namespace、标签与注解、context 切换、节点标签、kubectl explain,以及通过 dry-run 生成清单。
为什么这很重要
CKA 考试共 120 分钟、17 道题,平均每题只有 7 分钟。如果从头手写清单,时间会不够。因此,使用 --dry-run=client -o yaml 生成骨架,再只修改必要字段,实际上已经成为标准策略。
kubectl explain 是另一半关键工具。考试现场只能查阅 Kubernetes 官方文档,但如果只是确认某个字段的准确拼写与位置,explain 要快得多。标签与注解的区别也是同一道理。标签是选择器能够选择的标识,Service 和控制器会引用它;注解是无法被选择的附加信息,工具通过它传递元数据。若混用二者,所有连接都可能悄无声息地失效。
步骤
- 创建 namespace
cka-basics,并添加标签env=lab。 - 将集群中所有节点名称逐行保存到
/root/cka-basics/nodes.txt。文件中只能有名称,不能包含表头或node/前缀。 - 在
cka-basics中创建 ConfigMapapp-meta。数据为env=lab,标签为tier=backend,注解为owner=cka-student。 - 原样复用当前使用的 cluster 和 user,创建默认 namespace 为
cka-basics的 contextcka-basics-ctx,并切换到该 context。 - 为节点
lab-node-1添加标签disktype=ssd、topology.kubernetes.io/zone=rack-a,以及注解owner=cka-student。 - 提取 Pod toleration 的
effect字段说明,使用kubectl explain,并保存到/root/cka-basics/explain.txt。 - 通过 dry-run 生成 Deployment
web(镜像nginx:1.27,副本数 3)的清单,并保存到/root/cka-basics/web.yaml。此步骤暂时不要应用。 - 将该清单应用到
cka-basics,为 Deployment 对象添加标签tier=backend,然后确认 3/3 Ready。
参考
- 可以使用类似
kubectl get nodes -o custom-columns=NAME:.metadata.name --no-headers的选项去掉表头。 - 使用
kubectl config set-context <이름> --cluster=... --user=... --namespace=...创建 context,再通过use-context切换。 - 常见错误 1:只给 Pod 模板添加标签,而没有给 Deployment 本身添加。第 8 步检查的是 Deployment 对象的标签。
- 常见错误 2:创建 context 时凭空新建 cluster 或 user 名称。必须原样使用已有名称,才能保持连接。
创建 namespace 并添加标签
创建 namespace cka-basics,并添加标签 env=lab。
可以先创建 namespace 再单独添加标签,也可以从一开始就在清单中设置。标签位于 metadata.labels 下。
将节点列表导出到文件
将集群中所有节点名称逐行保存到 /root/cka-basics/nodes.txt。文件中只能有名称,不能包含表头或 node/ 前缀。
文件中只能逐行包含节点名称。请考虑如何从输出中去掉表头或 node/ 前缀。jsonpath 的 range 或 -o custom-columns 会很有帮助。
区分标签与注解并正确添加
在 cka-basics 中创建 ConfigMap app-meta。数据为 env=lab,标签为 tier=backend,注解为 owner=cka-student。
标签是选择器可以选择的标识,注解是不能被选择的附加信息。两者的存储位置不同(metadata.labels 与 metadata.annotations)。
创建并切换 kubeconfig context
原样复用当前使用的 cluster 和 user,创建默认 namespace 为 cka-basics 的 context cka-basics-ctx,并切换到该 context。
context 是 cluster + user + namespace 三者的组合。无需创建新的 cluster 或 user,请原样复用已有名称。先用 kubectl config get-clusters 和 get-users 确认名称。
为节点添加标签与注解
为节点 lab-node-1 添加标签 disktype=ssd、topology.kubernetes.io/zone=rack-a,以及注解 owner=cka-student。
节点也是对象,因此可以直接使用 label/annotate 命令。含斜杠的键可以原样使用。
使用 kubectl explain 提取字段说明
提取 Pod toleration 的 effect 字段说明,使用 kubectl explain,并保存到 /root/cka-basics/explain.txt。
explain 使用点号表示法追踪嵌套字段。请指定 Pod spec 的 toleration 数组中的该字段。
使用 dry-run 创建清单
通过 dry-run 生成 Deployment web(镜像 nginx:1.27,副本数 3)的清单,并保存到 /root/cka-basics/web.yaml。此步骤暂时不要应用。
在 kubectl create 系列命令后加入 --dry-run=client -o yaml,就能在不修改 API 的情况下只输出 YAML。副本数可以通过 create 选项指定。
应用并完成标签设置
将该清单应用到 cka-basics,为 Deployment 对象添加标签 tier=backend,然后确认 3/3 Ready。
直接应用上一步创建的文件。标签必须添加到 Deployment 对象本身,而不是 Pod 模板。Pod 达到 Ready 状态可能需要一点时间。