要件
このガイドは次のバージョンのUbuntu(の最新版)で動作確認をしています。
現在の私の推奨はUbuntu 20.04.4 LTSです。
本ガイドでは Kubernetes 1.24.1をインストールする例を示しています。
SWAPのオフ
Swapパーティションをコメントアウト、およびswapoffを実行します。
sudo vi /etc/fstab sudo swapoff -a
初期設定とランタイムのインストール
本例ではcontainerdをインストールします。UbuntuではUbuntu Archives版のcontaienrdパッケージとDockerリポジトリーに含まれるcontaienrd.ioパッケージのいずれかを使って、Ubuntuにcontainerdをインストールできます。Dockerリポジトリーに含まれる方が、新しいバージョンが使えるのでおすすめです。
まず、こちらに書かれている事前設定をそれぞれ行います。
sudo -i cat > /etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF modprobe overlay modprobe br_netfilter cat > /etc/sysctl.d/99-kubernetes-cri.conf <<EOF net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-ip6tables = 1 EOF sysctl --system exit
Ubuntu 22.04ではCgroup v2を無効化してください。設定変更後、再起動が必要です(Ubuntu 22.04以前のバージョンでは不要です)。
次に従って、リポジトリーの有効化を行います。
インストールは次のように行います。
sudo apt-get update sudo apt-get install -y containerd.io
その後、containerdの設定の作成と必要に応じて設定の変更、containerdサービスの再起動を行います。
sudo mkdir -p /etc/containerd sudo containerd config default | sudo tee /etc/containerd/config.toml sudo systemctl restart containerd
kubeadmツールなどのインストール
公式のInstalling kubeadmに従って、リポジトリーの有効化を行います。
手元の環境ではインストール済みでしたが、インストールされていない場合は導入します。
sudo apt-get update sudo apt-get install -y apt-transport-https ca-certificates curl
Google Cloudの公開署名キーをダウンロードします。
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
Kubernetes aptリポジトリーの追加を行います。
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
kubeadm,kubelet,kubectlのインストールとバージョンの固定を行います。
sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl sudo apt-mark hold kubelet kubeadm kubectl
Tips バージョンを指定する場合
アプリケーションの都合で特定のバージョンが必要な場合は次のように指定してインストールします。ただし、Kubernetesは最新版を使うのを最も推奨します。
sudo apt-get update sudo apt-get install -y kubelet=1.24.1-00 kubeadm=1.24.1-00 kubectl=1.24.1-00 sudo apt-mark hold kubelet kubeadm kubectl
kubeadmツールでクラスターの作成
次のようなオプションを追加して、クラスターを作成します。
sudo kubeadm init --kubernetes-version 1.24.1 --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=<Public IP Address>
--kubernetes-version
は、バージョンを指定します。指定できるバージョンにはある程度上限、下限があります。適切なkubeadmツールの導入が必要です。
--pod-network-cidr
は、Podに割り当てるネットワークの範囲を定義するものです。ネットワークプラグイン(CNIとも呼ぶ)を追加する際に必要な範囲です。CNIをインストールするときにCNI側の設定を変更するか、クラスター作成時に後々インストールするCNIに合わせて設定をしておく必要があります。現在利用中のCIDRを指定しないように気をつけます。
--control-plane-endpoint
は、Kubernetes APIなどが使うエンドポイントIPアドレスです。ホストのeth0
とかのアドレスを設定すれば良いでしょう。決してグローバルIPアドレスを指定しないよう気をつけます。
上記を実行すると処理が始まります。最終的にクラスターが作成されるとYour Kubernetes control-plane has initialized successfully!と表示され、この後することが出力されます。
まず、kubectlコマンドを使えるようにするために、kubeconfigの設定を行います。
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
ノードを追加してマルチクラスター構成にする場合は、別のサーバーで出力されたkubectl join
行のコマンドを実行します。
ちなみにここで示されたトークンキーには期限があり、数日経ってからノードを追加しようとしてもうまくいきません。
新しいトークンは kubeadm token create --print-join-command
で作成できます。これをkubectl join
の実行時に指定します。
1台目のマシンでPodをスケジューリングできるようにするには次のコマンドを実行します。
kubectl taint nodes --all node-role.kubernetes.io/control-plane- node-role.kubernetes.io/master-
クラスターネットワークの適用
Kubernetesクラスターにネットワークアドオンを追加します。 利用できるネットワークアドオンの代表的なものはアドオンのインストールにまとめられています。
Flannelの場合はGitHub flannelにあるように、次のように実行します。CIDRは10.244.0.0/16
が要件です。どちらかを適切なものに合わせます。
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
クラスターでPodを作ってみる
構築したクラスターでPodが作成できるか試してみます。
#Deploymentを作成 kubectl create deployment hello-node --image=k8s.gcr.io/echoserver:1.4 #Deploymentを確認 kubectl get deployment #作成したDeploymentを削除 kubectl delete deployment hello-node
以上でUbuntuでkubeadmを使ったKubernetesクラスタの構築は完了です。