برنامه نویسی

دوره کامل CKA 2024: روز 12/40 Daemonsets, Job and Cronjob در Kubernetes

Summarize this content to 400 words in Persian Lang
از آنجایی که این پست تماماً در مورد استقرار یک frontend Nginx و جمع‌آوری معیارها از خوشه ما است، اجازه دهید با یک مرور مختصر از آنچه در حال ساخت و ابزارهای مرتبط است شروع کنیم.

توجه داشته باشید: در ابتدا قصد نداشتم مقدمه دیگری را وارد کنم، اما با توجه به پیچیدگی راه‌اندازی امروز، یک جمع‌بندی تضمین می‌کند که همه قبل از غواصی درک کاملی دارند.

بررسی اجمالی پروژه

در این آموزش، ما یک سرور ساده Nginx را به کار می‌گیریم که به عنوان فرانت اند ما عمل می‌کند. این تنظیمات صفحه اصلی پیش فرض Nginx را ارائه می دهد که پس از اجرا می توانید از طریق مرورگر خود به آن دسترسی داشته باشید. ما همچنین یک سیستم بررسی سلامت را با استفاده از CronJob پیکربندی می‌کنیم، که به صورت دوره‌ای بررسی می‌کند که آیا سرور Nginx ما فعال است و یک کد وضعیت را به عنوان تأیید برمی‌گرداند.

علاوه بر این، ما یک را راه اندازی خواهیم کرد DaemonSet اجرا کردن a صادر کننده گره در هر گره در خوشه ما. این صادرکننده گره معیارها را جمع‌آوری می‌کند و به ما اطلاعاتی در مورد عملکرد و استفاده از منابع برنامه و خوشه‌مان می‌دهد.

مفاهیم کلیدی

برای اطمینان از اینکه همه ما در یک صفحه هستیم، در اینجا جزئیاتی از اجزای اصلی که با آنها کار می کنیم آورده شده است:

Nginx: Nginx یک وب سرور است که می تواند محتوای ثابت (مانند HTML) را ارائه دهد یا به عنوان یک پروکسی معکوس یا متعادل کننده بار پیکربندی شود. در اینجا، ما از آن برای ارائه صفحه اصلی پیش‌فرض Nginx استفاده می‌کنیم، که به‌عنوان پیش‌فرض برنامه ما عمل می‌کند.
CronJob: در Kubernetes، a CronJob به شما امکان می دهد یک کار را در فواصل زمانی مشخص اجرا کنید، درست مانند کارهای برنامه ریزی شده. در اینجا، ما از CronJob برای بررسی منظم سلامت سرور Nginx خود استفاده می کنیم. اگر سرور Nginx فعال و فعال باشد، کد وضعیتی را برمی‌گرداند که دسترسی به آن را تأیید می‌کند.
DaemonSet: A DaemonSet تضمین می کند که یک پاد خاص روی هر گره در خوشه Kubernetes شما اجرا می شود. در این تنظیمات، ما از آن برای اجرای a استفاده می کنیم صادر کننده گره در هر گره، معیارهایی مانند استفاده از پردازنده و حافظه جمع‌آوری می‌شود که برای نظارت بر سلامت برنامه و مصرف منابع بسیار مهم است.

با در نظر گرفتن این ساختار، فایل های YAML مورد نیاز برای راه اندازی هر جزء را بررسی می کنیم.

پیش نیازها

قبل از شروع، مطمئن شوید که یک فایل پیکربندی برای ایجاد خوشه Kubernetes دارید. برای دستورالعمل‌های دقیق در مورد راه‌اندازی خوشه Kind خود، به راهنمای Kind Quick Start مراجعه کنید.

پیکربندی خوشه (config.yml)

