چرا سکان آکادمی؟
راه اندازی برنامه در Kubernetes

راه اندازی برنامه در Kubernetes

در این بخش از آموزش کاربردی داکر، قرار است برنامه ای که کانتینری کرده ایم را روی Kubernetes بالا بیاوریم. توجه داشته باشید که در این آموزش قرار است با Kubernetes که یکی از ابزارهای بسیار قدرتمند Orchestration است آشنا بشویم و یک تجربه ی کوچک از آن بدست بیاوریم. در صورتی که برنامه نویس Senior هستید و یا قصد دارید به عنوان کسی که Dev-Ops بلد است به فعالیت خود ادامه بدهید، بعد از مطالعه ی این بخش، لینک هایی که در پایان خدمتتان معرفی می کنم را دنبال کنید.

نیازمندی های این بخش عبارتند از:

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

برای اینکه مطمئن شویم برنامه کانتینری ما، به خوبی در Kubernetes کار می کند، قبل از اینکه برنامه را در یک خوشه کامل از Kubernetesهای نهایی تحویل دهیم، از Docker Desktop روی کامپیوترمان برای استقرار برنامه استفاده می کنیم. محیط Kubernetes ایجاد شده توسط Docker Desktop کامل است، به این معنی که تمام ویژگی‌های Kubernetes را که برنامه ی شما قرار است در یک خوشه ی واقعی از آنها استفاده کند را دارد.

تعریف برنامه با استفاده از فایل Kubernetes YAML

همه کانتینرها در Kubernetes به‌عنوان podها شناخته می شوند، podها گروه‌هایی از کانتینرهای هم‌مکانی هستند که برخی از منابع را به اشتراک می‌گذارند. علاوه بر این، در یک برنامه واقعی، ما تقریباً هرگز podهای جداگانه ایجاد نمی کنیم. در عوض، بیشتر بار کاری روی deployment هاست، deploymentها گروه‌های مقیاس‌پذیری از pod‌ها هستند که به‌طور خودکار توسط Kubernetes نگهداری می‌شوند. در نهایت، تمام اشیای Kubernetes می‌توانند و باید در مانیفست‌هایی به نام فایل‌های Kubernetes YAML توصیف شوند. فایل‌های YAML تمام اجزا و پیکربندی‌های برنامه Kubernetes شما را مشخص می‌کنند و می‌توانند به راحتی برنامه شما را در هر محیط Kubernetes ایجاد و حذف کنند.

  1. شما قبلاً یک فایل بسیار ابتدایی Kubernetes YAML را در بخش راه اندازی Kubernetes روی ویندوز و مک از همین دوره ی آموزشی نوشته اید. اکنون، بیایید یک فایل YAML کمی پیچیده‌تر برای اجرا و مدیریت برنامه ی خودمان بنویسیم. موارد زیر را در فایلی به نام bb.yaml قرار دهید:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: bb-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      bb: web
  template:
    metadata:
      labels:
        bb: web
    spec:
      containers:
      - name: bb-site
        image: getting-started
---
apiVersion: v1
kind: Service
metadata:
  name: bb-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    bb: web
  ports:
  - port: 3000
    targetPort: 3000
    nodePort: 30001

در این فایل Kubernetes YAML، ما دو شی داریم که با --- از هم جدا شده اند:

  • یک Deployment، که گروه مقیاس پذیری از podهای یکسان را توصیف می کند.
    در این مورد، شما فقط یک کپی (replica) از pod خود خواهید داشت، و آن pod (که در بخش :template معرفی شده است) فقط یک کانتینر است که با استفاده از imageای که قبلا ساخته شده درست شده است.
  • یک سرویس NodePort، که ترافیک را از پورت 30001 روی هاست شما به پورت 3000 درون podها هدایت می‌کند و دسترسی به برنامه از طریق شبکه را ایجاد می کند.

شاید Kubernetes YAML، در ابتدا یک مقدار طولانی و پیچیده به نظر برسد، اما تقریباً همیشه از یک الگوی مشخص پیروی می کند:

  • apiVersion، نشان دهنده API Kubernetes است و بخش های فایل که در زیر توضیح داده می شوند را تجزیه و تحلیل می کند،
  • kind، که نشان می دهد، چه نوع شی ای است،
  • برخی از metadata ها که وظیفه ی اعمال مواردی مانند نام را بر روی اشیاء شما دارند،
  • Spec، که تمام پارامترها و تنظیمات شی شما را مشخص می کند.

Deploy و چک کردن برنامه

   1. در یک ترمینال، به پوشه ای که bb.yaml را در آن ایجاد کرده اید بروید و برنامه خود را در Kubernetes مستقر کنید:

kubectl apply -f bb.yaml

شما باید خروجی ای شبیه به خروجی زیر را ببینید، که نشان می دهد اشیاء Kubernetes شما با موفقیت ایجاد شده اند:

deployment.apps/bb-demo created
service/bb-entrypoint created

   2. لیست deployments ها را بگیرید تا مطمئن شوید همه ی بخش هایی که تعریف کرده بودید، در حال کار هستند:

kubectl get deployments

اگر وضعیت همانطور که انتظار داشتیم باشد، لیست زیر را باید ببینیم:

NAME      READY  UP-TO-DATE   AVAILABLE   AGE
bb-demo   1/1    1            1           40s

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

kubectl get services

خروجی زیر را باید در پاسخ این دستور ببینید:

NAME            TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
bb-entrypoint   NodePort   10.106.145.116   <none>        3000:30001/TCP   53s
kubernetes      ClusterIP   10.96.0.1        <none>        443/TCP          138d

علاوه بر سرویس پیش‌فرض kubernetes، سرویس bb-entrypoint خود را می‌بینیم که ترافیک را از پورت 30001/TCP می‌پذیرد.

   3. یک مرورگر باز کنید و برنامه ی خودتان را در پورت 30001 از localhost ببینید.

   4. حالا برنامه را حذف کنید.

kubectl delete -f bb.yaml

جمع بندی

در این بخش، ما با موفقیت از Docker Desktop موجود روی سیستم خودمان، برای استقرار برنامه در یک محیط Kubernetes آزمایشی البته با ویژگی های کامل، استفاده کردیم. ما کار زیادی با Kubernetes انجام نداده‌ایم و این ابزار قدرتمند توانایی های خیلی بیشتری دارد؛ اما با این آموزش قصد داشتم شما را با این ابزار تا حدی آشنا کنم. شما می توانید اجزای دیگری به برنامه خود اضافه کنید و از تمامی ویژگی ها و توانایی های Kubernetes استفاده کنید.

علاوه بر استقرار برنامه مان در Kubernetes، برنامه ی خود را در یک فایل Kubernetes YAML نیز تعریف کرده‌ایم. این فایل متنی ساده، حاوی همه ی چیزهایی است که برای ایجاد برنامه، در زمان اجرا به عنوان محصول نهایی نیاز داریم.

پیشنهاد می کنم برای آشنایی بیشتر با Kubernetes به لینک های زیر سر بزنید:

Kubernetes Pods

Kubernetes Deployments

Kubernetes Services

 

دوره در حال تکمیل است ... rocket