راهنمای بهروزرسانی کلاستر کوبرنتیز
سرویس کوبرنتیز ستون به صورت مداوم بهروزرسانی میشود. در هر نسخهی جدید ویژگیهای تازهای ارائه شده و مشکلات قبلی برطرف میشوند. بهروزرسانی کلاسترهای کوبرنتیز ستون به صورت خودکار و از طریق پنل کوبرنتیز قابل انجام است. شما میتوانید در هر زمانی که بخواهید به سادگی کلاستر خود را به آخرین نسخهی پشتیبانی شده ارتقا دهید.
ستون سعی دارد که در حدود هر ۳ ماه یکبار نسخهی جدیدی از سرویس کوبرنتیز را ارائه دهد. هر نسخه از سرویس کوبرنتیز حدوداً تا دوازده ماه بعد از انتشار پشتیبانی خواهد شد.
بهروزرسانی کلاستر کوبرنتیز به نسخهی جدید شامل دو بخش کلی بهروزرسانی نودهای control plane (بهروزرسانی کلاستر) و بهروزرسانی نودهای ورکر (بهروزرسانی نودها) میشود.
در فرایند بهروزرسانی کلاستر، نودهای control plane فعلی کلاستر کوبرنتیز، با نسخهی جدید جایگزین میشوند. این فرایند به صورت rolling update انجام میشود. به این صورت که ابتدا یک نود control plane با نسخهی جدید به کلاستر اضافه شده و سپس یکی از نودهای قدیمی حذف میشود. این فرایند تا جایگزینی تمام نودهای قدیمی ادامه پیدا میکند. کلاستر در طی انجام این فرایند همیشه در دسترس خواهد بود. نودهای ورکر در طی فرایند بهروزرسانی کلاستر تغییری نخواهند داشت و سرویسهای دیپلوی شده بر روی کلاستر به عملکرد خود ادامه میدهند.
در فرایند بهروزرسانی نودها، نودهای ورکر فعلی کلاستر کوبرنتیز، با نسخهی جدید جایگزین میشوند. ستون از دو حالت جایگزینی نودپول و rolling update برای بهروزرسانی نودهای ورکر کلاستر پشتیبانی میکند. در حالت جایگزینی نودپول، میتوانید پس از ساخت یک نودپول با ورژن جدید، نودهای نودپول قدیمی را drain کرده و سپس به صورت کامل حذف کنید. ستون در حالت بهروزرسانی نودپول همانند فرایند بهروزرسانی کلاستر، نودهای ورکر را به صورت rolling update بهروزرسانی میکند. تفاوتهای هر دو روش در بخش مربوطه توضیح داده شده است.
توجه کنید که هنگام Drain کردن یک ماشین Worker، در صورت استفاده از فلگ -delete-emptydir-data تمام دیتایی که روی LocalDisk آن ماشین ذخیره شده، حذف میشود در نتیجه باید قبلا آن را منتقل کرده باشید. به طور کلی توصیه میشود همواره از remote-disk ستون استفاده نمایید که امن و اتکاپذیر است. برای Drain کردن یک ماشین میتوانید از دستور مشابه زیر استفاده نمایید. برای اطلاع بیشتر به راهنمای Drain کوبرنتیز مراجعه نمایید.
● کوبرنتیز در هر نسخه تغییرات عمدهای را اعمال میکند. پیشنهاد میشود که حتما قبل از شروع انجام بهروزرسانی، مستندات تغییرات هر نسخه را به صورت کامل مطالعه کنید.
● قبل از شروع بهروز رسانی، سازگار بودن نسخهی برخی از Addonها مانند Calico و ... را بررسی کنید. درصورت نیاز به تغییر نسخهی آنها به پشتیبانی ستون در Slack پیام دهید. پس از اینکه این Addonها توسط ستون به روز رسانی شدند، شما میتوانید کلاستر و نودپولهای خود را بهروزرسانی کنید.
● قبل از بهروزرسانی نسخهی کلاستر محیط production حتما از سازگاری سرویسهای خود با نسخهی جدید اطمینان حاصل کنید. به این منظور میتوانید یک کلاستر برای محیط staging (پیش از production) روی ستون ایجاد کرده و تمام تغییرات را در ابتدا در این کلاستر آزمایش کنید.
● از سازگاری نودهای ورکر کلاستر با نسخهی جدیدی از کلاستر که قصد بهروزرسانی به آن را دارید اطمینان حاصل کنید. برای این منظور میتوانید نسخهی نودهای control plane و ورکر خود را از روشهای زیر استخراج کرده و مطابق با مستند سازگاری نسخههای کوبرنتیز تصمیمگیری کنید.
- استخراج نسخهی کلاستر:
- استخراج نسخهی نودهای کلاستر:
تلاش کنید تا کلاستر و نودهای ورکر همواره نسخهی مشابهی داشته باشند تا از سازگاری کامل آنها اطمینان داشته باشید. به همین منظور حتما پس از آپگرید کلاستر از صفحهی اطلاعات کلی به صفحهی مربوط به نودپول رفته و همهی نودپولها را به ورژن کلاستر ارتقا دهید.
● در هر مرحله از بهروزرسانی نسخهی کلاستر یا نودهای خود را تنها به یک نسخهی بالاتر ارتقا دهید. به طور مثال اگر از نسخهی ۱.۲۲ استفاده میکنید و قصد بهروزرسانی به نسخهی ۱.۲۴ را دارید، ابتدا کلاستر خود را به نسخهی ۱.۲۳ ارتقا داده و سپس به ورژن ۱.۲۴ ارتقا دهید.
- ستون به صورت خودکار از ارتقای بیش از یک نسخه در لحظه جلوگیری میکند.
● پس از آغاز فرایند بهروزرسانی، امکان توقف یا بازگرداندن نسخهی کلاستر به حالت قبل وجود ندارد.
● با استفاده از ابزار یا ابزارهای دیگر، میتوانید بررسی کنید که کدام API در حال منسوخ شدن و حذف شدن است؛ البته انجام این کار اختیاری است.
فرایند بهروزرسانی کلاستر روی نودهای ورکر تغییری اعمال نمیکند. نودهای ورکر در سرویسهای دیپلوی شده روی کلاستر به عملکرد خود ادامه میدهند.
۱- نسخهی جدید آمادهی بهروزرسانی است برای کلاستر خود را از طریق پنل بررسی کنید.
- در صورت وجود نسخهی بالاتر برای کلاستر دکمهی ارتقای نسخه فعال شده و از طریق پنل نشان داده میشود
۲- هشدارهای مربوط به ارتقا را با دقت مطالعه کرده و سپس دکمهی ارتقای نسخه را فشار دهید. در این مرحله فرایند بهروزرسانی آغاز میشود.
۳- کلاستر به صورت موقت از حالت Highly Available به حالت Upgrading تغییر میکند. در این حالت امکان حذف و اضافه کردن نود جدید به کلاستر وجود ندارد.
۴- نودهای control plane، به صورت خودکار و با استراتژی rolling update بهروزرسانی میشوند. در این فرایند ابتدا یک نود control plane با نسخهی جدید به کلاستر اضافه شده و سپس یکی از نودهای control plane قدیمی حذف میشود. این فرایند تا جایگزینی تمام نودهای control plane قدیمی ادامه پیدا میکند و با توجه به اینکه کلاسترهای ستون به صورت Highly Available نگهداری میشوند، کلاستر در طی انجام این فرایند همواره در دسترس خواهد بود.
۵- پس از اتمام فرایند بهروزرسانی، وضعیت کلاستر مجددا به حالت Highly Available بازمیگردد. در صورت بروز مشکل یا عدم تغییر وضعیت پس از گذشت زمان حداقل 1 ساعت میتوانید به پشتیبانی پیام دهید تا وضعیت بهروزرسانی کلاستر شما بررسی شود.
۶- نسخهی kubectl را در صورت نیاز بهروزرسانی کنید. بهتر است که نسخهی این ابزار با نسخهی کلاستر برابر بوده و یا در بدترین حالت یک نسخه از آن فاصله داشته باشد. به طور مثال kubectl با نسخهی ۱.۲۳ امکان مدیریت کلاسترها با نسخهی ۱.۲۲، ۱.۲۳ و ۱.۲۴ را دارد. برای استخراج نسخهی kubectl میتوانید از دستور زیر استفاده کنید:
نودهای ورکر هم باید پس از بهروزرسانی کلاستر بهروزرسانی شوند. دقت داشته باشید که نسخهی نودهای ورکر به هیچ عنوان نباید از نودهای control plane بالاتر باشد. این امر میتواند موجب بروز خطاهای سازگاری در کلاستر شود.
ستون به صورت خودکار از بهروزرسانی نودهای ورکر به نسخهی بالاتر از نودهای control plane جلوگیری میکند.
برای بهروزرسانی نودهای ورکر میتوانید از دو استراتژی جایگزینی نودپول یا rolling update استفاده کنید.
در روش جایگزینی نودپول، به جای بهروزرسانی نودپول قدیمی باید یک نودپول با نسخهی جدید و با تنظیماتی مشابه نودپول قدیمی (مانند تعداد ورکرها، سایز دیسک، برچسبگذاریها و...) بسازید.
۱- نودپول با نسخهی جدید را بسازید.
۲- از عملکرد صحیح نودهای جدید اطمینان حاصل کنید.
۳- تمام نودهای قدیمی را cordon کنید تا سرویس جدیدی روی این نودها اجرا نشود.
۴- نودهای قدیمی را یکی پس از دیگری drain کرده تا سرویسهای موجود روی این نودها به نودهای دیگر منتقل شوند.
۵- پس از انتقال تمام سرویسها به نودهای جدید و اطمینان از عملکرد صحیح سرویس میتوانید نودپول قدیمی را حذف کنید.
۶- این عمل را برای تمام نودپولهای قدیمی کلاستر تکرار کنید تا زمانی که تمام نودها به نسخهی جدیدتر بهروزرسانی شوند.
در این روش صرفا در زمان بهروزرسانی، میزان نودهای ورکر دو برابر میشوند و باید نودپولهای قدیمی را پس از اتمام فرایند حذف کنید. البته میتوانید نودپولهای قدیمی را برای مدتی نگهداری کنید تا اگر به هر دلیل سرویس شما با نسخهی جدید کوبرنتیز سازگار نبود، نودهای قدیمی را به سرعت به مدار برگردانید تا کمترین میزان downtime را داشته باشید. پس از اطمینان از سارگازی میتوانید نودپول قدیمی را از طریق پنل کوبرنتیز حذف کنید.
مزیت این روش نسبت به روش rolling update کنترل بیشتر بر فرایند بهروزرسانی است. در این روش میتوانید بهروزرسانی نودپولهای مختلف را بر اساس نیازمندی سرویسهای خود انجام دهید و در هر لحظه از فرایند که به مشکل برخوردید، بهروزرسانی را تا زمان رفع مشکل متوقف نمایید.
نکته: در صورتی که برای نودپولهای قدیمی sysctl تنظیم کرده بودید، باید این تنظیمات را از طریق پنل برای نودپولهای جدید نیز اعمال کنید.
در این روش هم مانند بهروزرسانی نودهای control plane، میتوانید نودپول فعلی را به نسخهی جدیدتر بهروزرسانی کنید. ستون در این فرایند به صورت rolling update در ابتدا یک نود با نسخهی جدید به نودپول شما اضافه میکند و سپس یکی از نودهای قدیمی را برای حذف انتخاب میکند. در فرایند حذف نود قدیمی، ابتدا نود cordon میشود تا از اجرای سرویس جدید روی این نود جلوگیری شود و سپس نود موردنظر drain خواهد شد تا سرویسهای در حال اجرا روی این نود، به نودهای دیگر منتقل شوند. پس از انتقال تمام سرویسها نود موردنظر حذف شده و این فرایند تا بهروزرسانی تمام نودهای قدیمی نودپول تکرار میشود.
نکته: در این روش سعی کنید بهروزرسانی نودپولها را یکی پس از دیگری انجام دهید. پس از رسیدن هر نودپول به وضعیت آماده، نودپول بعدی را به روزرسانی کنید.
۱- از طریق پنل «نسخهی جدید آماده بهروزرسانی است» را برای نودپول خود بررسی کنید.
- در صورت وجود نسخهی بالاتر برای نودپول، این موضوع از طریق پنل نمایش داده شده و دکمهی ارتقای نسخه نیز فعال میشود.
۲- پس از مطالعهی دقیق هشدارهای مربوطه در صفحهی ارتقا، دکمهی ارتقای نسخه را فشار دهید تا فرایند بهروزرسانی شروع شود.
۳- نودپول به صورت موقت از حالت Running در دو حالت Scaling Up یا Scaling down قرار میگیرد و در این حالت امکان تغییر تنظیمات نودپول وجود ندارد.
۴- نودهای نودپول، به صورت خودکار و با استراتژی rolling update بهروزرسانی میشوند.
۵- پس از اتمام فرایند بهروزرسانی، نودپول مجددا به حالت Running بازمیگردد.
می دانیم که Kubernetes تقریباً هر چهار ماه یک بار یک نسخهی جدید منتشر میکند. با هر نسخه جدید، ممکن است چندین API به کوبرنتیز حذف یا اضافه شود.
با ابزارهای کمکی مانند kubent (Kube-No-Trouble) میتوانید بررسی کنید، آیا هر یک از نسخههای API که استفاده میکنید، در نسخه فعلی کلاسترتان حذف میشوند یا خیر.
- میتوانید ابزار Kubent را با استفاده از این اسکریپت بر روی سیستم خودتان نصب کنید:
با استفاده از دستور زیر، آن را در ترمینال صدا بزنید. kubent از طریق kubeconfig به کلاستر متصل میشود و در تمام فضاهای نام قابل دسترسی (namespace)، کلاسترتان را اسکن میکند.