یک فایل به نام ایجاد کنید config.yml با محتوای زیر برای تعریف خوشه مهربان خود:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cka-cluster
nodes:
– role: control-plane
extraPortMappings:
– containerPort: 30001
hostPort: 30001
listenAddress: “0.0.0.0”
protocol: tcp
– role: worker
– role: worker

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای ایجاد کلاستر دستور زیر را اجرا کنید:

kind create cluster –name kind-cka-cluster –config config.yml

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای تنظیم متن روی خوشه جدید از دستور زیر استفاده کنید:

kubectl config use-context kind-kind-cka-cluster

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وظایف

در اینجا بخش اصلاح شده با تمرکز بر کاری است که انجام می دهید و خواننده را تشویق می کند تا اسناد را بیشتر بررسی کند:

یک DaemonSet ایجاد کنید

وظیفه در اینجا ایجاد یک DaemonSet در Kubernetes است. یک DaemonSet تضمین می کند که تمام گره ها در خوشه یک کپی از pod مشخص شده را اجرا می کنند. برای این مثال، من صادرکننده گره Prometheus را راه اندازی می کنم، که امکان نظارت بر معیارهای هر گره را فراهم می کند. در حالی که من این را بر اساس ویدیو نشان دادم، خواننده را تشویق می‌کنم که از اسناد Kubernetes دیدن کند تا اطلاعات بیشتری در مورد DaemonSets و پیکربندی‌های آنها برای درک عمیق‌تر مطالعه کند.

راه حل

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: prometheus-node-exporter
namespace: kube-system
labels:
app: prometheus-node-exporter
spec:
selector:
matchLabels:
app: prometheus-node-exporter
template:
metadata:
name: prometheus-node-exporter
labels:
app: prometheus-node-exporter
spec:
containers:
– image: prom/node-exporter:v0.16.0
imagePullPolicy: IfNotPresent
name: prometheus-node-exporter
ports:
– name: prom-node-exp
#^ must be an IANA_SVC_NAME (at most 15 characters, ..)
containerPort: 9100
hostPort: 9100
tolerations:
– key: “node-role.kubernetes.io/master”
effect: “NoSchedule”
hostNetwork: true
hostPID: true
hostIPC: true
restartPolicy: Always

apiVersion: v1
kind: Service
metadata:
annotations:
prometheus.io/scrape: ‘true’
prometheus.io/app-metrics: ‘true’
prometheus.io/app-metrics-path: ‘/metrics’
name: prometheus-node-exporter
namespace: kube-system
labels:
app: prometheus-node-exporter
spec:
clusterIP: None
ports:
– name: prometheus-node-exporter
port: 9100
protocol: TCP
selector:
app: prometheus-node-exporter
type: ClusterIP

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک CronJob ایجاد کنید

این کار شامل ایجاد یک CronJob است که هر 5 دقیقه اجرا می شود. من ترجیح دادم آموزش ویدیویی را در اینجا دنبال نکنم. این CronJob با بازگرداندن کد وضعیت 200 و محتوای HTML در صورت موفقیت آمیز بودن برنامه را بررسی می کند.

راه حل

