示例实践 · 以下是用于栏目展示的演示文章与配置。没有声称已经在你的集群执行;可在自己的测试环境逐步验证。
一次小小的部署,也可以有完整的来路。把配置、验证和收尾放在同一篇记录里,下一次遇到相似的问题,就能从一个清楚的位置重新开始。
一个足够小的起点
准备可使用 kubectl 的测试集群,将以下内容保存为 fieldnotes-demo.yaml。镜像使用 nginx 的 stable 标签;需要严格复现时,请在自己的记录中固定经过验证的镜像摘要。
apiVersion: apps/v1
kind: Deployment
metadata:
name: fieldnotes-demo
spec:
replicas: 2
selector:
matchLabels:
app: fieldnotes-demo
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: 1
template:
metadata:
labels:
app: fieldnotes-demo
spec:
containers:
- name: web
image: nginx:stable
ports:
- containerPort: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 2
periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
name: fieldnotes-demo
spec:
selector:
app: fieldnotes-demo
ports:
- port: 80
targetPort: 80
把验证写成步骤
kubectl apply -f fieldnotes-demo.yaml
kubectl rollout status deployment/fieldnotes-demo
kubectl get pods -l app=fieldnotes-demo -o wide
kubectl port-forward service/fieldnotes-demo 8080:80
保持端口转发运行,在另一个终端请求 http://127.0.0.1:8080。预期可以访问 Nginx 默认页面;实际结果以自己的环境为准。
让状态可以被解释
就绪探针用来判断容器是否适合接收流量;就绪检查失败,不等于进程会被重启。记录 Pod 状态、事件和日志,通常比只写一句“部署成功”更有用。
kubectl describe deployment fieldnotes-demo
kubectl get events --sort-by=.metadata.creationTimestamp
kubectl logs -l app=fieldnotes-demo --tail=30
最后,收好这次尝试
记下 Kubernetes 版本、镜像摘要、配置变化和遇到的问题。确认测试结束后,可使用下面的命令移除本文创建的演示资源:
kubectl delete -f fieldnotes-demo.yaml
探针行为参考 Kubernetes 官方文档。实践不必宏大,能够清楚地复现,就已经值得留下。