Салом! Номи ман Сергей, ман DevOps дар Surf ҳастам. Шӯъбаи DevOps дар Surf ҳадафи он аст, ки на танҳо робитаи мутақобила байни мутахассисон ва ҳамгироии равандҳои корӣ, балки фаъолона таҳқиқ ва татбиқи технологияҳои ҷорӣ ҳам дар инфрасохтори худ ва ҳам дар инфрасохтори фармоишгар.
Дар зер ман каме дар бораи тағирот дар стек технологии контейнерҳо сӯҳбат хоҳам кард, ки мо ҳангоми омӯзиши тақсимот дучор шудем. CentOS 8 ва дар бораи он чӣ аст CRI-O ва чӣ тавр ба зудӣ таъсис додани муҳити иҷрошаванда барои Кубернитель.
Чаро Docker ба CentOS 8 дохил карда нашудааст?
Пас аз насб кардани охирин релизҳои асосӣ rhel 8 ё CentOS 8 пайхас кардан мумкин нест: ин дистрибюторхо ва анборхои расмй аризаро дарбар намегиранд Доктор, ки аз чихати идеявй ва функсиона-лй иваз кардани пакетхо Подман, Buildah (дар тақсимот бо нобаёнӣ мавҷуд аст) ва CRI-O. Ин ба татбиқи амалии стандартҳои аз ҷониби Red Hat дар доираи лоиҳаи Ташаббуси Open Container (OCI) таҳияшуда вобаста аст.
Ҳадафи OCI, ки қисми Фонди Linux мебошад, эҷоди стандартҳои кушоди саноатӣ барои форматҳои контейнерӣ ва вақтҳои корӣ мебошад, ки дар як вақт якчанд мушкилотро ҳал мекунанд. Аввалан, онҳо ба фалсафаи Linux мухолифат намекарданд (масалан, дар қисмате, ки ҳар як барнома бояд як амалро иҷро кунад ва Доктор як навъ комбайни якхела мебошад). Дуюм, онҳо метавонистанд ҳамаи камбудиҳои мавҷудаи нармафзорро бартараф кунанд Доктор. Сеюм, онҳо бо талаботи тиҷоратии платформаҳои пешрафтаи тиҷоратӣ барои ҷойгиркунӣ, идоракунӣ ва хидматрасонии замимаҳои контейнерӣ комилан мувофиқ хоҳанд буд (масалан, Red Hat OpenShift).
Нобудӣ Доктор ва бартариҳои нармафзори нав аллакай дар баъзе муфассал тавсиф шудаанд
Бояд қайд кард, ки ҷузъҳои стек пешниҳодшуда кадом функсияҳоро доранд:
- Подман — ҳамкории мустақим бо контейнерҳо ва нигоҳдории тасвир тавассути раванди runC;
- Buildah — ҷамъоварӣ ва боркунии тасвирҳо ба реестр;
- CRI-O — муҳити иҷрошаванда барои системаҳои оркестрсозии контейнер (масалан, Kubernetes).
Ман фикр мекунам, ки барои фаҳмидани нақшаи умумии ҳамкории байни ҷузъҳои стек тавсия дода мешавад, ки диаграммаи пайвастшавӣ дар ин ҷо пешниҳод карда шавад. Кубернитель c давиданC ва китобхонаҳои сатҳи паст истифода мебаранд CRI-O:
CRI-O и Кубернитель ба ҳамон як релиз ва давраи дастгирӣ риоя кунед (матрисаи мутобиқат хеле содда аст: версияҳои асосӣ Кубернитель и CRI-O мувофиқат мекунад) ва ин бо дарназардошти тамаркуз ба санҷиши пурра ва ҳамаҷонибаи кори ин стек аз ҷониби таҳиягарон, ба мо ҳуқуқ медиҳад, ки устувории ҳадди аксар дастрасро дар ҳама гуна сенарияи истифода интизор шавем (дар ин ҷо сабукии нисбӣ низ муфид аст) CRI-O нисбат ба Доктор аз сабаби махдудияти максадноки функсия).
Ҳангоми насб кардан Кубернитель роҳи "роҳи дуруст" (аз рӯи OCI, албатта) истифода CRI-O ба CentOS 8 Мо ба баъзе душворихои майда-чуйда дучор шудем, вале мо онхоро бомуваффакият бартараф кардем. Ман бо хушнудӣ дастурҳои насбкунӣ ва конфигуратсияро бо шумо мубодила мекунам, ки дар маҷмӯъ тақрибан 10 дақиқа вақтро дарбар мегирад.
Чӣ гуна Kubernetes-ро дар CentOS 8 бо истифода аз чаҳорчӯбаи CRI-O ҷойгир кардан мумкин аст
Талабот: мавҷудияти ҳадди аққал як ҳост (2 ядро, 4 ГБ RAM, ҳадди аққал 15 ГБ нигоҳдорӣ) бо насбшуда CentOS 8 (профили насби "Сервер" тавсия дода мешавад), инчунин сабтҳо барои он дар DNS маҳаллӣ (ҳамчун чораи охирин, шумо метавонед бо вуруд дар /etc/hosts ба даст оред). Ва фаромӯш накунед
Мо ҳама амалҳоро дар ҳост ҳамчун корбари реша иҷро мекунем, эҳтиёт бошед.
- Дар қадами аввал, мо OS-ро танзим мекунем, вобастагии пешакӣ барои CRI-O-ро насб ва танзим мекунем.
- Биёед OS-ро навсозӣ кунем:
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, чунон ки аллакай зикр гардид, ба версияи зарурӣ мувофиқат кунед Кубернитель), аз версияи охирини устувор Кубернитель айни замон 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
- Биёед OS-ро навсозӣ кунем:
- Насбкунӣ ва фаъолсозӣ Кубернитель.
- Биёед анбори лозимиро илова кунем:
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
Акнун мо метавонем насб кунем Кубернитель (версияи 1.18, тавре ки дар боло зикр гардид):
dnf install -y kubelet-1.18* kubeadm-1.18* kubectl-1.18* --disableexcludes=kubernetes
- Нозуки дуюми муҳим: зеро мо демонро истифода намебарем Доктор, аммо мо демонро истифода мебарем CRI-O, пеш аз оғози кор ва оғозёбӣ Кубернитель ба шумо лозим аст, ки дар файли конфигуратсияи /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 ..." -ро нависед, ки аз шумо хоҳиш карда мешавад, ки дар охири натиҷа истифода баред ё ҳадди аққал токенҳои муайяншударо истифода баред.
- Биёед плагинро (CNI) барои шабакаи Pod насб кунем. Ман тавсия медиҳам, ки истифода баранд Калико. Эҳтимол маъмултар Flannel мушкилоти мутобиқат бо nftables, ва Калико - ягона татбиқи CNI, ки аз ҷониби лоиҳа тавсия ва пурра санҷида шудааст Кубернитель:
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:
Ҳаминаш ,ин ва бисьёр дигарон
Манбаъ: will.com