Сайн уу? Намайг Сергей гэдэг, би Surf-ийн DevOps. Surf дахь DevOps хэлтэс нь мэргэжилтнүүдийн хоорондын харилцаа холбоог бий болгох, ажлын процессыг нэгтгэх зорилготой төдийгүй өөрийн дэд бүтэц болон хэрэглэгчийн дэд бүтцэд одоогийн технологийг идэвхтэй судалж, хэрэгжүүлэх зорилготой юм.
Доор би түгээлтийг судлах явцад бидэнд тохиолдсон савны технологийн стек дэх өөрчлөлтүүдийн талаар бага зэрэг ярих болно. CentOS 8 мөн энэ нь юу болох талаар CRI-O болон гүйцэтгэх боломжтой орчинг хэрхэн хурдан тохируулах талаар Kubernetes.
Docker яагаад CentOS 8-д ороогүй вэ?
Хамгийн сүүлийн үеийн томоохон хувилбаруудыг суулгасны дараа RHEL 8 буюу CentOS 8 Үүнийг анзаарахгүй байхын аргагүй: эдгээр түгээлтүүд болон албан ёсны репозиторууд нь програмыг агуулаагүй болно Docker, үзэл суртлын болон үйл ажиллагааны хувьд багцуудыг орлуулдаг Подман, Биллах (өгөгдмөл байдлаар түгээлтэд байгаа) ба CRI-O. Энэ нь Red Hat-аас Нээлттэй Контейнер Санаачлага (OCI) төслийн хүрээнд боловсруулсан стандартуудыг бодитоор хэрэгжүүлж байгаатай холбоотой юм.
Линуксийн сангийн нэг хэсэг болох OCI-ийн зорилго нь хэд хэдэн асуудлыг нэг дор шийддэг чингэлэг формат болон ажиллах хугацааны нээлттэй салбарын стандартыг бий болгох явдал юм. Нэгдүгээрт, тэд Линуксийн философитой зөрчилдөөгүй (жишээлбэл, програм бүр нэг үйлдлийг гүйцэтгэх ёстой гэсэн хэсэгт). Docker нэг төрлийн комбайн юм). Хоёрдугаарт, тэд програм хангамжийн одоо байгаа бүх дутагдлыг арилгах боломжтой Docker. Гуравдугаарт, тэдгээр нь чингэлэгжүүлсэн програмуудыг (жишээ нь Red Hat OpenShift) байрлуулах, удирдах, үйлчлэхэд зориулагдсан тэргүүлэх арилжааны платформуудын бизнесийн шаардлагад бүрэн нийцэх болно.
дутагдлууд Docker шинэ програм хангамжийн давуу талуудыг аль хэдийн дэлгэрэнгүй тайлбарласан болно
Санал болгож буй стекийн бүрэлдэхүүн хэсгүүд ямар функцтэй болохыг анхаарах нь чухал юм.
- Подман — runC процессоор дамжуулан контейнер, дүрс хадгалах шууд харилцан үйлчлэл;
- Биллах - зураг цуглуулах, бүртгэлд оруулах;
- CRI-O - контейнер зохион байгуулах системд зориулсан гүйцэтгэх орчин (жишээлбэл, Kubernetes).
Стекийн бүрэлдэхүүн хэсгүүдийн харилцан үйлчлэлийн ерөнхий схемийг ойлгохын тулд холболтын диаграммыг энд өгөх нь зүйтэй гэж би бодож байна. Kubernetes c гүйхC болон доод түвшний номын сангуудыг ашиглан CRI-O:
CRI-O и Kubernetes ижил хувилбар, дэмжлэгийн мөчлөгийг дагаж мөрдөх (нийцтэй байдлын матриц нь маш энгийн: үндсэн хувилбарууд Kubernetes и CRI-O давхцаж байгаа) бөгөөд энэ нь хөгжүүлэгчид энэхүү стекийн ажиллагааг бүрэн, иж бүрэн туршихад анхаарлаа хандуулж байгаа нь ашиглалтын ямар ч хувилбарт ажиллахад хамгийн дээд хэмжээнд хүрч болох тогтвортой байдлыг хүлээх эрхийг бидэнд олгодог (харьцангуй хөнгөн байдал нь энд бас ашигтай байдаг) CRI-O тай харьцуулахад Docker функциональ хязгаарлалттай холбоотой).
Суулгах үед Kubernetes "Зөв арга зам" арга зам (мэдээж OCI дагуу) ашиглах CRI-O тухай CentOS 8 Бид бага зэргийн бэрхшээлтэй тулгарсан ч бид үүнийг амжилттай даван туулсан. Нийтдээ 10 минут шаардагдах суулгах, тохируулах зааврыг би тантай хуваалцахдаа баяртай байх болно.
CRI-O хүрээг ашиглан CentOS 8 дээр Kubernetes-ийг хэрхэн байрлуулах вэ
Тавигдах шаардлага: суулгасан дор хаяж нэг хост (2 цөм, 4 ГБ RAM, дор хаяж 15 ГБ санах ой) байх CentOS 8 ("Сервер" суулгацын профайлыг ашиглахыг зөвлөж байна), түүнчлэн локал DNS-д оруулах оруулгууд (хамгийн сүүлчийн арга бол та /etc/hosts-д нэвтрэх боломжтой). Мөн мартаж болохгүй
Бид үндсэн хэрэглэгчийн хувьд хост дээрх бүх үйлдлийг гүйцэтгэдэг тул болгоомжтой байгаарай.
- Эхний алхамд бид үйлдлийн системээ тохируулж, CRI-O-ийн урьдчилсан хамаарлыг суулгаж, тохируулах болно.
- Үйлдлийн системээ шинэчилье:
dnf -y update
- Дараа нь та галт хана болон SELinux-ийг тохируулах хэрэгтэй. Энд бүх зүйл манай хост эсвэл хостууд ажиллах орчноос хамаарна. -аас өгсөн зөвлөмжийн дагуу та галт ханыг тохируулж болно
баримт бичиг , эсвэл хэрэв та итгэмжлэгдсэн сүлжээнд байгаа эсвэл гуравдагч талын галт хана ашигладаг бол өгөгдмөл бүсийг итгэмжлэгдсэн болгож өөрчлөх эсвэл галт ханыг унтраа:firewall-cmd --set-default-zone trusted firewall-cmd --reload
Галт ханыг унтраахын тулд та дараах тушаалыг ашиглаж болно.
systemctl disable --now firewalld
SELinux-ийг унтраах эсвэл "зөвшөөрөх" горимд шилжүүлэх шаардлагатай:
setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- Шаардлагатай цөмийн модулиуд болон багцуудыг ачаалж, системийг эхлүүлэх үед "br_netfilter" модулийг автоматаар ачаалах тохиргоог хийнэ үү.
modprobe overlay modprobe br_netfilter echo "br_netfilter" >> /etc/modules-load.d/br_netfilter.conf dnf -y install iproute-tc
- Пакет дамжуулах, урсгалыг зөв боловсруулахын тулд бид зохих тохиргоог хийнэ.
cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF
хийсэн тохиргоог хэрэглэнэ:
sysctl --system
- шаардлагатай хувилбарыг тохируулна уу CRI-O (гол хувилбар CRI-O, аль хэдийн дурьдсанчлан, шаардлагатай хувилбарыг тааруулах Kubernetes), хамгийн сүүлийн үеийн тогтвортой хувилбараас хойш Kubernetes одоогоор 1.18:
export REQUIRED_VERSION=1.18
шаардлагатай агуулахуудыг нэмнэ үү:
dnf -y install 'dnf-command(copr)' dnf -y copr enable rhcontainerbot/container-selinux curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/CentOS_8/devel:kubic:libcontainers:stable.repo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION/CentOS_8/devel:kubic:libcontainers:stable:cri-o:$REQUIRED_VERSION.repo
- Одоо бид суулгаж болно CRI-O:
dnf -y install cri-o
Суулгах явцад бидний тулгардаг эхний нюансуудад анхаарлаа хандуулаарай: та тохиргоог засах хэрэгтэй CRI-O Үйлчилгээг эхлүүлэхийн өмнө шаардлагатай нийтлэг бүрэлдэхүүн хэсэг нь зааснаас өөр байршилтай тул:
sed -i 's//usr/libexec/crio/conmon//usr/bin/conmon/' /etc/crio/crio.conf
Одоо та демоныг идэвхжүүлж, эхлүүлж болно CRI-O:
systemctl enable --now crio
Та демоны статусыг шалгаж болно:
systemctl status crio
- Үйлдлийн системээ шинэчилье:
- Суулгах, идэвхжүүлэх Kubernetes.
- Шаардлагатай агуулахыг нэмье:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-$basearch enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg exclude=kubelet kubeadm kubectl EOF
Одоо бид суулгаж болно Kubernetes (дээр дурдсанчлан 1.18 хувилбар):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- Хоёрдахь чухал нюанс: бид демон ашигладаггүй тул Docker, гэхдээ бид демон ашигладаг CRI-O, эхлүүлэх болон эхлүүлэхийн өмнө Kubernetes Та эхлээд хүссэн лавлахаа үүсгэсний дараа /var/lib/kubelet/config.yaml тохиргооны файлд тохирох тохиргоог хийх хэрэгтэй:
mkdir /var/lib/kubelet cat <<EOF > /var/lib/kubelet/config.yaml apiVersion: kubelet.config.k8s.io/v1beta1 kind: KubeletConfiguration cgroupDriver: systemd EOF
- Суулгах явцад бидний тулгардаг гурав дахь чухал зүйл бол бид ашигласан драйверийг зааж өгсөн ч гэсэн бүлэг, дамжуулсан аргументуудаар дамжуулан түүний тохиргоо кубелет хуучирсан (баримт бичигт тодорхой заасан) бид файлд аргумент нэмэх шаардлагатай, эс тэгвээс манай кластерыг эхлүүлэхгүй:
cat /dev/null > /etc/sysconfig/kubelet cat <<EOF > /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS=--container-runtime=remote --cgroup-driver=systemd --container-runtime-endpoint='unix:///var/run/crio/crio.sock' EOF
- Одоо бид демоныг идэвхжүүлж болно кубелет:
sudo systemctl enable --now kubelet
Өөрчлөхийн тулд хяналтын онгоц буюу ажилчин хэдэн минутын дотор зангилаа, та ашиглаж болно
энэ скриптээр .
- Шаардлагатай агуулахыг нэмье:
- Кластераа эхлүүлэх цаг болжээ.
- Кластерыг эхлүүлэхийн тулд дараах тушаалыг ажиллуулна уу:
kubeadm init --pod-network-cidr=10.244.0.0/16
Гаралтын төгсгөлд ашиглахыг хүссэн "kubeadm join ..." кластерт нэгдэх командыг эсвэл ядаж заасан жетонуудыг бичихээ мартуузай.
- Pod сүлжээнд зориулсан залгаасыг (CNI) суулгацгаая. Би ашиглахыг зөвлөж байна Калико. Илүү алдартай байж магадгүй Flannel нийцтэй байдлын асуудал байна nftables, ба Калико - төслийн зүгээс санал болгож, бүрэн туршсан цорын ганц CNI хэрэгжилт Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- Ажлын зангилааг манай кластерт холбохын тулд та үүнийг 1, 2-р зааврын дагуу тохируулах эсвэл ашиглах хэрэгтэй.
скрипт , дараа нь өмнөх алхам дээр бичсэн "kubeadm init..." гаралтаас тушаалыг ажиллуулна уу:kubeadm join $CONTROL_PLANE_ADDRESS:6443 --token $TOKEN --discovery-token-ca-cert-hash $TOKEN_HASH
- Манай кластер ажиллаж эхэлсэн эсэхийг шалгацгаая:
kubectl --kubeconfig=/etc/kubernetes/admin.conf get pods -A
Бэлэн! Та K8s кластер дээрээ ачааллыг байршуулах боломжтой.
- Кластерыг эхлүүлэхийн тулд дараах тушаалыг ажиллуулна уу:
Бидний өмнө юу хүлээж байна
Дээрх заавар нь танд бага зэрэг цаг хугацаа, мэдрэлийг хэмнэхэд тусалсан гэж найдаж байна.
Салбарт гарч буй үйл явцын үр дүн нь ихэнх хэрэглэгчид болон холбогдох салбар дахь бусад програм хангамжийг хөгжүүлэгчид хэрхэн хүлээж авахаас хамаардаг. Хэдэн жилийн дараа OCI санаачилгууд юунд хүргэх нь одоогоор тодорхойгүй байгаа ч бид баяртайгаар ажиглах болно. Та яг одоо сэтгэгдэл дээр санал бодлоо хуваалцах боломжтой.
Тогтмол байгаарай!
Энэ нийтлэл дараах эх сурвалжийн ачаар гарч ирэв.
- Контейнер ажиллах хугацааны тухай хэсэг
Kubernetes баримт бичиг Хуудас Интернет дэх CRI-O төсөл- Red Hat блог нийтлэлүүд:
энэ нэг ,энэ нь болон бусад олон
Эх сурвалж: www.habr.com