CentOS 8 に Kubernetes クラスターをインストールする方法
CentOS 8 に Kubernetes クラスターをインストールするプロセスは、CentOS 7 のプロセスとほぼ似ています (ここで実行できます)。ここでのプロセスにはいくつかの変更があります。これらの変更は主にDocker のインストールを中心に行われます。
CentOS 8 (拡張子としては RHEL 8) 以降、docker は podman と < にネイティブで置き換えられるようになりました。buildah はRedhatのツールです。実際、docker パッケージはデフォルトのパッケージ リポジトリから削除されました。
この動きによりRedhatチームは、特別な権限を必要とせずにコンテナの作成と使用のプロセスを簡素化すると同時に、Docker イメージとの互換性を維持し、デーモンを必要とせずにコンテナを操作できるようにすることを目指しています。 Podman はKubernetes 環境での実行時にさらなる柔軟性を提供すると約束していますが、まだ結論は出ていません。
この記事では、Docker-CE 上で実行される CentOS 8 プラットフォームに Kubernetes をインストールするプロセスを実行します (コミュニティ編)。後の記事では、 コンテナにpodman を使用して、同様のインストールを実行します。
前提条件
- CentOS 8 を実行する 3 つのサーバー – 1 つのマスター ノード と 2 つのワーカー ノード。
- ノードには、マシンごとに 2GB 以上の RAM を備えた CPU を少なくとも 2 つ搭載することをお勧めします。これは厳密な要件ではありませんが、主に、実行するアプリケーションのニーズによって決まります。
- すべてのノードでのインターネット接続。リポジトリからKubernetes とdocker パッケージを取得します。同様に、DNF パッケージ マネージャーがデフォルトでインストールされ、リモートでパッケージを取得できることを確認する必要があります。
- すべてのノードは、プライベート ネットワークまたはパブリック ネットワークのいずれか利用可能な方で相互に接続できる必要があります。
- sudo または root 権限を持つアカウントにアクセスする必要もあります。このチュートリアルでは、root アカウントを使用します。
注意事項
通常、ほとんどのノードには一意のMAC アドレスが付いていますが、場合によっては、 一部の仮想マシンが同じ MAC アドレスを持つ場合があります。したがって、Product_UUID と MAC アドレスがどのノードでも同一でないことを確認することをお勧めします。
Kubernetes はこれらの値を使用してクラスター内のノードを一意に識別します。これらの値が各ノードに固有でない場合、インストール プロセスが失敗する可能性があります。
ネットワークインターフェースのMACアドレスを確認し、比較します。
ip link
product_uuid を確認して比較するには、次のコマンドを実行します。
cat /sys/class/dmi/id/product_uuid
論理アーキテクチャ
私たちのインストールはマスターノードがワーカーノードを制御するように設計されています。このインストールが完了すると、論理アーキテクチャは次のようになります。
マスター ノード – このマシンは通常、コントロール プレーンとして機能し、クラスター データベースと API サーバー (kubectl CLI が通信する) を実行します。
3 ノードのKubernetes クラスターは次のようになります。
マスターノードへの Kubernetes クラスターのインストール
Kubernetes が機能するには、コンテナ化エンジンが必要です。前述したように、Docker-CE を使用します。
以下のインスティテューションはCentOS 8 マスターノード上で実行されます。
ステップ 1: ホスト名、ファイアウォール、SELinux を準備する
CentOS 8 マスターノードで、システムのホスト名を設定し、/etc/hosts ファイル内の DNS を更新します。
hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF
次に、ワーカー ノード 1 と ワーカー ノード 2 に ping を実行し、更新されたホスト ファイルが正しく動作しているかどうかを ping コマンドを使用して確認します。
ping 192.168.0.48
ping 192.168.0.49
次に、Selinux を無効にします。これは、コンテナがポッド ネットワークやその他のサービスに必要なホスト ファイル システムにアクセスできるようにするために必要です。
setenforce 0
setenforce を 0
に設定すると、事実上 SELinux が permissive に設定され、次回再起動するまで SELinux が事実上無効になります。完全に無効にするには、以下のコマンドを使用して再起動します。
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot
Kubernetes は通信とアクセスにさまざまなポートを使用します。これらのポートは Kubernetes にアクセス可能であり、ファイアウォールによって制限されない必要があります。
ポートにファイアウォール ルールを設定します。
firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
ステップ 2: CentOS 8 に Docker-CE をインストールする
次のdnf config-manager コマンドを使用して、Docker リポジトリをデフォルトのパッケージ リストに含まれていないため、最初に追加する必要があります。
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
また、containerd.io パッケージもインストールします。このパッケージは、イメージの転送と保存から、コンテナの実行と監視、低レベルのストレージ、ネットワーク接続などに至るまで、ホスト システムの完全なコンテナ ライフサイクルを管理するデーモンとして利用できます。 。
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
次に、docker-ce パッケージの最新バージョンをインストールします。
dnf install docker-ce
これで、Docker サービスを有効にして開始できるようになりました。
systemctl enable docker
systemctl start docker
ステップ 3: CentOS 8 に Kubernetes (Kubeadm) をインストールする
次に、Kubernetes リポジトリはCentOS 8 にはデフォルトでインストールされないため、手動で追加する必要があります。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
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
EOF
Kubeadm は、ベスト プラクティスに準拠した最小限の実行可能な Kubernetes クラスターをブートストラップするのに役立ちます。 kubeadm を使用すると、クラスターは Kubernetes 適合テストに合格する必要があります。
Kubeadm は、アップグレード、ダウングレード、ブートストラップ トークンの管理など、他のクラスター ライフサイクル機能もサポートしています。 Kubeadm は、Ansible や Terraform などの他のオーケストレーション ツールとの統合にも適しています。
パッケージ リポジトリの準備ができたら、kubeadm パッケージのインストールに進むことができます。
dnf install kubeadm -y
インストールが正常に完了したら、サービスを有効にして開始します。
systemctl enable kubelet
systemctl start kubelet
ステップ 4: kubeadm を使用してコントロール プレーン マスターを作成する
クラスターのコントロール プレーンとして機能する Kubernetes マスターは、クラスターに必要ないくつかの重要なサービスを実行します。そのため、初期化プロセスでは一連の事前チェックを実行して、マシンが Kubernetes を実行できる状態であることを確認します。これらの事前チェックでは警告が表示され、エラーが発生すると終了します。次に、kubeadm init がクラスター コントロール プレーン コンポーネントをダウンロードしてインストールします。
ここで、Kubernetes マスターを初期化しますが、その前に、「kubeadm init」 コマンドを実行するためにスワップを無効にする必要があります。
swapoff -a
Kubernetes マスターの初期化は、図に示すように「kubeadm init」 コマンドによって制御される完全に自動化されたプロセスです。
kubeadm init
次に、後でワーカー ノードでこのコマンドを実行する必要があるため、次のコマンドをコピーしてどこかに保存します。
kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7
ヒント: 上記のコマンドは、渡された引数に関するエラーをスローする場合があるため、エラーを回避するには、'\'
文字を削除する必要があります。最終的なコマンドは次のようになります。
kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7
Kubernetes が正常に初期化されたら、ユーザーがクラスターの使用を開始できるようにする必要があります。このシナリオでは、root ユーザーを使用します。図に示すように、sudo ユーザーを使用してクラスターを起動することもできます。
root を使用するには、次のコマンドを実行します。
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
sudo が有効なユーザーを使用するには、次のコマンドを実行します。
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ここでkubectl コマンドがアクティブ化されていることを確認します。
kubectl get nodes
この時点で、マスターノードのステータスが「NotReady」であることがわかります。これは、ポッド ネットワークをまだクラスターにデプロイしていないためです。
ポッド ネットワークは、現在のノード ネットワークの上にデプロイされる、クラスターのオーバーレイ ネットワークです。ポッド全体の接続を可能にするように設計されています。
ステップ 5: ポッド ネットワークをセットアップする
ネットワーク クラスターの展開は、ニーズに応じて非常に柔軟なプロセスであり、多くのオプションが利用可能です。インストールをできるだけシンプルにしたいため、構成や追加のコードを必要とせず、ポッドごとに 1 つの IP アドレスを提供するWeavenet プラグインを使用します。これは私たちにとって非常に便利です。さらにオプションをご覧になりたい場合は、こちらをご覧ください。
これらのコマンドは、ポッド ネットワークをセットアップするために重要です。
export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"
ここでマスターノードのステータスを確認すると、「準備完了」になっているはずです。
kubectl get nodes
次に、 クラスターにワーカー ノードを追加します。
Kubernetes クラスターへのワーカー ノードの追加
次の手順は、Kubernetes クラスターに参加するときに各ワーカー ノードで実行されます。
ステップ 1: ホスト名、ファイアウォール、SELinux を準備する
まず、worker-node-1 と worker-node-2 にホスト名を設定し、次にホスト エントリを /etc/hosts に追加します。 > ファイル。
hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF
次に、ping コマンドを使用してワーカー ノードからマスター ノードに ping を実行し、更新されたホスト ファイルが正常に動作していることを確認します。
192.168.0.47
次に、SElinux を無効にし、ファイアウォール ルールを更新します。
setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
ステップ 2: Docker-CE と Kubernetes リポジトリをセットアップする
まず、DNF config-manager を使用して Docker リポジトリを追加します。
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
次に、containerd.io パッケージを追加します。
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm
これら 2 つのパッケージがインストールされたら、docker-ce の最新バージョンをインストールします。
dnf install docker-ce
Docker サービスを有効にして開始します。
systemctl enable docker
systemctl start docker
Kubernetes リポジトリはCentOS 8 にプリインストールされていないため、手動で追加する必要があります。
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
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
EOF
ステップ 3: Kubeadm を CentOS 8 にインストールする
パッケージ リポジトリの準備ができたら、kubeadm のインストールに進むことができます。
dnf install kubeadm -y
サービスを開始して有効にします。
systemctl enable kubelet
systemctl start kubelet
ステップ 4: ワーカー ノードを Kubernetes クラスターに参加させる
クラスターに参加するには、kubeadm init が生成したトークンが必要になります。どこかにコピーした場合は、ノード 1 と ノード 2 にコピーして貼り付けることができます。
kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78
最後の行で提案されているように、マスター ノードに戻り、ワーカーノード 1 と ワーカー ノード 2 がノードに参加しているかどうかを確認します。次のコマンドを使用してクラスターを作成します。
kubectl get nodes
すべての手順が正常に実行されると、マスター ノード上でノード 1 と ノード 2 が準備完了ステータスになっていることが表示されます。この時点で、CentOS 8 に Kubernetes クラスターが正常にデプロイされました。
推奨読書: Kubernetes クラスターに Nginx をデプロイする方法
いくつかの制限
ここで作成したクラスターには単一のマスター ノードがあるため、マスター ノードに障害が発生するとクラスターのデータが失われる可能性があり、クラスターを最初から再作成する必要がある場合があります。
このため、高可用性セットアップをお勧めします。