به گزارش از وبسایت cncf، این مطلب توسط Anish Bista و Zespre Chang منتشر شده است. در نوشته قبلی، KubeVirtBMC معرفی شد و نشان داده شد که چگونه برای KubeVirt VMها endpointهای مجازی BMC ارائه می‌دهد. در آن بخش، این ابزار را با دستورهای خام IPMI و Redfish آزمایش کردیم. نتیجه جالب بود، اما قدرت واقعی KubeVirtBMC زمانی دیده می‌شود که آن را در کنار ابزارهای واقعی provisioning برای bare-metal به کار بگیریم. در این مطلب، یک دموی کامل و end-to-end را بررسی می‌کنیم: استفاده از Metal3 برای مدیریت و provision کردن KubeVirt VMها از طریق KubeVirtBMC، درست مانند اینکه این VMها سرورهای فیزیکی باشند. شما می‌توانید همه مراحل را دنبال کنید و خودتان هم آن را اجرا کنید 🙂

چرا Metal3؟ Metal3 با نام Metal Kubed یک پروژه در مرحله CNCF Incubating است که مدیریت hostهای bare-metal را وارد اکوسیستم Kubernetes می‌کند. این پروژه در پشت صحنه از OpenStack Ironic برای انجام کارهای سنگین استفاده می‌کند؛ از جمله بررسی سخت‌افزار، تنظیم boot device و نوشتن image سیستم‌عامل روی دیسک‌ها. هسته اصلی این مدل، resource سفارشی BareMetalHost است. شما فقط مشخص می‌کنید چه چیزی می‌خواهید؛ مثل آدرس BMC، credentials و image موردنظر، و Metal3 بقیه کار را انجام می‌دهد ⚙️

چرخه معمول BareMetalHost به این شکل است: Metal3 انتظار دارد با یک BMC از طریق IPMI یا Redfish ارتباط برقرار کند. سرورهای فیزیکی این قابلیت را به‌صورت داخلی دارند، اما KubeVirt VMها چنین چیزی ندارند؛ مگر اینکه با KubeVirtBMC این امکان را برایشان فراهم کنید.

آنچه در اینجا می‌سازیم در ادامه، نمایی کلی از محیط این دمو را می‌بینید: همه چیز داخل یک Kubernetes cluster اجرا می‌شود. Metal3 روی resourceهای BareMetalHost مدیریت انجام می‌دهد و این resourceها به endpointهای BMC مجازی که توسط KubeVirtBMC ساخته شده‌اند اشاره می‌کنند. وقتی Metal3 به Ironic دستور می‌دهد یک host را روشن کند یا boot image را متصل کند، Ironic درخواست‌های Redfish را به pod مربوط به BMC می‌فرستد. سپس آن pod این درخواست‌ها را به Kubernetes API تبدیل می‌کند و از این طریق KubeVirt VM را کنترل می‌کند. در این میان، Metal3 اصلاً متوجه نمی‌شود که پشت صحنه با یک VM سروکار دارد، نه یک سرور فیزیکی 🙂

پیش‌نیازها قبل از شروع، مطمئن شوید موارد زیر را در اختیار دارید: یک Kubernetes cluster با پشتیبانی از virtualization (nested virtualization یا bare metal) ، KubeVirt نصب‌شده و فعال، یک storage provider برای دیسک‌های VM، و ابزارهای kubectl، helm و kustomize روی سیستم محلی شما.

اگر هنوز cluster آماده ندارید، برای راه‌اندازی می‌توانید به مطلب قبلی مراجعه کنید و از KubeVirt CI کمک بگیرید، یا ساده‌تر از Harvester استفاده کنید.

مرحله ۱: نصب cert-manager هم KubeVirtBMC و هم اجزای Metal3 برای certificateهای webhook به cert-manager نیاز دارند.

helm upgrade --install cert-manager oci://quay.io/jetstack/charts/cert-manager 
  --namespace=cert-manager 
  --create-namespace 
  --set=crds.enabled=true

مرحله ۲: نصب KubeVirtBMC

helm upgrade --install kubevirtbmc kubevirtbmc 
  --repo=https://charts.kubevirtbmc.io 
  --namespace=kubevirtbmc-system 
  --create-namespace

بررسی:

$ kubectl get pods -n kubevirtbmc-system
NAME                                    READY   STATUS    RESTARTS   AGE
kubevirtbmc-controller-manager-xxxxx    1/1     Running   0          30s

مرحله ۳: ساخت یک KubeVirt VM با BMC

در این بخش، یک VM می‌سازیم که نقش یک سرور bare-metal را شبیه‌سازی کند. این VM به یک disk، یک network interface و حالت شروع خاموش نیاز دارد تا Metal3 بتواند چرخه حیات آن را از ابتدا مدیریت کند 🔧

ابتدا یک PVC برای root disk ماشین مجازی ایجاد کنید:

cat