Armin K Milani
Armin K Milani
خواندن ۳ دقیقه·۶ سال پیش

راه اندازی 3.9 OpenShift با استفاده از CRI-O به جای Docker

تمرکز ما در این نوشته روی راه اندازی OpenShift و استفاده از CRI-O به جای Docker است بنا بر این مواردی مانند Multi-Master یا Persistent Storage در این مطلب پوشش داده نشده است و همه ی مراحل راه اندازی روی یک هاست و یه صورت All-In-One انجام خواهد شد.

اما CRI-O چیست و چرا از آن استفاده کنیم:

به طور خلاصه CRI-O مانند Docker یک Container Runtime و جایگزینی برای Docker است (البته نه در همه ی موارد) که امکان اجرای کانتینر های OCI یا Open Container Initiative (که کانتینر های Docker را نیز شامل میشود) را داراست.

اما چرا به جای Docker از CRI-O استفاده کنیم؟ چون CRI-O ساخته شده است تا بهترین Container Runtime برای Kubernetes باشد. در حقیقت تمام هدف CRI-O ایجاد بهترین شرایط برای اجرای کانتینر ها در Kubernetes است بنا بر این:

برعکس Docker که دایما و با سرعت زیاد در حال تغییر, بروز رسانی و ارایه ی ورژن های جدید است تمامی بروز رسانی ها در ورژن های CRI-O حول محور kubernetes انجام میشود و فقط امکاناتی به CRI-O اضافه می شود که در Kubernetes نیاز باشد.

همچنین تمامی تست ها از نظر Performance و Stability نیز بر اساس Kubernetes انجام میشود و ورژن های جدید فقط در صورت همخوانی کامل با Kubernetes ارایه می شوند.

بنا بر این اگر از Kubernetes یا OpenShift (که از خود از Kubernetes برای Orchestration کانتینر ها بهره می برد) استفاده می کنید, CRI-O گزینه ای سبکتر, سریع تر و پایدار تر است.

راه اندازی OpenShift با CRI-O:

من از یک هاست دارای 4G RAM و 2XCore CPU با سیستم عامل CentOS 7.5 برای راه اندازی تمامی اجزای OpenShift استفاده کردم و نصب از طریق Ansible و Advance Installation انجام خواهد شد.

نکته ی مهم: من از یک VPS خارج از کشور برای این تست استفاده کردم بنا بر این مشکلی با تحریم های موجود روی Registry ها برای دریافت image ها نداشتم در صورتی که سرور شما داخل ایران است قبل از ادامه باید از یکی از روش های شکستن تحریم Docker Registry استفاده کنید. به طور مثال VPN یا Mirror-Registry و یا استفاده از سرویس shecan.ir .

ابتدا مراحل آمده سازی هاست طبق مستندات Openshift Origin انجام میدهیم:

طبق مستندات Openshift Origin میبایست SELinux فعال باشد در غیر این صورت هنگام اجرای Ansible ممکن است با Error مواجه شوید.

ست کردن Hostname:

# hostnamectl set-hostname openshift-cri-o # echo "<Example-IP> openshift-cri-o" >> /etc/hosts

در بالا عبارت <Example-IP> را با IP ی هاست خود جایگزین کنید.

نصب پیش نیاز ها:

# yum install wget git net-tools bind-utils yum-utils iptables-services bridge-utils bash-completion kexec-tools sos psacct epel-release

سپس:

# yum install ansible pyopenssl docker # systemctl start docker # systemctl enable docker

دریافت Ansible برای نصب Openshift:

# cd ~ # git clone https://github.com/openshift/openshift-ansible # cd openshift-ansible # git checkout release-3.9

ست کردن DNS در کانفیگ اینترفیس:

# vim /etc/sysconfig/network-scripts/ifcfg-eth1 ... DNS1=8.8.8.8 DNS2=1.1.1.1 ...

اعمال تغییرات:

# systemctl restart network

نصب CRI-O با استفاده از ریپوزیتوری virt7-container-common-candidate :

# vim /etc/yum.repos.d/virt7-container.repo

متن زیر را اضافه کنید:

[virt7-container-common-candidate] name=virt7-container-common-candidate baseurl=https://cbs.centos.org/repos/virt7-container-common-candidate/x86_64/os/ enabled=1 gpgcheck=0

سپس:

# yum install cri-o cri-tools # systemctl start crio # systemctl enable crio

کانفیگ Inventory:

# vim /etc/ansible/hosts

متن زیر را به جای متن پیش فرض وارد کنید:

# Inventory [OSEv3:children] masters nodes etcd [OSEv3:vars] openshift_deployment_type=origin openshift_release=3.9 openshift_disable_check=disk_availability,memory_availability openshift_crio_use_rpm=True openshift_use_crio=True openshift_node_kubelet_args={'image-service-endpoint': ['unix:///var/run/crio.sock'], 'container-runtime-endpoint': ['unix:///var/run/crio.sock'], 'container-runtime': ['remote'], 'runtime-request-timeout': ['15m']} [masters] localhost ansible_connection=local [etcd] localhost ansible_connection=local [nodes] localhost ansible_connection=local openshift_schedulable=true openshift_node_labels="{'region': 'infra', 'zone': 'default', 'runtime': 'cri-o'}"

اجرای Ansible برای بررسی پیش نیاز ها:

# cd /root/openshift-ansible # ansible-playbook playbooks/prerequisites.yml

در صورتی که Error ای دریافت نکردید و با موفقیت به اتمام رسید مرحله ی بعدی را اجرا کنید در غیر این صورت ابتدا Error را برطرف نمایید و همان Ansible بالا را مجدد اجرا کنید.

اجرای Ansible برای نصب OpenShift:

# ansible-playbook playbooks/deploy_cluster.yml

اجرای Ansible بالا بسته به کانفیگ Inventory زمان زیادی میبرد و چندین دقیقه برای اجرا روی یک هاست زمان خواهد برد.

بعد از اتمام hostname سرور را به فایل hosts روی سیستم خود اضافه کنید و کنسول وب Openshift را با آدرس https://openshift-cri-o:8443 روی مرورگر خود باز کنید.

# echo "<Example-IP> openshift-cri-o" >> /etc/hosts

میتوانید با username: system و password: admin لاگین کنید.

برای بررسی عملکرد صحیح OpenShift از قسمت Service Catalog در پنل وب یک service دلخواه که نیازی به Persistent Storage نداشته باشد اجرا کنید برای مثال Nginx.

با اجرای دستور زیر:

# docker ps -a

متوجه خواهید شد که هیچ یک از کانتینرهای OpenShift از جمله سرویس های زیرساختی (Infra) روی docker اجرا نشده است .

برای بررسی کانتینر های در حال اجرا در CRI-O از دستور زیر استفاده نمایید:

# runc list

برای مطالعه ی بیشتر در مورد مزایای CRI-O می توانید این لینک رو مطالعه کنید که مربوط به RedHat-Atomic-Project هست.

dockerlinuxkubernetesopenshiftcrio
Fan of Tux and Gopher - SRE Lead @ArvanCloud
شاید از این پست‌ها خوشتان بیاید