راه اندازی 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 هست.