نصب کلاستر با rancher (قسمت نوزدهم)

توی این قسمت میریم به سراغ اینکه بررسی کنیم چطوری می‌تونیم یه کلاستر کوبرنتیز رو با استفاده از rancher ستاپ کنیم و بیاریم بالا.

خب یه مروری کنیم پست‌های قبلی رو:

توصیه می‌کنم که حتما این پست‌ها رو هم مطالعه کنید. بریم که ادامه بدیم.

RANCHER
RANCHER

راه‌اندازی یک کلاستر Kubernetes با RKE:

ابزارRancher Kubernetes Engine (RKE) یک توزیع Kubernetes تایید شده از طرف CNCF است که کاملاً درون کانتینرهای Docker اجرا می‌شود. این توزیع روی سرورهای فیزیکی و مجازی کار می‌کند. RKE مشکل پیچیدگی نصب، که یک مشکل رایج در جامعه Kubernetes است، را حل می‌کند. با RKE، نصب و پیاده‌سازی Kubernetes هم ساده‌تر و هم به راحتی قابل اتوماسیون است و کاملاً مستقل از سیستم‌عامل و پلتفرمی است که شما استفاده می‌کنید. به شرطی که بتوانید یک نسخه پشتیبانی‌شده از Docker را اجرا کنید، می‌توانید Kubernetes را با RKE راه‌اندازی و اجرا کنید. این روش خیلی برای جاهایی که می‌خواهیم تعداد زیادی کلاستر کوبرنتیز ایجاد و نگهداری کنیم مناسبه. خیلی می‌تونیم باهاش به راحتی چندین کلاستر رو به صورت توصیفی ایجاد کنیم.

RKE
RKE

پیشنیازها

ابزار RKE بر روی تقریباً هر سیستم‌عامل لینوکس با نصب Docker اجرا می‌شود. کاربر SSH که برای دسترسی به نودها استفاده می‌شود باید عضو گروه docker بر روی نود باشد:

				
					usermod -aG docker <user_name>
				
			

در نودهای ورکر، باید swap غیرفعال شود.

تنظیمات sysctl که باید اعمال شود:

				
					net.bridge.bridge-nf-call-iptables=1
				
			

نرم‌افزارهای موردنیاز که باید نصب کنیم:

  • ابزار OpenSSH: برای ورود به هر نود از طریق SSH، باید OpenSSH نسخه ۷.۰ یا بالاتر بر روی هر نود نصب باشد و باید AllowTcpForwarding داخل کانفیگ فعال باشه.
  • ابزار Docker: تو RKE هر نسخه Kubernetes از نسخه‌های مختلف Docker پشتیبانی می‌کند. یادداشت‌های انتشار Kubernetes شامل لیست فعلی نسخه‌های Docker معتبر است. البته خود رنچر بهتون اسکریپت می‌ده که باهاش داکر رو همون نسخه‌ای که لازم دارید رو نصب کنید.
				
					# Get a script to install a specific Docker version, such as 27.5.1.
curl https://releases.rancher.com/install-docker/27.5.1.sh | sh

# Install a specific version of Docker
which docker || https://releases.rancher.com/install-docker/27.5.1.sh
				
			

الزامات سخت‌افزاری برای نودها دارای نقش ورکر بیشتر بستگی به workload شما دارد. حداقل برای اجرای اجزای نود Kubernetes نیاز به ۱ CPU (هسته) و ۱ گیگابایت حافظه دارید. البته این مقدار حداقل است و بعد از نصب حتما به مشکل می‌خورید باهاش و برای تست نصب و کانفیگ‌ها مناسب است.

برای CPU و حافظه، توصیه می‌شود که کامپوننت‌های مختلف کلاستر Kubernetes (etcd، controlplane و worker) بر روی نودها مختلف میزبانی شوند تا بتوانند به‌طور جداگانه از یکدیگر مقیاس‌بندی شوند.

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

ابتدا با کامند زیر RKE رو نصب می‌کنیم. معمولا ما یه ماشین داریم که با استفاده از آن کلاسترهای خودمون رو نصب و کانفیگ می‌کنیم. به هر حال باید جایی RKE رو نصب کنید که به سرورهای دیگه‌ی شما دسترسی داشته باشد.

				
					wget https://github.com/rancher/rke/releases/download/v1.7.3/rke_linux-amd64
chmod +x rke_linux-amd64
mv rke_linux-amd64 rke
sudo mv rke /usr/local/bin
				
			

در قدم بعدی میتونید با استفاده از اسکریپت‌های زیر لیستی از ایمیج‌های موردنیاز رو بگیرید اونها رو ذخیره و load کنید:

				
					# download rancher-images.txt list:
