Kubernetes 101، بخش هفتم، مشاغل و کرانجاب ها
در مقاله قبلی ما، یاد گرفتیم که چگونه DaemonSets میتواند به طور مؤثر دادهها را از گرههای Kubernetes جمعآوری کند و به دادهها اجازه ساختاردهی و ارسال به ابزار مناسب را بدهد.
در این پست، به موضوع اجرای یک شغل در Kubernetes از طریق استفاده از Kubernetes Jobs خواهیم پرداخت.
علاوه بر این، یاد خواهیم گرفت که چگونه Kubernetes برنامه ریزی کارها را به طور منظم با استفاده از Cronjobs اجرا می کند.
کار
اشیاء شغلی Kubernetes a کنترل کننده کار که یک Pod ایجاد می کند از مشخصات ارائه شده، و آن را قادر می سازد تا یک دستور دلخواه را اجرا کند.
با این حال، فایل YAML به شکل زیر است:
kind: Job
apiVersion: batch/v1
metadata:
name: sleeper
spec:
template:
spec:
restartPolicy: Never
containers:
- name: sleeper
image: debian
command: ["sleep", "15"]
ما می توانیم آن کار را بررسی کنیم sleeper
ایجاد شد:
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
sleeper 0/1 5s 5s
و یک Pod از شغل ایجاد شده در بالا شروع شد:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleeper-8mmtg 1/1 Running 0 8s
بعد از اینکه Pod با موفقیت تمام شد، به قسمت می رود Completed
وضعیت:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleeper-8mmtg 0/1 Completed 0 35s
و Job completions به روز می شود 1/1
:
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
sleeper 1/1 35s 35s
در زیر یک نمایش بصری از نحوه مدیریت جابز توسط Kubernetes وجود دارد که توسط یک Pod پشتیبانی می شود که دستور ارائه شده را اجرا می کند:
با این حال، نادر نیست که مجبور شویم به طور منظم یک شغل را اجرا کنیم.
در سیستمهای شبه یونیکس، برنامهای به نام crontab امکان اجرای منظم را با یک دستور برای زمانبندی، یک فرمان دلخواه را فراهم میکند. Kubernetes به Jobs اجازه می دهد تا به همان شیوه و با استفاده از the برنامه ریزی شود نحو crontab.
با Kubernetes CronJobs آشنا شوید.
CronJob
به طور خلاصه، یک Cronjob اراده به طور منظم یک شغل جدید را شروع کنید، که از آن یک Pod جدید شروع خواهد شد.
در اینجا تصویری از نحوه عملکرد CronJobs در Kubernetes آورده شده است:
در زیر نمایش YAML آن آمده است:
kind: CronJob
apiVersion: batch/v1
metadata:
name: sleeper
spec:
schedule: "*/1 * * * *"
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
containers:
- name: sleeper
image: debian
command: ["sleep", "15"]
- در
schedule
ما دستور crontab را ارائه می دهیم - را
jobTemplate
دقیقا همین است مشخصات شغلی که یک Pod را اجرا خواهد کرد
بیایید تأیید کنیم که Kubernetes یک شی Cronjob ایجاد کرده است:
$ kubectl get cronjobs
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
sleeper */1 * * * * False 0 52s 9m29s
از CronJob، یک شغل ایجاد شد:
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
sleeper-28046804 0/1 22s 35s
و یک Pod راه اندازی شد:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleeper-28046805-hqkwb 1/1 Running 0 40s
بعد از چند دقیقه، میبینیم که CronJob 3 شغل ایجاد کرده است که اتفاقاً تعداد پیشفرضهای شغلی است که Kubernetes در خوشه نگه میدارد (ما میتوانیم آن تعداد را در صورت نیاز تغییر دهیم. successfulJobsHistoryLimit
):
$ kubectl get jobs
NAME COMPLETIONS DURATION AGE
sleeper-28046806 1/1 21s 3m10s
sleeper-28046807 1/1 21s 2m10s
sleeper-28046808 1/1 21s 70s
بنابراین، هر Job یک Pod جدید را شروع می کند:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
sleeper-28046808-szdw7 0/1 Completed 0 2m26s
sleeper-28046809-fhxk8 0/1 Completed 0 86s
sleeper-28046810-2gvds 0/1 Completed 0 26s
بسته بندی
این پست نحوه اجرای دستورات دلخواه را با استفاده از شی Kubernetes Job نشان می دهد.
علاوه بر این، ما آموختهایم که اشیاء Kubernetes CronJob اجازه میدهند تا زمانبندی Jobs به طور منظم اجرا شود.
تا اینجای کار به این موضوع پرداختیم اشیاء بار کاری اولیه Kubernetes، یعنی ReplicaSet، Deployment، StatefulSet، DaemonSet، Job و CronJob.
در پستهای بعدی، چگونگی ارتباط این اشیاء با یکدیگر را در داخل خوشه و در عین حال درک درستی از شبکه Kubernetes را بررسی خواهیم کرد.
این پست با کمک ChatGPT نوشته شده است، که به مقداری “چشم شیرین” در گرامر کمک کرد.