LabHub
学习 学习路径 课程

CKAD — Kubernetes 应用开发者

亲眼看应用真实活着的样子

在 LabHub 中继续学习

本实验在应用会真实运行的集群中进行

VM 中运行着真正的 k3s。kubelet 会真正执行探针,Job 会真正完成,ConfigMap 也会真正挂载。

CKAD 课程其他实验使用的模拟集群中,**这些行为一个都不会发生。**即使配置探针也不会运行,创建 Job 也不会完成。

环境首次启动大约需要 2 分钟。

目标

通过实际行为验证三类探针、Job 与 CronJob、QoS 以及配置注入。

为什么重要

CKAD 中常见的错误并非语法问题,而是对行为差异理解不足。

步骤

所有资源都创建在 ckad 命名空间中。

  1. slow-start——为启动约需 20 秒的容器同时配置较短的 livenessProbestartupProbe,并将其不发生重启即可就绪的结果保存到 /root/ckad/startup.txt
  2. 创建 api Deployment(副本数 3)和 Service,但让其中一个 Pod 的 readiness 失败,并将它从 Endpoint 中移除的结果保存到 /root/ckad/endpoints.txt
  3. 创建 batch Job(completions: 3,指定 parallelism),并将其实际完成的结果保存到 /root/ckad/job.txt
  4. doomed Job 耗尽 backoffLimit 并进入 Failed,将结果保存到 /root/ckad/backoff.txt
  5. 创建 tick CronJob,使其实际运行至少一次,并将结果保存到 /root/ckad/cronjob.txt。同时设置 concurrencyPolicy
  6. 使用 qos-guaranteedqos-burstableqos-besteffort 三个 Pod 创建三种 QoS 等级,并将结果保存到 /root/ckad/qos.txt
  7. 使用 cfg-pod 同时以卷和环境变量两种方式注入 ConfigMap,并将它们在 Pod 内的呈现方式保存到 /root/ckad/config.txt
  8. /root/ckad/report.md 中写入 startup_restarts=job_completions=evicted_first= 三行及其说明。

参考

启动缓慢时

slow-start 中启动约需 20 秒的容器同时配置较短的 livenessProbestartupProbe,并将其不发生重启即可就绪的结果保存到 /root/ckad/startup.txt

只配置较短的 liveness 时,应用会在完全启动前被终止。startupProbe 会推迟该检查。

未就绪的 Pod 会被移除

创建 api Deployment(副本数 3)和 Service,但让其中一个 Pod 的 readiness 失败,并将它从 Endpoint 中移除的结果保存到 /root/ckad/endpoints.txt

让 ReplicaSet 中仅有一个 Pod 的 readiness 失败,然后查看 EndpointSlice。

completions 与 parallelism

创建 batch Job(completions: 3,指定 parallelism),并将其实际完成的结果保存到 /root/ckad/job.txt

completions 表示需要成功多少次,parallelism 表示同时运行多少个。

Job 何时放弃

doomed Job 耗尽 backoffLimit 并进入 Failed,将结果保存到 /root/ckad/backoff.txt

在按 backoffLimit 重试后,会添加 Failed 条件。将该值设小,避免等待过久。

执行发生重叠时

创建 tick CronJob,使其实际运行至少一次,并将结果保存到 /root/ckad/cronjob.txt。同时设置 concurrencyPolicy

使用 */1 * * * * 使其每分钟运行一次,并等待至少执行一次。同时设置 concurrencyPolicy

资源不足时谁会最先被驱逐

使用 qos-guaranteedqos-burstableqos-besteffort 三个 Pod 创建三种 QoS 等级,并将结果保存到 /root/ckad/qos.txt

QoS 不能直接指定,而是由 requests/limits 的组合决定。

卷与环境变量有所不同

使用 cfg-pod 同时以卷和环境变量两种方式注入 ConfigMap,并将它们在 Pod 内的呈现方式保存到 /root/ckad/config.txt

用两种方式注入同一个 ConfigMap,并比较它们在 Pod 内的呈现方式。

总结学到了什么

/root/ckad/report.md 中写入 startup_restarts=job_completions=evicted_first= 三行及其说明。

写入 startup_restarts=job_completions=evicted_first= 三行及其说明。