apiVersion: batch/v1
kind: CronJob
metadata:
name: nginx-app-health-check
spec:
schedule: “*/5 * * * *” # Runs every 5 minutes
jobTemplate:
spec:
template:
spec:
containers:
– name: check-web-server
image: appropriate/curl
command:
– /bin/sh
– -c
– |
status_code=$(curl -s -o /dev/null -w ‘%{http_code}’ http://nginx-app-svc.default.svc.cluster.local)
homepage_content=$(curl -s http://nginx-app-svc.default.svc.cluster.local)
echo “Status Code: $status_code”
echo “Homepage Content: $homepage_content”
restartPolicy: OnFailure

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این پیکربندی تضمین می کند که CronJob هر 5 دقیقه یکبار اجرا می شود تا سلامت برنامه Nginx را بررسی کند. به من اطلاع دهید اگر هر گونه توضیح اضافی در اینجا کمک می کند!

قرار دادن آن همه با هم

در این بخش، منابع Kubernetes خود را ترکیب می کنیم تا برنامه Nginx را به طور موثر اجرا کنیم. در زیر تنظیمات برای هر دو آمده است استقرار و خدمات.

استقرار Nginx

این استقرار تضمین می کند که ما 3 کپی از برنامه Nginx خود را در حال اجرا داریم:

apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: nginx-app
spec:
replicas: 3
selector:
matchLabels:
app: nginx-app
template:
metadata:
labels:
app: nginx-app
spec:
containers:
– name: nginx
image: nginx:1.23.4-alpine
ports:
– containerPort: 80

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سرویس Nginx

سرویس زیر برنامه Nginx را نمایش می دهد و به ترافیک خارجی اجازه می دهد از طریق یک پورت گره مشخص به آن دسترسی داشته باشد:

apiVersion: v1
kind: Service
metadata:
name: nginx-app-svc
spec:
selector:
app: nginx-app
ports:
– protocol: TCP
port: 80
targetPort: 80
nodePort: 30001
type: NodePort

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

گوچاهای معمولی

سازگاری برچسب: اطمینان حاصل کنید که برچسب های موجود در Deployment and Service به درستی مطابقت دارند. در این مورد، هر دو منبع استفاده می کنند app: nginx-app تا اطمینان حاصل شود که سرویس می تواند ترافیک را به پادهای مناسب هدایت کند.
پیکربندی NodePort: هنگام استفاده NodePort، مطمئن شوید که پورت گره مشخص شده (به عنوان مثال، 30001) با سرویس های دیگر در حال اجرا در همان گره تداخل نداشته باشد.
تعداد ماکت: تعداد کپی در Deployment بر در دسترس بودن تأثیر می گذارد. در این مثال، برای اطمینان از در دسترس بودن بالای برنامه Nginx، 3 کپی مشخص کردیم.
بندر کانتینر: برای اطمینان از مسیریابی مناسب ترافیک، تأیید کنید که پورت کانتینر در Deployment با پورت هدف مشخص شده در سرویس مطابقت دارد.

افکار پایانی …

امروز، من روی ساخت کامپوننت ها در Kubernetes، به ویژه DaemonSets، Jobs و CronJobs تمرکز کردم. در اینجا نکات کلیدی من آمده است:

آشنایی با DaemonSets: DaemonSets اطمینان حاصل می کند که یک pod خاص روی همه یا گره های انتخاب شده در یک خوشه Kubernetes اجرا می شود. این به ویژه برای نظارت و ثبت برنامه‌هایی که باید در هر گره مستقر شوند مفید است.
استفاده از Jobs و CronJobs: Jobs برای اجرای وظایفی که تا پایان کامل می شوند عالی هستند، در حالی که CronJobs امکان زمان بندی کارها را در بازه های زمانی مشخص می دهد. این عملکرد برای خودکارسازی کارهای معمول، مانند بررسی سلامت یا تهیه نسخه پشتیبان ضروری است.
اهرم اسناد: من به اهمیت اسناد Kubernetes به عنوان یک منبع حیاتی در هنگام ساخت برنامه‌ها پی بردم. دسترسی به راهنماها و مثال‌های جامع، که توانایی من در عیب‌یابی و پیاده‌سازی مؤثر ویژگی‌ها را افزایش می‌دهد، توانمند است.
یادگیری عمیق از طریق تمرین عملی: درگیر شدن در ساختن برنامه های کاربردی از ابتدا کاملاً با تمایل من برای یادگیری عمیق هماهنگ است. من متوجه می شوم که مبارزه با چالش ها به من کمک می کند تا درک قوی تری از مفاهیم پیدا کنم و دانش و مهارت هایم را تقویت کنم.
آزمایش و اکتشاف: ابتکار عمل برای کشف فراتر از آموزش ها، حس مالکیت بر فرآیند یادگیری را تقویت می کند. ایجاد راه‌حل‌ها به‌طور مستقل و تقویت درک من از Kubernetes، رضایت بخش است.

برچسب ها و ذکرها

از آنجایی که این پست تماماً در مورد استقرار یک frontend Nginx و جمع‌آوری معیارها از خوشه ما است، اجازه دهید با یک مرور مختصر از آنچه در حال ساخت و ابزارهای مرتبط است شروع کنیم.

توجه داشته باشید: در ابتدا قصد نداشتم مقدمه دیگری را وارد کنم، اما با توجه به پیچیدگی راه‌اندازی امروز، یک جمع‌بندی تضمین می‌کند که همه قبل از غواصی درک کاملی دارند.

بررسی اجمالی پروژه

در این آموزش، ما یک سرور ساده Nginx را به کار می‌گیریم که به عنوان فرانت اند ما عمل می‌کند. این تنظیمات صفحه اصلی پیش فرض Nginx را ارائه می دهد که پس از اجرا می توانید از طریق مرورگر خود به آن دسترسی داشته باشید. ما همچنین یک سیستم بررسی سلامت را با استفاده از CronJob پیکربندی می‌کنیم، که به صورت دوره‌ای بررسی می‌کند که آیا سرور Nginx ما فعال است و یک کد وضعیت را به عنوان تأیید برمی‌گرداند.

علاوه بر این، ما یک را راه اندازی خواهیم کرد DaemonSet اجرا کردن a صادر کننده گره در هر گره در خوشه ما. این صادرکننده گره معیارها را جمع‌آوری می‌کند و به ما اطلاعاتی در مورد عملکرد و استفاده از منابع برنامه و خوشه‌مان می‌دهد.

مفاهیم کلیدی

برای اطمینان از اینکه همه ما در یک صفحه هستیم، در اینجا جزئیاتی از اجزای اصلی که با آنها کار می کنیم آورده شده است:

  • Nginx: Nginx یک وب سرور است که می تواند محتوای ثابت (مانند HTML) را ارائه دهد یا به عنوان یک پروکسی معکوس یا متعادل کننده بار پیکربندی شود. در اینجا، ما از آن برای ارائه صفحه اصلی پیش‌فرض Nginx استفاده می‌کنیم، که به‌عنوان پیش‌فرض برنامه ما عمل می‌کند.

  • CronJob: در Kubernetes، a CronJob به شما امکان می دهد یک کار را در فواصل زمانی مشخص اجرا کنید، درست مانند کارهای برنامه ریزی شده. در اینجا، ما از CronJob برای بررسی منظم سلامت سرور Nginx خود استفاده می کنیم. اگر سرور Nginx فعال و فعال باشد، کد وضعیتی را برمی‌گرداند که دسترسی به آن را تأیید می‌کند.

  • DaemonSet: A DaemonSet تضمین می کند که یک پاد خاص روی هر گره در خوشه Kubernetes شما اجرا می شود. در این تنظیمات، ما از آن برای اجرای a استفاده می کنیم صادر کننده گره در هر گره، معیارهایی مانند استفاده از پردازنده و حافظه جمع‌آوری می‌شود که برای نظارت بر سلامت برنامه و مصرف منابع بسیار مهم است.

با در نظر گرفتن این ساختار، فایل های YAML مورد نیاز برای راه اندازی هر جزء را بررسی می کنیم.


پیش نیازها

قبل از شروع، مطمئن شوید که یک فایل پیکربندی برای ایجاد خوشه Kubernetes دارید. برای دستورالعمل‌های دقیق در مورد راه‌اندازی خوشه Kind خود، به راهنمای Kind Quick Start مراجعه کنید.

پیکربندی خوشه (config.yml)

یک فایل به نام ایجاد کنید config.yml با محتوای زیر برای تعریف خوشه مهربان خود:

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cka-cluster  
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30001  
    hostPort: 30001
    listenAddress: "0.0.0.0" 
    protocol: tcp
- role: worker  
- role: worker 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای ایجاد کلاستر دستور زیر را اجرا کنید:

kind create cluster --name kind-cka-cluster --config config.yml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای تنظیم متن روی خوشه جدید از دستور زیر استفاده کنید:

kubectl config use-context kind-kind-cka-cluster
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

وظایف

در اینجا بخش اصلاح شده با تمرکز بر کاری است که انجام می دهید و خواننده را تشویق می کند تا اسناد را بیشتر بررسی کند:


یک DaemonSet ایجاد کنید

  • وظیفه در اینجا ایجاد یک DaemonSet در Kubernetes است. یک DaemonSet تضمین می کند که تمام گره ها در خوشه یک کپی از pod مشخص شده را اجرا می کنند. برای این مثال، من صادرکننده گره Prometheus را راه اندازی می کنم، که امکان نظارت بر معیارهای هر گره را فراهم می کند. در حالی که من این را بر اساس ویدیو نشان دادم، خواننده را تشویق می‌کنم که از اسناد Kubernetes دیدن کند تا اطلاعات بیشتری در مورد DaemonSets و پیکربندی‌های آنها برای درک عمیق‌تر مطالعه کند.

راه حل

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: prometheus-node-exporter
  namespace: kube-system
  labels:
    app: prometheus-node-exporter
spec:
  selector:
    matchLabels:
      app: prometheus-node-exporter
  template:
    metadata:
      name: prometheus-node-exporter
      labels:
        app: prometheus-node-exporter
    spec:
      containers:
      - image: prom/node-exporter:v0.16.0
        imagePullPolicy: IfNotPresent
        name: prometheus-node-exporter
        ports:
        - name: prom-node-exp
          #^ must be an IANA_SVC_NAME (at most 15 characters, ..)
          containerPort: 9100
          hostPort: 9100
      tolerations:
      - key: "node-role.kubernetes.io/master"
        effect: "NoSchedule"
      hostNetwork: true
      hostPID: true
      hostIPC: true
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/app-metrics: 'true'
    prometheus.io/app-metrics-path: '/metrics'
  name: prometheus-node-exporter
  namespace: kube-system
  labels:
    app: prometheus-node-exporter
spec:
  clusterIP: None
  ports:
    - name: prometheus-node-exporter
      port: 9100
      protocol: TCP
  selector:
    app: prometheus-node-exporter
  type: ClusterIP
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


یک CronJob ایجاد کنید

  • این کار شامل ایجاد یک CronJob است که هر 5 دقیقه اجرا می شود. من ترجیح دادم آموزش ویدیویی را در اینجا دنبال نکنم. این CronJob با بازگرداندن کد وضعیت 200 و محتوای HTML در صورت موفقیت آمیز بودن برنامه را بررسی می کند.

راه حل

apiVersion: batch/v1
kind: CronJob
metadata:
  name: nginx-app-health-check
spec:
  schedule: "*/5 * * * *"  # Runs every 5 minutes
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: check-web-server
              image: appropriate/curl
              command:
                - /bin/sh
                - -c
                - |
                  status_code=$(curl -s -o /dev/null -w '%{http_code}' http://nginx-app-svc.default.svc.cluster.local)
                  homepage_content=$(curl -s http://nginx-app-svc.default.svc.cluster.local)
                  echo "Status Code: $status_code"
                  echo "Homepage Content: $homepage_content"
          restartPolicy: OnFailure
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این پیکربندی تضمین می کند که CronJob هر 5 دقیقه یکبار اجرا می شود تا سلامت برنامه Nginx را بررسی کند. به من اطلاع دهید اگر هر گونه توضیح اضافی در اینجا کمک می کند!


قرار دادن آن همه با هم

در این بخش، منابع Kubernetes خود را ترکیب می کنیم تا برنامه Nginx را به طور موثر اجرا کنیم. در زیر تنظیمات برای هر دو آمده است استقرار و خدمات.

استقرار Nginx

این استقرار تضمین می کند که ما 3 کپی از برنامه Nginx خود را در حال اجرا داریم:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp
  labels:
    app: nginx-app
spec:
  replicas: 3  
  selector:
    matchLabels:
      app: nginx-app
  template:
    metadata:
      labels:
        app: nginx-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.23.4-alpine
        ports:
        - containerPort: 80
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سرویس Nginx

سرویس زیر برنامه Nginx را نمایش می دهد و به ترافیک خارجی اجازه می دهد از طریق یک پورت گره مشخص به آن دسترسی داشته باشد:

apiVersion: v1
kind: Service
metadata:
  name: nginx-app-svc
spec:
  selector:
    app: nginx-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30001
  type: NodePort
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

گوچاهای معمولی

  1. سازگاری برچسب: اطمینان حاصل کنید که برچسب های موجود در Deployment and Service به درستی مطابقت دارند. در این مورد، هر دو منبع استفاده می کنند app: nginx-app تا اطمینان حاصل شود که سرویس می تواند ترافیک را به پادهای مناسب هدایت کند.

  2. پیکربندی NodePort: هنگام استفاده NodePort، مطمئن شوید که پورت گره مشخص شده (به عنوان مثال، 30001) با سرویس های دیگر در حال اجرا در همان گره تداخل نداشته باشد.

  3. تعداد ماکت: تعداد کپی در Deployment بر در دسترس بودن تأثیر می گذارد. در این مثال، برای اطمینان از در دسترس بودن بالای برنامه Nginx، 3 کپی مشخص کردیم.

  4. بندر کانتینر: برای اطمینان از مسیریابی مناسب ترافیک، تأیید کنید که پورت کانتینر در Deployment با پورت هدف مشخص شده در سرویس مطابقت دارد.


افکار پایانی …

امروز، من روی ساخت کامپوننت ها در Kubernetes، به ویژه DaemonSets، Jobs و CronJobs تمرکز کردم. در اینجا نکات کلیدی من آمده است:

  1. آشنایی با DaemonSets: DaemonSets اطمینان حاصل می کند که یک pod خاص روی همه یا گره های انتخاب شده در یک خوشه Kubernetes اجرا می شود. این به ویژه برای نظارت و ثبت برنامه‌هایی که باید در هر گره مستقر شوند مفید است.

  2. استفاده از Jobs و CronJobs: Jobs برای اجرای وظایفی که تا پایان کامل می شوند عالی هستند، در حالی که CronJobs امکان زمان بندی کارها را در بازه های زمانی مشخص می دهد. این عملکرد برای خودکارسازی کارهای معمول، مانند بررسی سلامت یا تهیه نسخه پشتیبان ضروری است.

  3. اهرم اسناد: من به اهمیت اسناد Kubernetes به عنوان یک منبع حیاتی در هنگام ساخت برنامه‌ها پی بردم. دسترسی به راهنماها و مثال‌های جامع، که توانایی من در عیب‌یابی و پیاده‌سازی مؤثر ویژگی‌ها را افزایش می‌دهد، توانمند است.

  4. یادگیری عمیق از طریق تمرین عملی: درگیر شدن در ساختن برنامه های کاربردی از ابتدا کاملاً با تمایل من برای یادگیری عمیق هماهنگ است. من متوجه می شوم که مبارزه با چالش ها به من کمک می کند تا درک قوی تری از مفاهیم پیدا کنم و دانش و مهارت هایم را تقویت کنم.

  5. آزمایش و اکتشاف: ابتکار عمل برای کشف فراتر از آموزش ها، حس مالکیت بر فرآیند یادگیری را تقویت می کند. ایجاد راه‌حل‌ها به‌طور مستقل و تقویت درک من از Kubernetes، رضایت بخش است.


برچسب ها و ذکرها

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا