لینوکس ۳۰۵؛ شب ۵۱: Kubernetes و Helm؛ خواندن استقرار و رفع خرابی
فهرست نوشته
هدف این شب شناخت اجزای Kubernetes و نقش Helm در توزیع تعریف برنامه است. یک manifest کوچک را بررسی میکنیم و در صورت داشتن cluster آزمایشگاهی، rollout آن را میسنجیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 352.4 آزمون 305-300.
محیط: kubectl و Helm طبق مستندات release نصب شدهاند؛ اجرای واقعی فقط با kubeconfig و context متعلق به lab. برای این جلسه cluster عمومی پولی لازم نیست.
API server درخواست میگیرد، scheduler node مناسب انتخاب میکند، controller وضعیت مطلوب را پیگیری و kubelet با runtime سازگار CRI اجرا میکند. Pod واحد استقرار؛ Deployment مدیر replica/rollout؛ Service آدرس منطقی دسترسی به Podهاست. containerd/CRI-O میتوانند runtime باشند؛ وجود Docker CLI الزام cluster نیست.
فایل deployment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web305
spec:
replicas: 2
selector:
matchLabels: {app: web305}
template:
metadata:
labels: {app: web305}
spec:
securityContext:
runAsNonRoot: true
runAsUser: 10001
seccompProfile: {type: RuntimeDefault}
containers:
- name: web
image: python:3.13-alpine
command: ["python", "-m", "http.server", "8080", "--directory", "/tmp"]
ports: [{containerPort: 8080}]
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities: {drop: [ALL]}
resources:
requests: {cpu: 100m, memory: 32Mi}
limits: {cpu: 500m, memory: 128Mi}
readinessProbe:
httpGet: {path: /, port: 8080}
initialDelaySeconds: 3
periodSeconds: 5
kubectl config current-context
kubectl apply --dry-run=client -f deployment.yaml
dry-run client، schema/validation ممکن با setup محلی را بررسی میکند و شاهد اجرای scheduler یا سلامت برنامه نیست. برای اجرا، namespace جدا بساز، apply با -n همان namespace، سپس rollout status، get pods و describe را ببین. Service ClusterIP با selector app=web305 بساز و port-forward فقط loopback انجام بده.
Helm چه اضافه میکند؟#
helm create lab305-chart
helm lint lab305-chart
helm template lab305 lab305-chart > rendered.yaml
chart الگو و values، release استقرار مدیریتشدهٔ آن است. فایل rendered را پیش از install بررسی کن؛ template بهتنهایی شیء cluster ایجاد نمیکند. برای نصب/upgrade به namespace مشخص، values محدود و image digest نیاز داری؛ rollback revision، دادهٔ database را خودکار بازنمیگرداند.
OpenShift، Rancher و نام تاریخی Mesosphere DC/OS را در سطح نقش پلتفرم و مدیریت cluster بشناس؛ نصب همه برای این هدف لازم نیست.
بررسی و بازگشت: Pending، ImagePullBackOff و Running-but-not-ready را با evidence متفاوت توضیح بده. فقط منابع namespace آزمایشی یا release خودت را حذف کن.
منبع: Deployment ، CRI ، Helm .