CentOS7にKubernetesクラスターをインストールする方法


Googleからオープンソースコミュニティに寄贈されたKubernetesは、コンテナ管理ツールとして選ばれるようになりました。 Dockerランタイムだけでなく、ContainersおよびRktランタイムも管理およびオーケストレーションできます。

一般的なKubernetesクラスターには、通常、マスターノードと複数のワーカーノードまたはミニオンがあります。ワーカーノードはマスターノードから管理されるため、クラスターは中央ポイントから管理されます。

また、単一ノードのKubernetesクラスタをデプロイすることもできます。これは、非常に軽い非本番ワークロードに一般的に推奨されます。これには、ノード上の仮想マシンで単一ノードのKubernetesクラスターを実行するツールであるMinikubeを使用できます。

おすすめの読み物:CentOS8にKubernetesクラスターをインストールする方法

このチュートリアルでは、CentOS 7LinuxでのマルチノードKubernetesクラスターのインストールについて説明します。このチュートリアルはコマンドラインベースであるため、ターミナルウィンドウにアクセスする必要があります。

  1. Multiple servers running Centos 7 (1 Master Node, 2 Worker Nodes). It is recommended that your Master Node have at least 2 CPUs, though this is not a strict requirement.
  2. Internet connectivity on all your nodes. We will be fetching Kubernetes and docker packages from the repository. Equally, you will need to make sure that the yum package manager is installed by default and can fetch packages remotely.
  3. You will also need access to an account with sudo or root privileges. In this tutorial, I will be using my root account.

3ノードクラスターは次のようになります。

マスターノードへのKubernetesクラスターのインストール

Kubernetesを機能させるには、コンテナ化エンジンが必要です。このインストールでは、最も人気のあるdockerを使用します。

次の手順は、マスターノードで実行されます。

マスターノードでホスト名を設定し、DNSサーバーがない場合は、/ etc/hostsファイルも更新します。

# hostnamectl set-hostname master-node
# cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF

pingコマンドを使用して、worker-node-1およびworker-node-2にpingを実行し、更新されたhostfileに問題がないかどうかをテストできます。

# ping 10.128.0.29
# ping 10.128.0.30

次に、SElinuxを無効にして、ファイアウォールルールを更新します。

# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
# reboot

ポートに次のファイアウォールルールを設定します。各firewall-cmdコマンドが成功を返すことを確認してください。

# 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

CentOS 7にはデフォルトでインストールされていないため、Kubernetesリポジトリを手動で追加する必要があります。

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パッケージとdockerパッケージをインストールできます。

# yum install kubeadm docker -y 

インストールが正常に完了したら、両方のサービスを有効にして開始します。

# systemctl enable kubelet
# systemctl start kubelet
# systemctl enable docker
# systemctl start docker

これでkubernetesマスターを初期化する準備ができましたが、その前に「kubeadminit」コマンドを実行するためにスワップを無効にする必要があります。

# swapoff -a

Kubernetesマスターの初期化は、実行する「kubeadminit」コマンドによって管理される完全に自動化されたプロセスです。

# kubeadm init

ワーカーノードで実行する必要があるため、最後の行をコピーしてどこかに保存することをお勧めします。

kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41 

ヒント:このコマンドは、渡された引数(args)について文句を言うことがあるので、エラーを回避するために編集してください。したがって、 -token に付随する ‘\’ 文字を削除すると、最終的なコマンドは次のようになります。

kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41

Kubernetesを正常に初期化したら、ユーザーがクラスターの使用を開始できるようにする必要があります。この場合、このインストールをrootユーザーとして実行するため、先に進んでこれらのコマンドをrootとして実行します。好みのsudo対応ユーザーに変更し、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」であることに気付くでしょう。これは、ポッドネットワークをまだクラスターにデプロイしていないためです。

ポッドネットワークは、クラスターのオーバーレイネットワークであり、現在のノードネットワークの上に展開されます。ポッド全体の接続を可能にするように設計されています。

ネットワーククラスターの展開は、ニーズに応じて非常に柔軟なプロセスであり、利用可能な多くのオプションがあります。インストールをできるだけシンプルにしたいので、構成や追加のコードを必要とせず、ポッドごとに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とワーカーノード2でホスト名を設定し、DNSサーバーがない場合は、/ etc/hostsファイルのマスターノードとワーカーノードも更新します。

# hostnamectl set-hostname 'node-1'
# cat <<EOF>> /etc/hosts
10.128.0.27 master-node
10.128.0.29 node-1 worker-node-1
10.128.0.30 node-2 worker-node-2
EOF

マスターノードにpingを実行して、更新されたホストファイルに問題がないかどうかをテストできます。

次に、SElinuxを無効にして、ファイアウォールルールを更新します。

# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux

ポートに次のファイアウォールルールを設定します。すべてのfirewall-cmdコマンドが成功を返すことを確認してください。

# 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

KubernetesリポジトリはCentOS7にプリインストールされていないため、手動で追加する必要があります。

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パッケージとdockerパッケージをインストールできます。

# yum install kubeadm docker -y 

両方のサービスを開始して有効にします。

# systemctl enable docker
# systemctl start docker
# systemctl enable kubelet
# systemctl start kubelet

クラスターに参加するには、kubeadminitが生成したトークンが必要です。どこかにコピーした場合は、ノード1とノード2にコピーして貼り付けることができます。

# kubeadm join 10.128.0.27:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea3564e6a07fdea2997a1cf8caeddafd6d4360d606dbc82314688425cd41 

最後の行で提案されているように、マスターノードに戻り、次のコマンドを使用して、ワーカーノード-1とワーカーノード-2がクラスターに参加しているかどうかを確認します。

# kubectl get nodes

すべてのステップが正常に実行されると、マスターノードでノード1とノード2が準備完了ステータスになっているはずです。

推奨読書:KubernetesクラスターにNginxをデプロイする方法

この時点で、Centos 7へのKubernetesクラスターのインストールが正常に完了し、2つのワーカーノードが正常にオンボーディングされました。これで、ポッドの作成とサービスのデプロイを開始できます。