راه اندازی یک برنامه Monorepo با Kubernetes
Kubernetes یک ابزار قدرتمند هماهنگ سازی کانتینر است که می تواند به شما در مدیریت و استقرار برنامه monorepo خود کمک کند. در این وبلاگ، ما اصول اولیه Kubernetes و نحوه استفاده از آن برای استقرار برنامه خود را پوشش خواهیم داد. تا پایان این وبلاگ، باید درک خوبی از Kubernetes داشته باشید و بتوانید برنامه خود را با استفاده از Kubernetes مستقر کنید.
معرفی:
برنامه های کانتینری را می توان به راحتی با Kubernetes، یک پلت فرم منبع باز، مدیریت و مقیاس بندی کرد. با خودکارسازی استقرار، مقیاسبندی و مدیریت در چندین میزبان، زیرساخت کارآمدتر و قابل اعتمادتر میشود. این تضمین می کند که کانتینرها در جایی که باید باشند اجرا می شوند و حالت برنامه مورد نظر را حفظ می کنند.
Kubernetes یک خوشه از گره ها را ایجاد می کند که یک گره اصلی کل خوشه را کنترل و مدیریت می کند. گره اصلی در مورد استقرار، مقیاس بندی و زمان بندی کانتینرها تصمیم می گیرد.
K8s از پوسته پوسته شدن خودکار، تعادل بار و خود ترمیم پشتیبانی می کند، Kubernetes چندین کانتینر و خدمات را به طور موثر مدیریت می کند. در Kubernetes، توسعهدهندگان میتوانند روی ساخت و ارائه برنامهها تمرکز کنند، در حالی که پلتفرم کانتینرها را در مقیاس مدیریت میکند.
حال، بیایید عمیقاً در معماری Kubernetes شیرجه بزنیم.
غلاف:
کوچکترین جزء کوبرنت ها غلاف است. pod حاوی یک ظرف داکر با برخی از فرآیندهای کوبرنت داخلی است. pod یک لفاف برای یک ظرف داکر در kubernetes است. این یک نمونه واحد از یک فرآیند در حال اجرا در یک خوشه را نشان می دهد. غلاف ها به صورت کوتاه مدت طراحی شده اند و می توان آنها را در صورت نیاز ایجاد کرد، از بین برد و جایگزین کرد.
گره:
در یک خوشه، چندین نمونه از غلافها در فضایی به نام “گره” یا “گره کارگر” مستقر میشوند. Node فقط می تواند مقدار محدودی از pods را ذخیره کند زیرا به ظرفیت ذخیره سازی و تخصیص حافظه آن بستگی دارد.
NodeGroup:
گره های متعدد یک گروه گره ایجاد می کنند و از گروه های گره معمولاً در استقرار خوشه ها برای سازماندهی و مدیریت گره های کارگر بر اساس معیارهای خاص مانند مشخصات سخت افزاری، مناطق در دسترس بودن، مناطق یا هر ویژگی دلخواه دیگری استفاده می شود.
سرویس:
اگر چندین پاد برای کانتینرهای برنامه مشابه دارید، از این سرویس برای مسیریابی ترافیکی که از خارج گره می آید استفاده می شود. در kubernetes، این سرویس به عنوان یک متعادل کننده بار داخلی عمل می کند و ترافیک شبکه را در میان پادهای متعددی که بخشی از آن سرویس هستند، توزیع می کند.
انواع مختلفی از خدمات در kubernetes موجود است:
-
NodePort: در این نوع سرویس بر روی یک پورت خاص که در پیکربندی برای هر گره انتخاب شده در خوشه تعریف شده است در معرض دید قرار می گیرد. یک محدوده پورت ایجاد می کند و آن را در معرض گره ای قرار می دهد که بعداً ترافیک را به سرویس ارسال می کند.
-
ClusterIP: سرویس را در یک آدرس IP داخلی خوشه نشان می دهد و فقط در داخل خوشه قابل دسترسی است. و یک نوع سرویس پیش فرض است.
-
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 ایمیل بزنید.
تا دفعه بعد!