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


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

در این مجموعه نوشته فرض بر اینه که آشنایی اولیه با اجزای کوبرنتیز از جمله نود اصلی (ما اینجا میگیم رهبر) و نودهای پیرو یا کارگر رو دارید. البته سعی می‌کنم در یکی از مطالب آینده این مفاهیم رو توضیح بدم ولی برای این دنباله فرضی که گفتم رو دارم. آشنایی با داکر و کانتینر هم که دیگه نگم. هم‌چنین ساختار yaml رو هم انتظار میره که بدونید.

تو این نوشته و نوشته بعدی میخوام در مورد پاد (pod) بگم براتون و یه سناریوی عملی داشته باشیم. پاد پایه‌ای ‌ترین جزء در کوبرنتیز هست که ما برای اجرای برنامه‌هامون ازش استفاده می‌کنیم. داخل پاد میتونه یک یا چند کانتینر وجود داشته باشه؛ همون کانتینرهایی که می‌خوایم برنامه رو اجرا کنن. توصیه میشه که کانتینرها رو نریزیم تو پادها و فقط یه کانتینر تو هر پاد باشه. مگر اینکه مجبور باشیم. همچنین کانتینر توی پاد میتونه از طریق پورت‌هایی که ما تعریف می‌کنیم با دنیای بیرون ارتباط داشته باشه. همه این‌ها رو توی یه فایل با فرمت yaml میریزیم (json هم میشه ولی باحال نیست) و تحویل کوبرنتیز میدیم تا برامون بسازدش. در نوشتن فایل yaml باید دندانه‌گذاری‌ها رو دقت کنید و دقیقا مانند مثال‌ها انجامش بدید وگرنه ممکنه به مشکل بخورید.

حالا بیاید یه پاد رو تعریف کنیم. قبل از هر چیز چون اولین مطلب در این زمینه‌اس قالب کلی تعریف یک object رو در کوبرنتیز ببینیم:

apiVersion:
kind:
metadata:
spec:

اولین بخش apiVersion هست که میگه با چه apiی برای ساخت این با کوبرنتیز صحبت کنیم. شاید اولش به نظر بیاد هر چیزی بشه نوشت (به کسی نگید منم اولش این فکر رو میکردم تا به ارور خوردم) ولی برای هر نوع و هر ورژن کوبرنتیز مقدار خاصی داره. بعدی kind هست که نوع object رو مشخص می‌کنه؛ مثلا در مطلب ما Pod خواهد بود. در قسمت بعدی متا دیتا میاد. متا دیتا یعنی دیتا در مورد دیتا. تو اینجا چیزی که حتما باید باشه name هست. بخش اصلی داستان هم تو spec هست که ویژگی‌های اون object رو می‌نویسیم. با توجه به نوع object محتویات spec هم فرق میکنه.

بریم سراغ تعریف پاد:


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


برای پاد apiVersion رو v1 میذاریم. طبیعتا kind هم باید Pod باشه. دقت کنید که همیشه این قسمت با حروف بزرگ شروع میشه. داخل متا دیتا یه اسم به انتخاب خودم (البته که باید با مسمی باشه این اسم) نوشتم. چیز دیگه‌ای که معمولا اونجا میذاریم label هست. labelها به شکل key value pair نوشته میشن و هر چند تا بخوایم از این جفت‌ها می‌نویسیم داخل label. این کار کمک میکنه بتونیم objectها رو دسته‌بندی کنیم؛ مثلا اینجا من نوشتم app: front. ممکنه یه پاد دیگه بعدا درست کنم که اسمش فرق کنه با این و یه کار دیگه‌ای بکنه ولی هم‌چنان مربوط باشه به فرانت اند. وقتی بخوام بدون label به این پادها دسترسی داشته باشم باید تک تک اسماشون رو بدونم؛‌ اما label گذاشتن باعث میشه بتونم به راحتی همه‌شون رو داشته باشم یا یه بلایی سرشون بیارم.

می‌رسیم به اصل مطلب یعنی spec. برای پاد چیزی که حتما باید باشه containers هست. معلومه که تعریف کانتینرهای موجود در پاد رو میدیم بهش. بعدش هم با خط تیره شروع میشه که نشون میده این یه لیست هست. ما اینجا فقط یه دونه داریم. اول یه اسم براش انتخاب می‌کنیم. بعد تصویر (image) رو میدیم بهش. این تصویر باید یه تصویر در دسترس از داکر هاب یا یه رجیستری دیگه باشه (اگه رجیستری خصوصی باشه باید اطلاعات ورود به اون رو هم بدید که تو بخش آموزش secret ان شاء الله میبینیم). بعدش یه تعدادی پورت رو هم مشخص می‌کنید که از طریق اونا بتونه کانتینر با بیرون ارتباط برقرار کنه. اینجا هم خط تیره هست یعنی لیستی از پورت‌ها قراره داده بشه. لیست ما فقط یه عضو داره تو این مثال. برای هر پورت یک اسم انتخاب می‌کنیم و عدد پورتی که کانتینر روش گوش میکنه رو می‌نویسیم. بعدش هم نوع پروتکل رو میگیم که UDP باشه یا TCP.

نکته‌ای که باید در مورد پاد حواسمون بهش باشه اینه که برای ارتباط باهاش از طریق ip خود پاد عمل نمی‌کنیم. روش‌های استانداردی وجود داره برای این کار که به اونها سرویس میگن و در ادامه مطالب قصد داریم بهشون بپردازیم.

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

امیدوارم براتون مفید بوده باشه. اگر نظری دارید این پایین بگید.

قسمت بعدی