wget https://github.com/rancher/rancher/releases/download/v2.10.3-alpha2/rancher-images.txt

# download rancher-save-images script:
wget https://github.com/rancher/rancher/releases/download/v2.10.3-alpha2/rancher-save-images.sh

# download rancher-load-images script:
wget https://github.com/rancher/rancher/releases/download/v2.10.3-alpha2/rancher-load-images.sh
				
			

با استفاده از کامند زیر میتونید لیستی از نسخه‌هایی از کوبرنتیز که RKE پشتیبانی می‌کند و ایمیج‌های اونها رو دریافت کنید:

				
					# list all kubernetes version support
rke config --list-version --all

# Create a list of all images for one version
rke config --list-version --system-images > rancher-images.txt

# Create a list of all images for all version
rke config --list-version --all --system-images > rancher-images.txt
				
			

ایمیج‌ها رو توی سرور خودتون ذخیره کنید، برای این‌کار اسکریپت rancher-save-images.sh را با دسترسی اجرا، ران کنید:

				
					chmod +x rancher-save-images.sh
./rancher-save-images.sh --image-list ./rancher-images.txt
				
			

تو این مرحله نیازه که صبور باشید تا ایمیج‌ها داکر دریافت بشه، تو ایران صبر ایوب هم جزو نیازمندی‌های نصب هست. بعد از انجام این مرحله توی دایرکتوری شما فایل rancher-images.tar.gz ایجاد می‌شود. این فایل حاوی تمام ایمیج‌های مورد نیاز کلاستر کوبرنتیز می‌باشد.

اگه میخواید تمام ایمیج‌های ورژن‌های مختلف رو دریافت کنید میتونید از کامند زیر استفاده کنید:

				
					# get and save image list
rke config --list-version --all --system-images > rancher-images.txt
				
			
				
					# download all images
./rancher-save-images.sh --image-list ./rancher-images.txt
				
			

توی قدم بعدی ایمیج‌هایی که دریافت کردیم رو push می‌کنیم توی رجیستری private که داریم تا بتونیم از روی سرور‌ها اونو دریافت کنیم و ایمیج‌ها رو load کنیم. این کار تو ایران خیلی توصیه می‌شه. چون معمولا ما مشکل گرفتن ایمیج‌ها رو داریم با این کار یه بار می‌گیرم و هر جایی که لازم داشته باشیم ازش استفاده می‌کنیم.

بعد از اینکه ایمیج‌ها در سرور قرار گرفت به رجیستری خودتون لاگین کنید:

				
					docker login https://registry.mecan.ir
				
			

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

				
					chmod +x rancher-load-images.sh 
./rancher-load-images.sh --image-list ./rancher-images.txt --registry registry.mecan.ir
				
			

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

بعد از اینکه داکر رو نصب و کانفیگ کردید با استفاده از کامندهای زیر گروه داکر رو ایجاد کنید و یوزرتون (همونی که باهاش ssh می‌خواهید بزنید) رو بهش اضافه کنید:

				
					sudo groupadd docker
sudo usermod -aG docker $USER
				
			

یبار log-out و log-in کنید که عضویت یوزرتون در گروه re-evaluate بشه.

ایجاد کانفیگ RKE:

برای ایجاد کانفیگ RKE ما دو روش داریم. اول اینکه با دستور rke همانند زیر کانفیگ رو به صورت تعاملی باهاش بسازیم. که توصیه می‌کنم یه بار انجام بدید و بررسی کنید که باهاش آشنا بشید.

				
					rke config --name cluster.yml
				
			

مسیر دوم اینکه خودمون کانفیگ فایل رو بسازیم که در ادامه نمونه‌ی آن رو مشاهده می‌کنید. از اینجا هم می‌تونید اون رو دانلود کنید. فایلی با نام cluster.yml به شکل زیر ایجاد کنید:

				
					cat <<EOF >> cluster.yml
