内部培训
02 第2周D8 Kubernetes

D8 作业:部署你的第一个服务

D8 作业:部署你的第一个服务

目标

  • 验证:能用自己账号把镜像部署到集群、挂上域名、滚一次版本、亲手定位一次故障; 并说清"自己的命名空间可以写、生产集群只读"这条边界。

场景

  • learn 教学集群,经 STARGATE(brac.oaiai.ai)SSH 登录后操作。
  • 全程只在你自己的命名空间 st-<你的用户名> 内增删改 —— 这是你的实验田。
  • 生产集群 prod 只读:本作业不涉及任何 prod 写操作(附加任务除外,同样只读)。

任务

任务 1:注册并上机

  • 按 STARGATE 站内手册「上手教程」:邀请码 → 注册 → 下载私钥(chmod 600)→ SSH 登录。
  • 验收命令:
kubectl get nodes          # 期望两行 Ready(dev-master / dev-worker-01)
kubectl get pods -n st-<你的用户名>

任务 2:建拉取凭据

  • 你的镜像是私有仓库里的,集群要拉它就得有凭据:
kubectl -n st-<你的用户名> create secret docker-registry regcred \
  --docker-server=registry.dev.oaiai.ai \
  --docker-username=<账号> --docker-password=<密码>    # 账号密码课上发放

任务 3:写清单并部署

  • 三件套写进一个 hello.yaml(Deployment + Service + Ingress):
    • image 用你 D7 推上去的 registry.dev.oaiai.ai/<你的用户名>/hello:v1
    • 没推成功或时间不够:保底用 nginx:alpine + 端口 80,先把流程跑通
    • imagePullSecrets: [{name: regcred}]
    • Ingress 的 host 只能是 <你的用户名>.dev.oaiai.ai
  • 应用并观察:
kubectl -n st-<你的用户名> apply -f hello.yaml
kubectl -n st-<你的用户名> get pods,svc,ingress
kubectl -n st-<你的用户名> rollout status deployment/hello --timeout=90s

任务 4:验收 —— 打开你自己的域名

  • 浏览器访问 http://<你的用户名>.dev.oaiai.ai,看到你自己的内容即成功(用 http,不要试 https)。
  • 命令行也可:curl http://<你的用户名>.dev.oaiai.ai/

任务 5:滚一次版本

  • 两个终端,一个盯着看、一个动手改,记录你观察到的变化:
# 终端 A
kubectl -n st-<你的用户名> get pods -w

# 终端 B
kubectl -n st-<你的用户名> scale deploy/hello --replicas=3
kubectl -n st-<你的用户名> rollout undo deploy/hello      # 回滚也试一次

任务 6:排障演练(自己造坑自己填)

  • 故意把镜像版本写错,观察状态并用 describe / logs 定位,再修好:
kubectl -n st-<你的用户名> set image deploy/hello web=registry.dev.oaiai.ai/<你>/hello:v999
kubectl -n st-<你的用户名> get pods
kubectl -n st-<你的用户名> describe pod <pod名> | tail -20
kubectl -n st-<你的用户名> rollout undo deploy/hello

任务 7(附加,即原只读排查)

  • 用只读命令看一遍生产集群,守住"只看不改":
kuse prod            # 或讲师指定环境
kubectl get nodes
kubectl get pods -A | head -30
kubectl get deploy -A | head -20
kubectl describe pod <某个Pod> -n <ns> | tail -20
  • 记录:节点数、异常 Pod(CrashLoopBackOff / Pending)、describe 事件说明了什么。

验收标准(讲师核验用)

  • 任务 1:kubectl get nodes 两行 Ready
  • 任务 4:<你的用户名>.dev.oaiai.ai 能打开自己部署的内容(截图)
  • 能说清 Service 的 selector 与 Pod 的 labels 的关系,以及 get endpoints 为空意味着什么
  • 任务 5:记录滚动更新中"新 Pod 起来后旧 Pod 才被摘"的顺序
  • 任务 6:能说出 ImagePullBackOff 的两个常见原因(镜像名错 / 缺拉取凭据)
  • 红线:全程未对 prod 做任何写操作;域名只用了 xxx.dev.oaiai.ai

提交方式

  • 结果放 docs/training/学员/<姓名>/D8/,按 D6 的 Git 规范提交 PR,提交信息中文,如:D8 作业:部署第一个服务(姓名)。

参考

  • 课件(网页版):https://learn.docker.oaiai.ai/d8-kubernetes.html
  • STARGATE 站内手册:上手教程 / 小实验:给 nginx 配域名 / 我的命名空间 / 常见状态与排查
  • 课程.md(讲师讲义)与 课件.md(指路文件)

On this page