ما یک ارائه دهنده رسمی Terraform را برای کار با Selectel راه اندازی کرده ایم. این محصول به کاربران اجازه می دهد تا مدیریت منابع را به طور کامل از طریق متدولوژی زیرساخت به عنوان کد پیاده سازی کنند.
ارائه دهنده در حال حاضر از مدیریت منابع خدمات پشتیبانی می کند "ابر خصوصی مجازی" (از این پس VPC نامیده می شود). در آینده قصد داریم مدیریت منابع را برای سایر خدمات ارائه شده توسط Selectel اضافه کنیم.
همانطور که می دانید، سرویس VPC بر روی OpenStack ساخته شده است. با این حال، با توجه به این واقعیت که OpenStack ابزارهای بومی را برای خدمت به ابر عمومی ارائه نمی دهد، ما عملکرد گمشده را در مجموعه ای از API های اضافی پیاده سازی کردیم که مدیریت اشیاء ترکیبی پیچیده را ساده می کند و کار را راحت تر می کند. برخی از عملکردهای موجود در OpenStack با استفاده مستقیم بسته شده است، اما از طریق آن در دسترس است API ما.
ارائه دهنده Selectel Terraform اکنون توانایی مدیریت منابع VPC زیر را دارد:
پروژه ها و سهمیه آنها؛
کاربران، نقش ها و نشانه های آنها؛
زیرشبکه های عمومی، از جمله بین منطقه ای و VRRP.
مجوزهای نرم افزار
ارائه دهنده از کتابخانه عمومی Go ما برای کار با VPC API استفاده می کند. هم کتابخانه و هم خود ارائه دهنده منبع باز هستند، توسعه آنها در Github انجام می شود:
برای مدیریت سایر منابع ابری، مانند ماشین های مجازی، دیسک ها، خوشه های Kubernetes، می توانید از ارائه دهنده OpenStack Terraform استفاده کنید. اسناد رسمی برای هر دو ارائه دهنده در پیوندهای زیر موجود است:
برای شروع، باید Terraform را نصب کنید (دستورالعمل ها و پیوندهای بسته های نصب را می توانید در اینجا پیدا کنید سایت رسمی).
برای کارکرد، ارائهدهنده به یک کلید API Selectel نیاز دارد که در ایجاد شده است پنل های کنترل حساب.
مانیفستهای کار با Selectel با استفاده از Terraform یا با استفاده از مجموعهای از نمونههای آماده که در مخزن Github ما موجود است ایجاد میشوند: terraform- نمونه ها.
مخزن با نمونه ها به دو دایرکتوری تقسیم می شود:
ماژول ها، شامل ماژول های کوچک قابل استفاده مجدد است که مجموعه ای از پارامترها را به عنوان ورودی می گیرند و مجموعه کوچکی از منابع را مدیریت می کنند.
مثال ها، حاوی نمونه هایی از مجموعه کاملی از ماژول های به هم پیوسته است.
پس از نصب Terraform، ایجاد کلید Selectel API و آشنایی با مثال ها، به سراغ مثال های کاربردی می رویم.
در پرونده vars.tf تمام پارامترهایی که هنگام فراخوانی ماژول ها استفاده می شوند، توضیح داده شده اند. برخی از آنها مقادیر پیش فرض دارند، به عنوان مثال، سرور در منطقه ایجاد می شود ru-3a با پیکربندی زیر:
در صورت لزوم، می توانید کلید عمومی دیگری را تعیین کنید. لازم نیست کلید به عنوان یک مسیر فایل مشخص شود، همچنین می توانید مقدار را به عنوان یک رشته اضافه کنید.
در ادامه این فایل ماژول ها راه اندازی می شوند پروژه_با_کاربر и server_local_root_disk، که منابع لازم را مدیریت می کنند.
بیایید این ماژول ها را با جزئیات بیشتری بررسی کنیم.
بحث و جدل ignore_changes به شما اجازه می دهد تا تغییرات ویژگی را نادیده بگیرید id برای تصویری که برای ایجاد ماشین مجازی استفاده می شود. در سرویس VPC، اکثر تصاویر عمومی به صورت خودکار هفته ای یک بار و در همان زمان به روز می شوند id نیز تغییر می کند. این به دلیل ویژگی های مؤلفه OpenStack - Glance است که در آن تصاویر موجودات تغییرناپذیر در نظر گرفته می شوند.
اگر در حال ایجاد یا تغییر یک سرور یا دیسک موجود هستید که دارای آرگومان است image_id استفاده می شود id تصویر عمومی، سپس پس از بهروزرسانی آن تصویر، اجرای مجدد مانیفست Terraform سرور یا دیسک را دوباره ایجاد میکند. استفاده از استدلال ignore_changes به شما امکان می دهد از چنین وضعیتی اجتناب کنید.
توجه: استدلال ignore_changes مدتها پیش در Terraform ظاهر شد: pull#2525.
بحث و جدل ignore_resize_confirmation برای تغییر اندازه موفقیت آمیز دیسک محلی، هسته ها یا حافظه سرور مورد نیاز است. چنین تغییراتی از طریق کامپوننت OpenStack Nova با استفاده از یک درخواست انجام می شود تغییر اندازه. Nova پیش فرض پس از درخواست تغییر اندازه سرور را در وضعیت قرار می دهد verify_resize و منتظر تایید اضافی از کاربر است. با این حال، این رفتار را می توان تغییر داد تا Nova منتظر اقدامات اضافی از سوی کاربر نباشد.
آرگومان مشخص شده به Terraform اجازه می دهد تا منتظر وضعیت نباشد verify_resize برای سرور و آماده باشید تا سرور پس از تغییر پارامترها در وضعیت فعال قرار گیرد. آرگومان از نسخه 1.10.0 ارائه دهنده OpenStack Terraform در دسترس است: pull#422.
ایجاد منابع
قبل از اجرای مانیفستها، لطفاً توجه داشته باشید که در مثال ما، دو ارائهدهنده مختلف راهاندازی میشوند و ارائهدهنده OpenStack به منابع ارائهدهنده Selectel بستگی دارد، زیرا بدون ایجاد کاربر در پروژه، مدیریت اشیاء متعلق به آن غیرممکن است. . متأسفانه، به همین دلیل ما نمی توانیم فقط دستور را اجرا کنیم terraform اعمال شود داخل مثال ما ابتدا باید انجام دهیم درخواست برای ماژول پروژه_با_کاربر و بعد از آن برای هر چیز دیگری.
توجه: این مشکل هنوز در Terraform حل نشده است، می توانید بحث را در Github در ادامه مطلب دنبال کنید شماره 2430 и شماره 4149.
پس از اجرای دستور، Terraform نشان می دهد که چه منابعی را می خواهد ایجاد کند و درخواست تأیید می کند:
Plan: 3 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
پس از ایجاد پروژه، کاربر و نقش، می توانید شروع به ایجاد منابع باقی مانده کنید:
با استفاده از IP مشخص شده می توانید از طریق SSH با ماشین مجازی ایجاد شده کار کنید.
ویرایش منابع
علاوه بر ایجاد منابع از طریق Terraform، می توان آنها را نیز تغییر داد.
به عنوان مثال، بیایید با تغییر مقادیر پارامترها، تعداد هسته ها و حافظه سرور خود را افزایش دهیم. server_vcpus и server_ram_mb در پرونده examples/vpc/server_local_root_disk/main.tf:
در ما مخازن نمونه همچنین می توانید مانیفست هایی را برای ایجاد ماشین های مجازی با درایوهای شبکه مشاهده کنید.
نمونه ای از ایجاد یک خوشه Kubernetes
قبل از اینکه به مثال بعدی برویم، منابعی را که قبلا ایجاد کرده بودیم پاکسازی می کنیم. برای انجام این کار در روت پروژه terraform-examples/examples/vpc/server_local_root_disk بیایید دستور حذف اشیاء OpenStack را اجرا کنیم:
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
این مثال یک پروژه ایجاد می کند، یک کاربر با نقشی در پروژه، و یک خوشه Kubernetes را بالا می برد. در پرونده vars.tf می توانید مقادیر پیش فرض مانند تعداد گره ها، ویژگی های آنها، نسخه Kubernetes و غیره را مشاهده کنید.
برای ایجاد منابع مشابه مثال اول، ابتدا شروع به مقداردهی اولیه ماژول ها و ایجاد منابع ماژول می کنیم پروژه_با_کاربرو سپس هر چیز دیگری را ایجاد کنید:
ما ایجاد و مدیریت خوشه های Kubernetes را از طریق جزء OpenStack Magnum منتقل خواهیم کرد. می توانید در یکی از ما درباره نحوه کار با یک خوشه اطلاعات بیشتری کسب کنید مقالات قبلیو همچنین در دانش محور.
هنگام آماده سازی کلاستر، دیسک ها و ماشین های مجازی ایجاد می شوند و تمام اجزای لازم نصب می شوند. آماده سازی حدود 4 دقیقه طول می کشد، در این مدت Terraform پیام هایی مانند:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
پس از اتمام نصب، Terraform نشان می دهد که خوشه آماده است و شناسه آن را نمایش می دهد:
برای مدیریت خوشه Kubernetes ایجاد شده از طریق ابزار کوبکتل شما باید فایل دسترسی کلاستر را دریافت کنید. برای انجام این کار، به پروژه ایجاد شده از طریق Terraform در لیست پروژه های موجود در حساب خود بروید:
بعد، لینک لایک را دنبال کنید xxxxxx.selvpc.ruکه در زیر نام پروژه ظاهر می شود:
برای اطلاعات ورود به سیستم، از نام کاربری و رمز عبوری که از طریق Terraform ایجاد کرده اید استفاده کنید. اگر تقلب نکردی vars.tf یا main.tf برای مثال ما، کاربر نام خواهد داشت tf_user. شما باید از مقدار متغیر به عنوان رمز عبور استفاده کنید TF_VAR_user_password، که در راه اندازی مشخص شد terraform اعمال شود زودتر
در داخل پروژه باید به تب بروید کوبرنیتس:
این جایی است که خوشه ایجاد شده از طریق Terraform قرار دارد. دانلود فایل برای کوبکتل می توانید در تب "دسترسی":
دستورالعمل نصب در همان تب قرار دارد. کوبکتل و استفاده از دانلود شده config.yaml.
پس از پرتاب کوبکتل و تنظیم متغیر محیطی KUBECONFIG می توانید از Kubernetes استفاده کنید:
وقتی تعداد گره ها تغییر کرد، خوشه در دسترس باقی می ماند. پس از اضافه کردن یک گره از طریق Terraform، می توانید بدون تنظیمات اضافی از آن استفاده کنید:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
tf-cluster-rz6nggvs4va7-master-0 Ready,SchedulingDisabled master 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-0 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-1 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-2 Ready <none> 3m v1.12.4
نتیجه
در این مقاله با راه های اصلی کار آشنا شدیم "ابر خصوصی مجازی" از طریق Terraform. اگر از ارائه دهنده رسمی Terraform Selectel استفاده کنید و بازخورد خود را ارائه دهید، خوشحال خواهیم شد.
هر گونه اشکال یافت شده در ارائه دهنده Selectel Terraform می تواند از طریق گزارش شود مسائل Github.