هدف این شب شناخت اجزای 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 .