技術者の皆さん、こんにちは。Kubernetes(k8s)は、無料のオープンソースコンテナオーケストレーションシステムです。コンテナ化されたアプリケーションのデプロイメントと管理を自動化するために使用されます。このガイドでは、kubeadmを使用してRockyLinux8にkubernetesクラスターをインストールする方法を段階的に説明します。
Kubernetesの最小システム要件
- 2つ以上のvCPU
- 2GB以上のRAM
- スワップが無効
- 少なくともNICカード
- 安定したインターネット接続
- sudo権限を持つ1人の通常のユーザー。
デモンストレーションのために、私は次のシステムを使用しています
- 一度マスターノード/コントロールプレーン(2 GB RAM、2vCPU、1 NICカード、Minimal Rocky Linux 8 OS)
- 2つのワーカーノード(2GB RAM、2vCPU、1 NICカード、Minimal Rocky Linux 8 OS)
- マスターノードのホスト名–コントロールノード(192.168.1.240)
- 作業ノードのホスト名– worker-node1(192.168.1.241)、worker-node2(192.168.1.242)
さらに面倒なことはせずに、Kubernetesのインストール手順を詳しく見ていきましょう。
注:これらの手順は、RHEL8およびAlmaLinuxOSにも適用できます。
ステップ1)ホスト名を設定してhostsファイルを更新する
hostnamectlコマンドを使用して、コントロールノードとワーカーノードにホスト名を設定します。
制御ノードでコマンドの下で実行
$ sudo hostnamectl set-hostname "control-node" $ exec bash
ワーカーノード1で次のコマンドを実行します
$ sudo hostnamectl set-hostname "worker-node1" $ exec bash
ワーカーノード2
$ sudo hostnamectl set-hostname "worker-node2" $ exec bash
コントロールノードとワーカーノードの/etc/hostsファイルにそれぞれ次のエントリを追加します。
192.168.1.240 control-node192.168.1.241 worker-node1192.168.1.242 worker-node2
ステップ2)スワップを無効にし、SELinuxを許可モードに設定します
スワップを無効にして、kubeletが正しく機能するようにします。すべてのノードで以下のコマンドを実行して無効にします
$ sudo swapoff -a $ sudo sed -i'/ swap / s / ^ \(。* \)$ /#\ 1 / g'/ etc / fstab
すべてのノードでsedコマンドの下で実行して、SELinuxを許可モードに設定します
$ sudo setenforce 0 $ sudo sed -i's / ^ SELINUX =enforcing $ / SELINUX =permit /'/ etc / selinux / config
ステップ3)マスターノードとワーカーノードでファイアウォールルールを構成する
コントロールプレーンでは、ファイアウォールで次のポートを許可する必要があります。
コントロールプレーンで上記のポートを許可するには、
を実行します。$ sudo Firewall-cmd --permanent --add-port =6443 / tcp $ sudo Firewall-cmd --permanent --add-port =2379-2380 / tcp $ sudo Firewall-cmd --permanent --add -port =10250 / tcp $ sudo Firewall-cmd --permanent --add-port =10251 / tcp $ sudo Firewall-cmd --permanent --add-port =10252 / tcp $ sudo Firewall-cmd --reload $ sudo modprobe br_netfilter $ sudo sh -c "echo '1'> / proc / sys / net / bridge / bridge-nf-call-iptables" $ sudo sh -c "echo '1'> / proc / sys / net / ipv4 / ip_forward "
ワーカーノードでは、ファイアウォールで次のポートを許可する必要があります
$ sudo Firewall-cmd --permanent --add-port =10250 / tcp $ sudo Firewall-cmd --permanent --add-port =30000-32767 / tcp br_netfilter $ sudo sh -c "echo '1'> / proc / sys / net / bridge / bridge-nf-call-iptables" $ sudo sh -c "echo '1'> / proc / sys / net / ipv4 / ip_forward "
ステップ4)マスターノードとワーカーノードにDockerをインストールする
マスターノードとワーカーノードにDockerをインストールします。ここで、dockerはコンテナー実行時間(CRI)を提供します。最新のDockerをインストールするには、最初に次のコマンドを実行してリポジトリを有効にする必要があります。
$ sudo dnf config-manager --add-repo =https://download.docker.com/linux/centos/docker-ce.repo
次に、すべてのノードでdnfコマンドの下で実行して、docker-ce(docker community edition)をインストールします
$ sudo dnf install docker-ce -y
出力
Dockerとその依存関係をインストールしたら、次のコマンドを実行してサービスを開始し、有効にします
$ sudo systemctl start docker $ sudo systemctl enable docker
ステップ5)kubelet、Kubeadm、およびkubectlをインストールします
Kubeadmは、Kubernetesクラスターをインストールするためのユーティリティです。 Kubectlは、Kubernetesクラスターとのやり取りに使用されるコマンドラインユーティリティです。 Kubeletは、すべてのノードを実行し、ポッドやコンテナーの開始や停止などのタスクを実行するコンポーネントです。
すべてのノードにkubelet、Kubeadm、kubectlをインストールするには、最初にKubernetesリポジトリを有効にする必要があります。
マスターノードとワーカーノードで下のコマンドを実行します。
$ cat <上記のパッケージをインストールした後、すべてのノード(コントロールノードとワーカーノード)でkubeletサービスを有効にして、実行します
$ sudo systemctl enable --now kubeletステップ6)Kubeadmを使用してKubernetesクラスターをインストールする
Kubernetesクラスタをインストールする際、コンテナランタイム(CRI)のcgroupがkubeletのcgroupと一致することを確認する必要があります。通常、Dockerではcgroupはcgroupfsであるため、kubeletのcgoupとしてcgroupfsを使用するようにKubeadmに指示する必要があります。これは、Kubeadmコマンドでyamlを渡すことで実行できます
次のコンテンツを使用して、コントロールプレーンにkubeadm-config.yamlファイルを作成します
$ vi kubeadm-config.yaml#kubeadm-config.yamlkind:ClusterConfigurationapiVersion:kubeadm.k8s.io/v1beta3kubernetesVersion:v1.23.4--kind:KubeletConfigurationapiVersion:kubelet.config.k8s.io/v1beta1cgroupDriver:cgroupfs>注:セットアップに従って、Kubernetesバージョンを置き換えます。
これで、制御ノードからKubeadmコマンドの下で実行してインストール(またはクラスターを初期化)する準備が整いました。
$ sudo kubeadm init --config kubeadm-config.yaml上記のコマンドの出力は次のようになります
上記の出力は、クラスターが正常に初期化されたことを確認します。
次のコマンドを実行して、通常のユーザーがクラスターと対話できるようにします。これらのコマンドはすでに出力に含まれています。
$ mkdir -p $ HOME / .kube $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config $ sudo chown $(id -u):$(id -g)$ HOME /.kube/config$kubectlgetノード
ノードを準備完了状態にし、クラスターDNSサービス(coredns)を有効にするには、ポッドネットワークアドオン(CNI –コンテナーネットワークインターフェイス)をインストールします。ポッドネットワークアドオンがインストールされると、ポッドは相互に通信を開始します。このガイドでは、ネットワークアドオンとしてcalicoをインストールしています。コントロールプレーンからkubectlコマンドの下で実行します。
$ kubectl apply -f https://docs.projectcalico.org/v3.22/manifests/calico.yaml出力
calico network ad-onのインストールが成功すると、kube-system名前空間のコントロールノードとポッドがそれぞれ準備が整い、利用できるようになります。
次のステップは、ワーカーノードをクラスターに参加させることです。
ステップ7)ワーカーノードをクラスターに参加させる
Kubernetesクラスターの初期化が成功すると、任意のワーカーノードをクラスターに参加させるコマンドが出力に表示されます。したがって、そのコマンドをコピーして、ワーカーノードに貼り付けます。だから、私の場合、コマンドは、
$ sudo kubeadm join 192.168.1.240:6443 --token jecxxg.ac3d3rpd4a7xbxx4 --discovery-token-ca-cert-hash sha256:1e4fbed060aafc564df75bc776c18f6787ab91685859e74d43449cf5a5d91d86両方のワーカーノードで上記のコマンドを実行します。
コントロールプレーンから両方のワーカーノードのステータスを確認し、実行します
<前> [[Eメール保護]〜] $ kubectl GET nodesNAME STATUSの役割AGEバージョン管理ノードレディコントロールプレーン、マスター49メートルのv1.23.4worker-node1の準備<なし> 5m18s v1.23.4worker-node2の準備<なし> 3m57s V1 .23.4 [[メール保護]〜] $
上記の出力は、ワーカーノードがクラスターに参加していることを示しています。このガイドの内容は以上です。このガイドが参考になることを願っています。以下のコメントセクションで質問やフィードバックを共有してください。