به سوی کوبرنتیز و فراتر از آن: کار عملی با پاد


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

برای این نوشته فرض شده شما قسمت قبلی رو خوندید و همچنین یه کلاستر آماده هم دارید. علاوه بر این لازمه که kubectl رو هم نصب کرده باشید. من خودم تصمیم گرفتم از سایت katacoda.com استفاده کنم که یه سایت آموزشیه و توسط خود سایت kubernetes.io هم پیشنهاد شده. البته فیلترشکن میخواد ولی راحت‌تر از بالا آوردن یه کلاستره. در نهایت داکر هم طبیعتا باید بدونید.

دوباره به اون منیفست قسمت قبل نگاه کنیم:

apiVersion: v1 
kind: Pod
metadata:   
    name: frontend-web-server   
    labels:     
        app: front 
spec:   
    containers:    
         - name: webserver       
           image: nginx       
           ports:         
              - name: 'http'           
                containerPort: 80            
                protocol: 'TCP'

این رو در فایلی به نام pod.yaml ذخیره می‌کنم. حالا بیاید این رو روی کلاستر ایجاد کنیم:

kubectl apply -f pod.yaml

برای استفاده از kubectl میشه بعدش apply رو نوشت و خودش میره و اون چیزی که تو فایل هست رو ایجاد میکنه. هم‌چنین اگه بخواید یه تغییر ایجاد کنید هم apply خودش تشخیص میده. این رو بعدا می‌بینیم. خروجی رو توی تصویر زیر می‌بینید:

حالا میخوایم ببینیم آیا پاد ایجاد شده یا نه. از دستور زیر استفاده می‌کنیم:‌

kubectl get pods

اگه حال نداشتید میتونید به جای pods بنویسید pod یا حتی po. اینم از خروجی:

مهم‌ترین بخش برای ما STATUS است که خدا رو شکر Running هست.

میتونید جزئیات بیشتری هم ببینید با این دستور:‌

kubectl get pods -o wide

یا حتی توضیحات بیشتر پاد:

kubectl describe pod frontend-web-server

و در آخر لاگ‌هایی که برنامه‌ی توی پاد تولید میکنه:

kubectl logs frontend-web-server

دقت کنید که اینجا لازم نیست عبارت pod رو بنویسید. چون لاگ فقط برای پاد وجود داره.

الان میخوام یه تغییری توی فایل بدم. مثلا تصویر رو از nginx به ubuntu تغییر بدم. دوباره دستور اولی رو میزنم:

دیدید خودش به روز رسانی رو انجام میده.

حالا هم که کارمون تموم شده باهاش حذفش می‌کنیم. برای این کار میتونیم دو کار انجام بدیم:

kubectl delete pod frontend-web-server

یا

kubectl delete -f pod.yaml

تو تصویر زیر خروجی رو می‌بینید:

حالا میخوام یه قابلیت دیگه رو توضیح بدم. میتونیم به کوبرنتیز بگیم این کانتینر ما حداقل فلان قدر حافظه و cpu میخواد یا حداکثر این قدر میخواد. برای این کار از requests و limits استفاده می‌کنیم و فایل به این شکل تغییر میکنه:

apiVersion: v1 
kind: Pod 
metadata: 
       name: frontend-web-server 
       labels: 
             app: front  
spec: 
       containers: 
                - name: webserver 
                  image: nginx 
                  resources:
                     requests:
                         memory: '64M'
                         cpu: '250m'
                     limits: 
                         memory: '128M' 
                         cpu: '500m'
                  ports: 
                       - name: http 
                         containerPort: 80 
                         protocol: TCP

اومدم یه بخش جدید به اسم resources باز کردم و با requests نوشتم چقدر لازم دارم و با limits نوشتم حداکثر چقدر باشه. یه نکته توی cpu هست که اونم واحدشه. واحد cpu به millicore هست که یک هزارم زمان cpu هستش. مانند قبل این فایل رو هم میشه apply کرد و نتیجه‌اش رو دید که فرقی نمی‌کنه با قبل ولی این بار منابعش رو مشخص کردیم.

این قسمت هم تموم شد. امیدوارم مفید بوده باشه. اگرم سوالی بود این پایین بنویسید. تو قسمت بعدی ان شاء الله به سراغ سرویس در کوبرنتیز میریم.

قسمت قبلی

قسمت بعدی