nodes:
				
			
				
					  - address: &quot192.168.200.11&quot
				
			
				
					    port: 8090
				
			
				
					    role:
				
			
				
					      - &quotetcd&quot
				
			
				
					      - &quotcontrolplane&quot
				
			
				
					      - &quotworker&quot
				
			
				
					    user: root
				
			
				
					    hostname_override: &quotmaster1&quot
				
			
				
					    docker_socket: /var/run/docker.sock
				
			
				
					  - address: &quot192.168.200.12&quot
				
			
				
					    port: 8090
				
			
				
					    role:
				
			
				
					      - &quotetcd&quot
				
			
				
					      - &quotcontrolplane&quot
				
			
				
					      - &quotworker&quot
				
			
				
					    user: root
				
			
				
					    hostname_override: &quotmaster3&quot
				
			
				
					    docker_socket: /var/run/docker.sock
				
			
				
					  - address: &quot192.168.200.14&quot
				
			
				
					    port: 8090
				
			
				
					    role:
				
			
				
					      - &quotworker&quot
				
			
				
					    user: root
				
			
				
					    hostname_override: &quotworker1&quot
				
			
				
					    docker_socket: /var/run/docker.sock
				
			
				
					  - address: &quot192.168.200.15&quot
				
			
				
					    port: 8090
				
			
				
					    role:
				
			
				
					      - &quotworker&quot
				
			
				
					    user: root
				
			
				
					    hostname_override: &quotworker2&quot
				
			
				
					    docker_socket: /var/run/docker.sock
				
			
				
					  - address: &quot192.168.200.16&quot
				
			
				
					    port: 8090
				
			
				
					    role:
				
			
				
					      - &quotworker&quot
				
			
				
					    user: root
				
			
				
					    hostname_override: &quotworker3&quot
				
			
				
					    docker_socket: /var/run/docker.sock
				
			
				
					# If set to true, RKE will not fail when unsupported Docker version
				
			
				
					ignore_docker_version: true
				
			
				
					# The Kubernetes version used. The default versions of Kubernetes are tied to specific versions of the system images.
				
			
				
					kubernetes_version: &quotv1.31.5-rancher1-1&quot
				
			
				
					# Set the name of the Kubernetes cluster
				
			
				
					cluster_name: &quotMeCan&quot
				
			
				
					# List of registry credentials
				
			
				
					private_registries:
				
			
				
					  - url: registry.mecan.ir
				
			
				
					    user: MeCan
				
			
				
					    password: XXXXXXXXXXX
				
			
				
					    is_default: true
				
			
				
					services:
				
			
				
					  etcd:
				
			
				
					    snapshot: true
				
			
				
					    backup_config:
				
			
				
					      interval_hours: 4
				
			
				
					      retention: 10
				
			
				
					  kube-api:
				
			
				
					    audit_log:
				
			
				
					      enabled: true
				
			
				
					      configuration:
				
			
				
					        max_age: 6
				
			
				
					        max_backup: 6
				
			
				
					        max_size: 110
				
			
				
					        path: /var/log/kube-audit/audit-log.json
				
			
				
					        format: json
				
			
				
					        policy:
				
			
				
					          apiVersion: audit.k8s.io/v1 # This is required.
				
			
				
					          kind: Policy
				
			
				
					          omitStages:
				
			
				
					            - &quotRequestReceived&quot
				
			
				
					          rules:
				
			
				
					            - level: RequestResponse
				
			
				
					              resources:
				
			
				
					              - group: &quot&quot
				
			
				
					                resources: [&quotpods&quot]
				
			
				
					    service_cluster_ip_range: 10.43.0.0/16
				
			
				
					    service_node_port_range: 30000-32767
				
			
				
					    always_pull_images: true
				
			
				
					  kube-controller:
				
			
				
					    cluster_cidr: 10.42.0.0/16
				
			
				
					  kubelet:
				
			
				
					    cluster_domain: cluster.local
				
			
				
					    extra_args:
				
			
				
					      max-pods: 250
				
			
				
					      feature-gates: RotateKubeletServerCertificate=true
				
			
				
					network:
				
			
				
					  strategy: x509
				
			
				
					  sans:
				
			
				
					    - &quot192.168.200.10&quot
				
			
				
					    - &quot192.168.200.11&quot
				
			
				
					    - &quot192.168.200.12&quot
				
			
				
					    - &quot192.168.200.13&quot
				
			
				
					    - &quotmaster.kube.mecan.ir&quot
				
			
				
					    - &quotvip.kube.mecan.ir&quot
				
			
				
					    - &quotmaster1.kube.mecan.ir&quot
				
			
				
					    - &quotmaster2.kube.mecan.ir&quot
				
			
				
					    - &quotmaster3.kube.mecan.ir&quot
				
			
				
					    - &quotmaster&quot
				
			
				
					    - &quotmaster1&quot
				
			
				
					    - &quotmaster2&quot
				
			
				
					    - &quotmaster3&quot
				
			
				
					authorization:
				
			
				
					  mode: rbac
				
			
				
					# Specify monitoring provider (metrics-server)
				
			
				
					monitoring:
				
			
				
					  provider: metrics-server
				
			
				
					  provider: metrics-server
				
			
				
					  # Available as of v1.1.0
				
			
				
					  update_strategy:
				
			
				
					    strategy: RollingUpdate
				
			
				
					    rollingUpdate:
				
			
				
					      maxUnavailable: 8
