k8sとも呼ばれるKubernetesは、コンテナ化されたアプリケーションのデプロイと管理を自動化するための、オープンソースのポータブルコンテナオーケストレーションプラットフォームです。 Kubernetesは、もともとGoogleによってGoプログラミング言語で作成されました。現在、Cloud NativeComputingFoundationによって管理されています。
このガイドでは、RHEL 8にKubernetesクラスターをインストールする方法を段階的に説明します。クラスターに追加する1つのマスターノードと1つのワーカーノードを使用して、これをデモンストレーションします。
ラボのセットアップ
- マスターノード:master-node-k8 10.128.15.228
- ワーカーノード:worker-node-1-k8 10.128.15.230
注:ステップ1から6は、マスターノードとワーカーノードの両方に適用する必要があります。
ステップ1)スワップスペースを無効にする
最高のパフォーマンスを得るには、Kubernetesでホストシステムでスワップを無効にする必要があります。これは、メモリスワッピングが不安定性とパフォーマンスの低下につながる可能性があるためです。
スワップスペースを無効にするには、次のコマンドを実行します。
$ sudo swapoff -a
変更を永続的にするには、/ etc / fstabファイルを編集し、スワップエントリのある行を削除またはコメントアウトして、変更を保存します。
ステップ2)SELinuxを無効にする
さらに、ノードとポッド間のスムーズな通信を可能にするために、SELinuxを無効にして「パーミッシブ」に設定する必要があります。
これを実現するには、SELinux構成ファイルを開きます。
$ sudo vi / etc / selinux / config
SELINUXの値を強制から許容に変更します。
SELINUX =permissive
または、次のようにsedコマンドを使用します。
$ sudo sed -i's / ^ SELINUX =enforcing $ / SELINUX =permit /'/ etc / selinux / config
ステップ3)マスターノードとワーカーノードでネットワークを構成する
マスターノードとワーカーノードが効果的に通信するには、いくつかの追加のネットワーク構成が必要です。各ノードで、/ etc/hostsファイルを編集します。
$ sudo vi / etc / hosts
次に、図のようにエントリを更新します
10.128.15.228master-node-k8//マスターノードの場合10.128.15.230worker-node-1-k8//ワーカーノードの場合
構成ファイルを保存して終了します。次に、交通管制ユーティリティパッケージをインストールします:
$ sudo dnf install -y iproute-tc
ステップ4)k8sのファイアウォールルールを許可する
マスターノードとワーカーノード間のシームレスな通信を行うには、ファイアウォールを構成し、以下に概説するようにいくつかの関連するポートとサービスを許可する必要があります。
マスターノードで、次のポートを許可します
$ 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 Firewall-cmd --permanent --add-port =10250 / tcp $ sudo Firewall-cmd --permanent --add-port =30000-32767 / tcp load->>ステップ5)CRI-Oコンテナランタイムをインストールする
Kubernetesを実行するには、ポッドを実行するためのコンテナランタイムが必要です。 Kubernetes 1.23以降のバージョンでは、コンテナランタイムインターフェイスで確認するコンテナランタイムをインストールする必要があります。
コンテナランタイムは、コンテナの実行をサポートするアプリケーションです。 Kubernetesは次のコンテナランタイムをサポートしています:
- コンテナ
- CRI-O
- Dockerエンジン
- Mirantisコンテナランタイム
このガイドでは、高レベルのコンテナランタイムであるCRI-Oをインストールします。そのためには、overlayモジュールとbr_netfilterモジュールの2つの重要なカーネルモジュールを有効にする必要があります。
これを実現するには、前提条件を次のように構成する必要があります。
まず、Kubernetesのモジュール構成ファイルを作成します。
$ sudo vi /etc/modules-load.d/k8s.conf
これらの行を追加して変更を保存します
overlaybr_netfilter
次に、modprobeコマンドを使用して両方のモジュールをロードします。
$ sudo modprobe overlay $ sudo modprobe br_netfilter
次に、必要なsysctlパラメーターを次のように構成します
$ sudo vi /etc/sysctl.d/k8s.conf
次の行を追加します:
net.bridge.bridge-nf-call-iptables =1net.ipv4.ip_forward =1net.bridge.bridge-nf-call-ip6tables =1
変更を保存して終了します。変更が適用されたことを確認するには、次のコマンドを実行します。
$ sudo sysctl --system
CRI-Oをインストールするには、CRI-Oのバージョンと一致するように$VERSION環境変数を設定します。たとえば、CRI-Oバージョン1.21をインストールするには、次のように$VERSIONを設定します。
$ export VERSION =1.21
次に、次のコマンドを実行します。
$ sudo 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
$ sudo curl -L -o /etc/yum.repos.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.repo https://download.opensuse.org/repositories/devel:kubic :libcontainers:stable:cri-o:$ VERSION / CentOS_8 / devel:kubic:libcontainers:stable:cri-o:$ VERSION.repo
次に、DNFパッケージマネージャーを使用してCRI-Oをインストールします:
$ sudo dnf install cri-o
次に、起動時にCRI-Oを有効にして、起動します。
$ sudo systemctl enable cri-o $ sudo systemctl start cri-o
ステップ6)Kubernetesパッケージをインストールする
Kubernetesが機能するために必要なすべてのものがインストールされたら、先に進んで、kubelet、kubeadm、kubectlなどのKubernetesパッケージをインストールします。 Kubernetesリポジトリファイルを作成します。
$ sudo vi /etc/yum.repos.d/kubernetes.repo
そして、次の行を追加します。
[kubernetes] name =Kubernetesbaseurl =https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=1repo_gpgcheck=1gpgkey=https://packages.cloud.google.com/ yum / doc / yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpgexclude=kubelet kubeadm kubectl
変更を保存して終了します。最後に、次のようにk8sパッケージをインストールします。
$ sudo dnf install -y kubelet kubeadm kubectl --disableexcludes =kubernetes
インストールしたら、必ずKubeletサービスを有効にして開始してください。
$ sudo systemctl enable kubelet $ sudo systemctl start kubelet
この時点で、Kubernetesクラスターをインストールする準備が整いました。
ステップ7)Kubernetesクラスタを作成する
次のように、kubeadmコマンドを使用してKubernetesクラスターを初期化します。これにより、マスターノードのコントロールプレーンが初期化されます。
$ sudo kubeadm init --pod-network-cidr =192.168.10.0 / 16
コントロールプレーンが作成されたら、クラスターの使用を開始するためにいくつかの追加コマンドを実行する必要があります。
したがって、コマンドを順番に実行します。
$ mkdir -p $ HOME / .kube $ sudo cp -i /etc/kubernetes/admin.conf $ HOME / .kube / config $ sudo chown $(id -u):$(id -g)$ HOME /.kube/config
出力の最後に、クラスターに参加するためにワーカーノードで実行するコマンドが表示されます。これについては、次のステップで後で説明します。
また、必ずマスターノードから汚染を削除してください:
$ kubectl taintノード–すべてのノード-role.kubernetes.io/master-
ステップ8)CalicoPodNetworkアドオンをインストールします
次のステップは、Calico CNI(Container Network Interface)をインストールすることです。これは、コンテナネットワークとセキュリティを提供するために使用されるオープンソースプロジェクトです。 Calico CNIをインストールすると、ノードの状態がReady状態に変わり、クラスター内のDNSサービスが機能し、コンテナーが相互に通信を開始できるようになります。
Calicoは、スケーラビリティ、高性能、および既存のKubernetesワークロードとの相互運用性を提供します。オンプレミスおよびGoogleCloud、AWS、Azureなどの一般的なクラウドテクノロジーにデプロイできます。
Calico CNIをインストールするには、マスターノードから次のコマンドを実行します
$ kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
完了したら、これを実行します。
$ kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
ポッドが起動したかどうかを確認するには、次のコマンドを実行します。
$ watch kubectl get pods -n calico-system
3番目の列に示すように、各ポッドが「準備完了」であり、「実行中」のステータスになっていることがわかります。
クラスタ内のマスターノードの可用性を確認するには、次のコマンドを実行します。
$kubectlgetノード
さらに、-owideオプションを使用してより多くの情報を取得できます。
$ kubectl get node -o wide
上記の出力は、マスターノードの準備ができていることを確認します。さらに、ポッドの名前空間を確認できます:
$ kubectl get pods --all-namespaces
ステップ9)クラスターへのワーカーノードの追加
ワーカーノードをKubernetesクラスターに追加するには、ステップ1からステップ6までを実行します。完了したら、マスターノードによって生成されたコマンドを実行してワーカーノードをクラスターに参加させます。私たちの場合、これは次のようになります:
$ sudo kubeadm join 10.128.15.228:6443 --token cqb8vy.iicmmqrb1m8u9cob --discovery-token-ca-cert-hash sha256:79748a56f603e6cc57f67bf90b7db5aebe090107d540d6cc8a8f65b785de754すべてがうまくいけば、ノードがクラスターに参加したという通知を受け取るはずです。複数のワーカーノードがある場合は、他のノードに対して同じ手順を繰り返します
ここで、マスターノードに戻り、もう一度、クラスター内のノードを確認します。今回は、ワーカーノードがクラスター内のノードのリストに表示されます
$kubectlgetノード
結論
これは、RHEL8にKubernetesクラスターをインストールする方法のウォークスルーでした。このガイドに関するフィードバックを歓迎します。
Linux