برنامه نویسی

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

Kubernetes یک ابزار قدرتمند هماهنگ سازی کانتینر است که می تواند به شما در مدیریت و استقرار برنامه monorepo خود کمک کند. در این وبلاگ، ما اصول اولیه Kubernetes و نحوه استفاده از آن برای استقرار برنامه خود را پوشش خواهیم داد. تا پایان این وبلاگ، باید درک خوبی از Kubernetes داشته باشید و بتوانید برنامه خود را با استفاده از Kubernetes مستقر کنید.

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

Kubernetes یک خوشه از گره ها را ایجاد می کند که یک گره اصلی کل خوشه را کنترل و مدیریت می کند. گره اصلی در مورد استقرار، مقیاس بندی و زمان بندی کانتینرها تصمیم می گیرد.

K8s از پوسته پوسته شدن خودکار، تعادل بار و خود ترمیم پشتیبانی می کند، Kubernetes چندین کانتینر و خدمات را به طور موثر مدیریت می کند. در Kubernetes، توسعه‌دهندگان می‌توانند روی ساخت و ارائه برنامه‌ها تمرکز کنند، در حالی که پلتفرم کانتینرها را در مقیاس مدیریت می‌کند.

حال، بیایید عمیقاً در معماری Kubernetes شیرجه بزنیم.

معماری K8s

غلاف:
کوچکترین جزء کوبرنت ها غلاف است. pod حاوی یک ظرف داکر با برخی از فرآیندهای کوبرنت داخلی است. pod یک لفاف برای یک ظرف داکر در kubernetes است. این یک نمونه واحد از یک فرآیند در حال اجرا در یک خوشه را نشان می دهد. غلاف ها به صورت کوتاه مدت طراحی شده اند و می توان آنها را در صورت نیاز ایجاد کرد، از بین برد و جایگزین کرد.

گره:
در یک خوشه، چندین نمونه از غلاف‌ها در فضایی به نام “گره” یا “گره کارگر” مستقر می‌شوند. Node فقط می تواند مقدار محدودی از pods را ذخیره کند زیرا به ظرفیت ذخیره سازی و تخصیص حافظه آن بستگی دارد.

NodeGroup:
گره های متعدد یک گروه گره ایجاد می کنند و از گروه های گره معمولاً در استقرار خوشه ها برای سازماندهی و مدیریت گره های کارگر بر اساس معیارهای خاص مانند مشخصات سخت افزاری، مناطق در دسترس بودن، مناطق یا هر ویژگی دلخواه دیگری استفاده می شود.

سرویس:
اگر چندین پاد برای کانتینرهای برنامه مشابه دارید، از این سرویس برای مسیریابی ترافیکی که از خارج گره می آید استفاده می شود. در kubernetes، این سرویس به عنوان یک متعادل کننده بار داخلی عمل می کند و ترافیک شبکه را در میان پادهای متعددی که بخشی از آن سرویس هستند، توزیع می کند.

انواع مختلفی از خدمات در kubernetes موجود است:

  1. NodePort: در این نوع سرویس بر روی یک پورت خاص که در پیکربندی برای هر گره انتخاب شده در خوشه تعریف شده است در معرض دید قرار می گیرد. یک محدوده پورت ایجاد می کند و آن را در معرض گره ای قرار می دهد که بعداً ترافیک را به سرویس ارسال می کند.

  2. ClusterIP: سرویس را در یک آدرس IP داخلی خوشه نشان می دهد و فقط در داخل خوشه قابل دسترسی است. و یک نوع سرویس پیش فرض است.

  3. LoadBalancer: این نوع سرویس یک بار متعادل کننده خارجی ایجاد می کند و آدرس IP منحصر به فردی را اختصاص می دهد. پس از ایجاد، به طور خودکار ترافیک را هدایت می کند و بار را توزیع می کند.

ورود:
ترافیک خارجی را مدیریت می کند (ترافیک که از خارج از خوشه می آید) راهی برای پیکربندی مسیرها برای رسیدگی به خدمات بر اساس قوانین تعریف شده ارائه می دهد. ورود به عنوان نقطه ورود از ترافیک ورودی به خوشه عمل می کند. ورود به خود تعادل بار را مدیریت نمی کند. به کنترل کننده ورودی متکی است که به طور مداوم منابع درون خوشه را رصد می کند. این یک سرویس خارجی است که قابلیت رسیدگی به ترافیک خارجی وارد شده به خوشه را دارد. برای درک بیشتر، به تصویر زیر نگاه کنید.

معماری ورودی

گسترش:
Deployment یک شی api است که پیکربندی یامل را با پارامترهایی مانند تعداد مورد نظر کپی، تصویر کانتینر مورد استفاده، متغیرهای محیطی، محدودیت‌های منابع و موارد دیگر مشخص می‌کند و به شما امکان می‌دهد چرخه عمر برنامه‌های خود را مستقر و مدیریت کنید. برای افزایش replica ها برای همان ظرف، مقادیر را با کلید “replicas” تغییر دهید. غلاف دیگری از همان ظرف ایجاد می کند.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: server-deployment
  labels:
    app: server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: server
  template:
    metadata:
      labels:
        app: server
    spec:
      containers:
        - name: server
          image: starter_server:latest
          imagePullPolicy: Never
          ports:
            - containerPort: 3000
          resources:
            limits:
              memory: "256Mi"
              cpu: "1000m"
          envFrom:
            - secretRef:
                name: secret
وارد حالت تمام صفحه شوید

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

علاوه بر استقرار فایل yaml، یک روش استاندارد برای مدیریت متغیرهای محیطی با استفاده از Secret, format برای ذخیره متغیرها وجود دارد. برای اطلاعات بیشتر این صفحه را بررسی کنید

apiVersion: v1
kind: Secret
type: Opaque
metadata:
  name: secret
data:
  NODE_ENV: ZGV2ZWxvcG1lbnQ=
  PORT: MzAwMA==
وارد حالت تمام صفحه شوید

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

و فایل سرویس برای استقرار برنامه. برای اینکه کار کند، مطمئن شوید که همان ابرداده و نام انتخابگر را به فایل استقرار که توسط گره اصلی برای شناسایی منابع برنامه استفاده می‌کند، پیوست کنید.

apiVersion: v1
kind: Service
metadata:
  name: starter-service
spec:
  selector:
    app: server
  type: NodePort
  ports:
    - protocol: TCP
      port: 3000
      targetPort: 3000
      nodePort: 31110
وارد حالت تمام صفحه شوید

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

نتیجه:
kubernetes مقیاس پذیری افقی را فراهم می کند، به شما امکان می دهد برنامه های خود را با افزودن یا حذف آسان پادها مقیاس بندی کنید. در دسترس بودن برنامه را با توزیع آنها در چندین گره همراه با سرویس حفظ می کند و با ارائه به روز رسانی های چرخشی و برنامه ریزی مجدد و جایگزینی خودکار در گره های سالم در صورت خرابی گره، از حداقل زمان خرابی پشتیبانی می کند.

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

از خواندن این مطلب متشکرم اگر سؤالی دارید، در صورت تمایل به من به آدرس harsh.make1998@gmail.com ایمیل بزنید.

تا دفعه بعد!

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

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

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

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