EOF
				
			

نهایتا با استفاده از کامند RKE کلاستر رو بالا میاریم. فقط حتما قبلش از دسترسی ssh به سرورهایی که معرفی کردید اطمینان کسب کنید.

				
					rke up --config ./cluster.yml
				
			

ذخیره فایل‌های مهم:

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

یک نسخه از فایل‌های زیر را در مکان امنی ذخیره کنید:

  • فایل cluster.yml: فایل پیکربندی کلاستر RKE.
  • فایل kube_config_rancher-cluster.yml: فایل Kubeconfig برای کلاستر، این فایل حاوی اطلاعات احراز هویت برای دسترسی کامل به کلاستر ایجاد شده است.
  • فایل rancher-cluster.rkestate: فایل وضعیت کلاستر Kubernetes، این فایل حاوی وضعیت فعلی کلاستر است که شامل پیکربندی RKE و سرتیفیکیت‌ها می‌باشد. این فایل در ادامه‌ی مسیر که بخواهید کلاستر رو تغییر بدید ضروری است و از روی اون تشخیص می‌ده که کلاستر در چه وضعیتی قرار دارد.

نکته: فایل وضعیت کلاستر Kubernetes فقط زمانی ایجاد می‌شود که از RKE نسخه v0.2.0 یا بالاتر استفاده کنید.

مشخصات کلاستر ایجاد شده:

خب دیگه یه کلاستر مالتی نود با استفاده از RKE ستاپ کردیم بد نیست یه مروری کنیم که این کلاستر ما چه مشخصاتی دارد:

  • نسخه‌ی کوبرنتیر ما v1.31.5-rancher1-1 است.
  • از calico برای cni استفاده کردیم.
  • برای authorization از rbac داریم استفاده می‌کنیم.
  • از etcd به صورت روزانه بکاپ می‌گیرم.
  • ۶ تا نود داریم که سه تا مستر و etcd و ورکر و سه تای دیگه تنها ورکر هستند.
  • برای certificate آدرس‌هایی که داریم رو به عنوان SAN معرفی کردیم.
  • برای IP پادها و سرویس‌ها از رنج‌های ۱۰.۴۲.۰.۰/۱۶ و ۱۰.۴۳.۰.۰/۱۶ استفاده کردیم.
  • لاگ audit کوبرنتیز رو فعال کردیم.
  • برای تمام ایمیج‌ها از رجیستری خودمون استفاده کردیم که مشخصاتش رو تو کانفیگ گذاشتیم.
  • اسم کلاستر رو MeCan گذاشتیم.
  • برای اتصال به نودها از پورت ssh غیر پیش‌فرض استفاده کردیم.
  • برای اتصال به نودها از کاربر root استفاده کردیم.
  • هاست نیم نودها رو هم بهش دادیم.

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

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

مراقب خودتون باشید. 🌹🐳🌹

دیدگاه‌ خود را بنویسید

مقاله های داکرمی

Kubernetes

نصب کلاستر با rancher (قسمت نوزدهم)

توی این قسمت میریم به سراغ اینکه بررسی کنیم چطوری می‌تونیم یه کلاستر کوبرنتیز رو با استفاده از rancher ستاپ کنیم و بیاریم بالا. خب یه مروری کنیم پست‌های قبلی رو: دواپس چیه و چرا لازمه؟ اینجا در مورد دواپس و

توضیحات بیشتر »
Kubernetes

نصب کلاستر با kubespray (قسمت هجدهم)

توی این قسمت میریم سراغ اینکه بررسی کنیم چطوری می‌تونیم یه کلاستر کوبرنتیز رو با استفاده از kubespray ستاپ کنیم و بیاریم بالا. روشی که می‌تونیم باهاش کلاستر پروداکش رو ستاپ و نگهداری کنیم. خب یه مروری کنیم پست‌های قبلی

توضیحات بیشتر »
Kubernetes

نصب کلاستر با kubeadm (قسمت هفدهم)

توی این قسمت میریم به سراغ اینکه بررسی کنیم چطوری می‌تونیم یه کلاستر کوبرنتیز رو با استفاده از kubeadm ستاپ کنیم و بیاریم بالا. خب یه مروری کنیم پست‌های قبلی رو: دواپس چیه و چرا لازمه؟ اینجا در مورد دواپس و

توضیحات بیشتر »
پیمایش به بالا