以下では、CentOS 8ディストリビューションを研究するときに遭遇したコンテナの技術スタックの変更、CRI-Oとは何か、およびそれを使用してKubernetesの実行可能環境をすばやくセットアップする方法について少し説明します。
Dockerが標準のCentOS8ディストリビューションにない理由
最新メジャーリリースのインストール後RHEL 8またはCentOSの8を、 1は、通知に失敗することはできません。これらの分布と公式リポジトリにはないドッカーのアプリケーションイデオロギー的及び機能的に置き換え、Podman、Buildahパッケージ(デフォルトの配布に存在する)とCRI-Oを。これは、とりわけ、Open Container Initiative(OCI)の一部としてRedHatによって開発された標準の実用的な実装によるものです。
The Linux Foundationの一部であるOCIの目標は、複数の課題に対処するコンテナ形式とランタイムのオープンな業界標準を作成することです。まず、Linuxの哲学と矛盾していませんでした(たとえば、各プログラムが1つのアクションを実行する必要があり、Dockerは一種のオールインワンハーベスターです)。次に、Dockerソフトウェアの既存の欠陥をすべて排除することができます。第3に、コンテナ化されたアプリケーション(Red Hat OpenShiftなど)を展開、管理、および提供するための主要な商用プラットフォームのビジネス要件に完全に準拠します。Dockerの
デメリット新しいソフトウェアの利点については、この記事ですでに詳細に説明されています。また、OCIプロジェクト内で提供されるソフトウェアスタック全体とそのアーキテクチャ機能の詳細については、公式ドキュメントとRed Hat自体の記事(Red Hatブログの優れた記事)に記載されています。およびサードパーティのレビュー。
提案されたスタックのコンポーネントがどのような機能を持っているかに注意することが重要です。
- Podman -runCプロセスを介したコンテナおよびイメージストレージとの直接対話。
- Buildah-イメージをビルドしてレジストリにロードします。
- CRI-Oは、コンテナオーケストレーションシステム(Kubernetesなど)の実行可能なフレームワークです。
スタックのコンポーネント間の相互作用の一般的なスキームを理解するために、CRI-Oを使用したrunCおよび低レベルライブラリとのKubernetesの接続図をここに示すことをお勧めします:CRI-OとKubernetesは同じリリースとサポートサイクルに準拠しています(互換性マトリックスは非常に単純です:メジャーバージョンKubernetesとCRI-Oは同じです)、これは、開発者によるこのスタックの作業の完全かつ包括的なテストに焦点を当てることを考慮に入れると、あらゆるユースケースでの作業で達成可能な最大の安定性を期待する権利を与えます(ここでは、CRI-Oの相対的な軽さも比較して有益ですから
機能の意図的な制限によるDocker)。
インストールするときにKubernetesを使用して(もちろん、OCIによる)「正しい道」道CRI-Oの上でCentOSの8、我々は、しかし、成功し克服された小型の難しさ、に走りました。インストールと構成の手順をお知らせします。これらを合わせて最大10分かかります。
CRI-Oを使用してCentOS8にKubernetesをデプロイする方法
前提条件:CentOS 8がインストールされた少なくとも1つのホスト(2コア、4 GB RAM、少なくとも15 GBドライブ)(「サーバー」インストールプロファイルを推奨)、およびローカル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 «permissive»:
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 , conmon :
sed -i 's/\/usr\/libexec\/crio\/conmon/\/usr\/bin\/conmon/' /etc/crio/crio.conf
CRI-O:
systemctl enable --now crio
:
systemctl status crio
- OSを更新しましょう:
- 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
- , : , cgroup, kubelet ( ), , :
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
- :
- .
- :
kubeadm init --pod-network-cidr=10.244.0.0/16
«kubeadm join ...», , , , .
- (CNI) Pod network. Calico. , Flannel nftables, Calico — CNI, Kubernetes:
kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f https://docs.projectcalico.org/v3.15/manifests/calico.yaml
- worker 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のブログ投稿:これ、これ、その他