Skip to main content

Custom Config

شما می‌توانید علاوه بر تنظیمات موجود در صفحه اپ، برخی تنظیمات پیشرفته‌تر را نیز برای اپ خود شخصی‌سازی کنید. بخش CustomConfig، امکان اضافه کردن این تنظیمات را فراهم می‌کند.

اضافه کردن تنظیمات شخصی

هرکدام از این تنظیمات، یک فرمت از قبل مشخص‌شده دارند که در مستندات کوبرنتیز آورده شده است. در ادامه، توضیح هرکدام از این تنظیمات را در کنار فرمت کلی کد مربوطه، آورده‌ایم.

بعد از آشنایی با تنظیمات مورد نظر، این فرمت را ویرایش کرده و مقادیر مورد نظر خود را در آن قرار دهید.

سپس وارد صفحه اپ شوید. از منوی سمت راست، گزینه CustomConfig را بزنید. حالا می‌توانید تنظیمات خود را در ادیتور صفحه قرار دهید.

شما می‌توانید هر تعدادی از این تنظیمات را در ادیتور وارد کنید. بعد از وارد کردن کد، گزینه «ذخیره و دیپلوی» را بزنید تا تغییرات روی اپ اعمال شود.

تنظیمات قابل ویرایش در دارکوب

Strategy

اگر بخواهید ورژن جدیدی از اپ خود را بالا بیاورید، کوبرنتیز باید اپ ورژن قدیمی را پاک کرده و آن را با اپ جدید جایگزین کند. بخصوص اگر اپ‌ شما Replica داشته باشد، انتخاب استراتژی مناسب نقش بسزایی در مدیریت داون‌تایم و خطاهای احتمالی پیدا می‌کند. کوبرنتیز دو استراتژی برای این فرآیند در نظر گرفته است.

RollingUpdate

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

Recreate

در این استراتژی، اول همه پادهای ورژن‌های قدیمی به طور کامل پاک می‌شوند. سپس همه پادهای ورژن‌ جدید، همگی به صورت همزمان بالا می‌آیند. به دلیل وقفه‌ای که بین پاک شدن و ساخت مجدد اپ‌ها وجود دارد، این استراتژی داون‌تایم خواهد داشت. اما برخلاف RollingUpdate، همه تغییرات را یکجا به کاربر عرضه می‌کند و بنابراین در اپدیت‌های بزرگ، احتمال بروز خطا برای کاربر را پایین‌ می‌آورد.

نحوه تنظیم Strategy

فرمت استراتژی rollingUpdate، دو فیلد قابل تنظیم دارد. هردو این مقادیر می‌توانند به شکل عددی (۱) یا درصدی (10%) تنظیم شوند.

  • MaxUnavailable: مشخص می‌کند که در آن واحد، چند تا از کل پادهای در حال جایگزینی اجازه دارند از دسترس خارج شوند.
  • MaxSurge: مشخص می‌کند که در هر لحظه، مجموع تعداد پادهای ورژن قدیمی و جدید چقدر می‌تواند از تعداد اپ‌های نهایی، بیشتر باشد. به عنوان مثال اگر ۳ پاد داریم و MaxSurge را 33% ست کنیم، تعداد کل پادهای ورژن قدیمی و جدید حداکثر می‌تواند ۴ تا باشد.

به بخش CustomConfig بروید و مقدارهای مورد نظر خود را طبق فرمت زیر وارد کنید:

# rollingUpdate
strategy:
rollingUpdate:
maxSurge: 3
maxUnavailable: 1
type: RollingUpdate

# Recreate
strategy:
type: Recreate

Configmap

ممکن است اپلیکیشن شما در فرآیند اجرا، به تنظیمات یا مقادیری نیاز داشته باشد؛ مثلا آدرس و پورت دیتابیس، یا فایل کانفیگ nginx. با کمک کانفیگ‌مپ می‌توانید این مقادیر را در قالب یک فایل، به پاد اضافه کنید.

کانفیگ‌مپ زیر، فایل تنظیمات Nginx را به پاد اضافه می‌کند:

configmap:
enabled: true
path: "/etc/nginx/conf.d"
value:
nginx.conf: |-
server {
listen 80;
root /usr/share/nginx/html;
}

به این ترتیب، فایل nginx.conf در داخل پاد از آدرس /etc/nginx/conf.d/nginx.conf در دسترس خواهد بود.

HostAliases

