はじめに
コンテナのデプロイとKubernetesオーケストレーションは、仮想環境にデプロイすると非常に強力です。柔軟性とスケーリング機能は、無限の機会を提供します。
それでは、なぜシングルテナントの物理サーバーをクラスターに追加するのでしょうか。 VMは、特定のアプリケーションの遅延の問題を引き起こすことが知られています。特にハードウェアアクセラレータ(GPU)を追加するオプションを使用すると、ハードウェアに直接アクセスすることでこの問題を解決できます。
機械学習とAIの開発により、組織はVMとベアメタルサーバーの両方にKubernetesクラスターを実装する方向に進んでいます。
このチュートリアルでは、Kubernetesアーキテクチャに関する前回の記事で説明した概念を実装する方法を示します。
概説されている手順に従い、ベアメタルサーバーにKubernetesをインストールする方法を学びます。
前提条件
- 複数のLinuxサーバー
- sudoを使用するすべてのシステムのユーザーアカウント またはroot権限
- コマンドライン/ターミナルウィンドウへのアクセス
- apt パッケージマネージャー(Debian 10)
Kubernetesインストール用のベアメタルサーバーの準備
Kubernetesは、高度に自動化されたオーケストレーションツールです。ノード間で通信し、クラスターの現在の状態が目的の状態と一致しない場合は常にポッドを複製するための手順を実行します。
このプロセスを容易にするために、ノード間の通信は自由である必要があります。標準のセキュリティ設定が通信回線に干渉しないように、各ノードを構成する必要があります。
設定はディストリビューションによって異なり、クラスター内のすべてのノードに適用する必要があります。この例では、インストールはDebian10を使用して実行されます。
別のディストリビューションを使用している場合は、CentOS7またはUbuntu18.04システムにKubernetesをインストールする方法に関するチュートリアルにアクセスしてください。
ステップ1:SWAPを無効にする
Kubernetesポッドは、CPU制限を完全に利用するように設計されています。 クベレット SWAPメモリを使用するようには設計されていないため、無効にする必要があります。 SWAPを無効にするには、ターミナルウィンドウで次のコマンドを入力します。
sudo swapoff -a
ステップ2: nftablesを解決する バックエンドの互換性の問題
現在のkubeadm パッケージはnftablesと互換性がありません バックエンド。問題を回避するには、iptablesツールをレガシーモードに切り替えます。
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
sudo update-alternatives --set arptables /usr/sbin/arptables-legacy
sudo update-alternatives --set ebtables /usr/sbin/ebtables-legacy
ステップ3:ファイアウォールを構成する
クラスタ内のポッド間の通信を可能にするには、ファイアウォール設定を変更する必要があります。この例では、 ufwを使用してポートを編集しました 。
これを行うには、マスターノードで次のコマンドを入力します。
sudo ufw allow 6443/tcp
sudo ufw allow 2379/tcp
sudo ufw allow 2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10251/tcp
sudo ufw allow 10252/tcp
sudo ufw allow 10255/tcp
sudo ufw reload
さらに、これらのポートは各ワーカーノードで開いている必要があります:
sudo ufw allow 10251/tcp
sudo ufw allow 10255/tcp
sudo ufw reload
ステップ4:Dockerをインストールする
コンテナランタイムソフトウェアは、ノード上のコンテナイメージを管理します。これがないと、Kubernetesはイメージライブラリにアクセスしてコンテナ内のアプリケーションを実行できません。この目的のために、Dockerをインストールします。
クラスタに参加しているすべてのマスターノードとワーカーノードにDockerをインストールします。つまり、各ノードでこのプロセスを順番に繰り返す必要があります。
コマンドラインインターフェイスにアクセスします。次のコマンドは、Debianリポジトリを更新し、パッケージをインストールします。また、システムが安全なプロトコルであるHTTPSを介してリポジトリを使用できるようにします。
sudo apt-get update && apt-get install apt-transport-https ca-certificates curl software-properties-common
次に、次のように入力して、Dockerの公式GPGキーを取得して追加します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add –
出力は、アクションが完了したことを確認します。
GPGキーを追加したので、Dockerのaptリポジトリの追加に進むことができます:
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
リポジトリを更新することを忘れないでください:
sudo apt-get update
これで、DockerCEをインストールする準備が整いました。
次のコマンドを使用してDockerをインストールします。
sudo apt-get install docker-ce
サービスがアクティブであるかどうかを確認します:
docker -v
コマンドラインは、サービスがアクティブであることを確認します。
画像を呼び出して、サービスが正しく機能しているかどうかを確認します:
sudo docker run hello-world
Dockerが正しく機能することの確認を受け取りました。
ステップ5:cgroup-driverを変更する
docker-ceとKubernetesの両方が同じ「cgroup」を使用していることを確認してください。
現在のdockercgroupを確認します:
sudo docker info | grep -i cgroup
以下の結果は、Dockerが「cgroupfs」をcgroup-driverとして使用していることを確認しています。
必要に応じて、次のように入力して、Kubernetescgroup-driverを「cgroupfs」に変更します。
cat > /etc/docker/daemon.json <<EOF
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
systemdシステムをリロードし、kubeletサービスを再起動します。
systemctl daemon-reload
systemctl restart kubelet
コンテナランタイムソフトウェア(この場合はDocker)を選択してインストールしました。次のセクションでは、Kubernetesをインストールする方法と、Kubernetesを管理するために必要なツールについて説明します。
ベアメタルサーバーにKubernetesをインストールする
ステップ1:Kubernetesリポジトリをダウンロードする
Kubernetesをダウンロードし、署名キーを追加して、ソフトウェアが本物であることを確認します。
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add –
パッケージが利用可能であるという確認を受け取ります。
Kubernetesはデフォルトのリポジトリにありません。それらを追加するには、クラスター内の各ノードで次のコマンドを入力します。
sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
ステップ2:kubelet、kubeadm、およびkubectlをインストールします
Kubernetesを管理できるようにするには、 kubectlをインストールする必要があります 、クラスターにコマンドを発行するために使用されるユーティリティ。 kubeletもインストールする必要があります クラスタ内でポッドを展開および制御するために不可欠であるためです。 K ubeadm 起動時にKubernetesを初期化するプログラムです。これらの3つの重要なツールをインストールするには、次のコマンドを入力します。
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
クベレット kubeadm のクラッシュループで待機しているため、現在は数秒ごとに再起動しています 何をすべきかを伝えるために。
ステップ3:マスターノードでKubernetesを初期化する
マスターノードで次のコマンドを入力します。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
クラスタがアクティブであることを出力が確認するまで、数分かかる場合があります。
システムがアクションを完了すると、kubeadm参加が表示されます メッセージ。エントリ全体をメモします。ワーカーノードをクラスターに参加させるために必要になります。
ステップ4:Kubernetesクラスターのディレクトリを作成する
kubeadm init の一部でもあるこれらのコマンドを実行して、root以外のユーザーに対してkubectlを機能させます。 出力:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
ステップ5:ポッドネットワークアドオン(フランネル)
ポッドが効果的に通信できるように、ポッドネットワークアドオンをインストールします。 Flannelは、Kubernetesと互換性のあるオーバーレイネットワークです。フランネルタイプをインストールするには:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
ステップ6:ワーカーノードをクラスターに参加させる
kubeadm join
を入力します 各ワーカーノードのコマンド。 ステップ3でメモしたキー 、各ノードをクラスターに接続します:
kubeadm join 10.0.2.15:6443 –token sv3ckz.fk2yooy92ieins26 \
--discovery-token-ca-cert-hash sha256:39d4a6ecc4a526b4aaff2594b469d43691fb7468688668f55d2a37690codo7fe
数分待って、ノードのステータスを確認してください。
マスターサーバーに切り替えて、次のように入力します。
kubectl get nodes
次に、クラスターに参加したワーカーノードが表示されます。