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

پیشنیازها
ابزار RKE بر روی تقریباً هر سیستمعامل لینوکس با نصب Docker اجرا میشود.
کاربر SSH که برای دسترسی به نودها استفاده میشود باید عضو گروه docker بر روی نود باشد:
				
					usermod -aG docker  
				
			
		در نودهای ورکر، باید 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 <> cluster.yml
nodes:  
				
			
		
				
					  - address: "192.168.200.11" 
				
			
		
				
					    port: 8090 
				
			
		
				
					    role: 
				
			
		
				
					      - "etcd" 
				
			
		
				
					      - "controlplane" 
				
			
		
				
					      - "worker" 
				
			
		
				
					    user: root 
				
			
		
				
					    hostname_override: "master1" 
				
			
		
				
					    docker_socket: /var/run/docker.sock 
				
			
		
				
					  - address: "192.168.200.12" 
				
			
		
				
					    port: 8090 
				
			
		
				
					    role: 
				
			
		
				
					      - "etcd" 
				
			
		
				
					      - "controlplane" 
				
			
		
				
					      - "worker" 
				
			
		
				
					    user: root 
				
			
		
				
					    hostname_override: "master3" 
				
			
		
				
					    docker_socket: /var/run/docker.sock 
				
			
		
				
					  - address: "192.168.200.14" 
				
			
		
				
					    port: 8090 
				
			
		
				
					    role: 
				
			
		
				
					      - "worker" 
				
			
		
				
					    user: root 
				
			
		
				
					    hostname_override: "worker1" 
				
			
		
				
					    docker_socket: /var/run/docker.sock 
				
			
		
				
					  - address: "192.168.200.15" 
				
			
		
				
					    port: 8090 
				
			
		
				
					    role: 
				
			
		
				
					      - "worker" 
				
			
		
				
					    user: root 
				
			
		
				
					    hostname_override: "worker2" 
				
			
		
				
					    docker_socket: /var/run/docker.sock 
				
			
		
				
					  - address: "192.168.200.16" 
				
			
		
				
					    port: 8090 
				
			
		
				
					    role: 
				
			
		
				
					      - "worker" 
				
			
		
				
					    user: root 
				
			
		
				
					    hostname_override: "worker3" 
				
			
		
				
					    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: "v1.31.5-rancher1-1" 
				
			
		
				
					# Set the name of the Kubernetes cluster 
				
			
		
				
					cluster_name: "MeCan" 
				
			
		
				
					# 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: 
				
			
		
				
					            - "RequestReceived" 
				
			
		
				
					          rules: 
				
			
		
				
					            - level: RequestResponse 
				
			
		
				
					              resources: 
				
			
		
				
					              - group: "" 
				
			
		
				
					                resources: ["pods"] 
				
			
		
				
					    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: 
				
			
		
				
					    - "192.168.200.10" 
				
			
		
				
					    - "192.168.200.11" 
				
			
		
				
					    - "192.168.200.12" 
				
			
		
				
					    - "192.168.200.13" 
				
			
		
				
					    - "master.kube.mecan.ir" 
				
			
		
				
					    - "vip.kube.mecan.ir" 
				
			
		
				
					    - "master1.kube.mecan.ir" 
				
			
		
				
					    - "master2.kube.mecan.ir" 
				
			
		
				
					    - "master3.kube.mecan.ir" 
				
			
		
				
					    - "master" 
				
			
		
				
					    - "master1" 
				
			
		
				
					    - "master2" 
				
			
		
				
					    - "master3" 
				
			
		
				
					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 استفاده کردیم.
 - هاست نیم نودها رو هم بهش دادیم.
 
تو این مستند هم به صورت کامل این مسیر به همراه اضافه و کم کردن نود و به روزرسانی کلاستر وجود داره که پیشنهاد میکنم حتما بهش سر بزنید.
توی بلاگ پستهای بعدی مطالب مربوط به کوبرنتیز رو ادامه میدیم و بیشتر با هم یاد میگیریم.
مراقب خودتون باشید. 🌹🐳🌹
															آغاز مسیر کوبر (قسمت اول) تو این قدم به معرفی ابزارهای ارکستریشن پرداختیم و مدارک کوبرنتیز رو بررسی کردیم.
کوبر سینگل ( قسمت دوم ) توی این قدم در مورد kubectl , kubeconfig توضیح دادیم و تعدادی ابزار رو معرفی کردیم که به کمک اونها میتونیم یک کوبرنتیز دمهدستی واسه تستهامون داشته باشیم.
کامپوننتهای کوبر ( قسمت سوم ) توی این پست کامپوننتهای مختلف کوبرنتیز رو بررسی کردیم و اجزای نودهای مستر و ورکر رو دونه دونه بررسی کردیم و توضیح دادیم.
پادها و مدیریت اونها در کوبرنتیز (قسمت چهارم) توی این پست در مورد پاد توی کوبرنتیز توضیح دادیم و موارد مربوط به اون رو بررسی کردیم.
								
															