برخی اوقات نیاز است به صورت دستی، IP به یک دامنه اختصاص دهیم. برای انجام این کار، باید فایل etc/hosts/ کانتینر را ویرایش کنیم. اما اگر کانتینر به هر دلیلی ریست شود، همه موارد اضافه‌شده هم پاک خواهند شد. برای حل این مسئله، می‌توانید آدرس‌ها و آی‌پی‌های خود را در قالب hostAliases به تنظیمات اضافه کنید.

hostAliases:
enabled: true
value:
- ip: "1.2.3.4"
hostnames:
- "cloud.google.com"
- "opensource.google.com"
- ip: "4.5.6.7"
hostnames:
- "google.com"

Probes

شما می‌توانید برای اپ خود، تست‌های سلامت یا Probe تعریف کنید. تست سلامت، هر چند ثانیه یک بار وضعیت کانتینر را چک کرده و در صورت وجود مشکل، اقدامی در راستای آن انجام می‌دهد. این تست می‌تواند به شکل اجرای دستور در ترمینال، زدن ریکوئست http GET، باز کردن سوکت tcp به پاد، و یا استفاده از پروتکل gRPC انجام شود.

livenessProbe

این تست بررسی می‌کند که آیا کانتینر نیاز به ریست دارد یا خیر. اگر جوابی از کانتینر نرسد، کوبرنتیز آن را ریستارت می‌کند.

readinessProbe

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

نحوه تنظیم Probeها

پس از انتخاب روش مورد نظرتان، probe را با کمک فیلدهای زیر تنظیم کنید:

  • periodSeconds : مشخص می‌کند که تست، هر چند ثانیه یک بار انجام شود.
  • initialDelaySeconds: فاصله‌ای که بین بالا آمدن کانتینر و اولین اجرای probe وجود دارد.
  • timeoutSeconds: مدت زمان انتظار کوبرنتیز برای گرفتن جواب از probe.
  • successThreshold: تعداد probeهای موفق متوالی برای آنکه تست، موفق محسوب شود.
  • failureThreshold: تعداد probeهای ناموفق متوالی برای اینکه تست، ناموفق محسوب شود.

کد زیر، یک Probe با ریکوئست HTTP را نشان می‌دهد:

container:
livenessProbe:
httpGet:
path: /is-live
port: 8080
httpHeaders:
- name: Custom-Header
value: custom-value
initialDelaySeconds: 3
periodSeconds: 3

container:
readinessProbe:
httpGet:
path: /is-ready
port: 8080
httpHeaders:
- name: Name
value: value
initialDelaySeconds: 3
periodSeconds: 3

Lifecycle Hooks

یک پاد کوبرنتیز، چرخه حیات مشخصی دارد که از پذیرفته شدن یک پاد توسط کلاستر شروع شده و با پایان کار پاد به پایان می‌رسد. شما می‌توانید تنظیم کنید که هروقت پاد به یکی از این رویدادها رسید، دستور بخصوص اجرا شود. برای این کار، باید از هوک (hook) استفاده کنیم. هوک می‌تواند اجرای دستور در ترمینال، فرستادن ریکوئست GET، یا باز کردن سوکت TCP به پاد باشد.

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

postStart

این هوک در فاصله زمانی بین ساخته شدن اپ و آغاز به کار آن، اجرا می‌شود. به عنوان مثال ممکن است بخواهید قبل از اجرا شدن اپ اصلی، یک کانتینر موقت ساخته شود و با اجرای دستوراتی، محیط را برای اپ اصلی آماده کند. دقت داشته باشید که هوک، مستقل از کامندهای ENTRYPOINT داکرفایل اجرا می‌شود و الزاما قبل یا بعد آن عملی نمی‌شود، بلکه موازی با آن اجرا خواهد شد.

preStop

این هوک در فاصله بین ارسال دستور متوقف شدن اپ و توقف واقعی آن، اجرا می‌شود. به عنوان مثال شاید بخواهید اپلیکیشنتان قبل از توقف ناگهانی، دیتای دیتابیس را ذخیره کند و برخی تسک‌های نیمه‌اجراشده را متوقف نماید. در چنین حالتی می‌توانید یک اندپوینت GET تعریف کنید که در آن همه این موارد انجام می‌شوند. سپس می‌توانید در هوک preStop، اندپوینت را صدا بزنید.

# Running a command
container:
lifecycle:
preStop:
exec:
command: [ "sh", "-c", "script.sh"]

# Sending an http request
container:
lifecycle:
postStart:
httpGet:
path: /startup
port: 80
تنظیمات بیشتر

اگر کلاستر On Premise دارید، می‌توانید تنظیماتی فراتر از این لیست را نیز اضافه کنید. در صورت نیاز، به ما تیکت بزنید.