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(指路文件)