VirtualBox利用して、Kubernetes環境を構築する手順を説明します。
構築するKubernetes環境は1 Control Plane + 1 Worker Node環境です。KubernetesのOSはUbuntu Serverを利用します。基本的にはKubernetes公式マニュアル通りですが、一部追加設定が必要です。
必要なもの:
- VirtualBox (6.1.12)
- Ubuntu Server LTS 20.04 イメージファイル
まずはControl Plane用のVMを作ります。VirtualBoxを運用するPCからアクセスできるようにNetwork AdapterはBridged Adapterにします。名前はk8s-control-planeに設定。
k8s-control-planeにUbuntu Serverのisoファイルをマウントし、インストールします。インストール中にhostnameを聞かれたらVM名と同じk8s-control-planeに設定します。またOpenSSHも有効にします。ただし、その他のパッケージはインストールしないでください。(特にDocker、Dockerは後でKuberentesと一緒にaptでインストールします)
OSのインストールが終わったら、本格的にKubernetesに必要な設定を行います。
まずはswapを無効にします。
sudo swapoff -a
上記だけだと、再起動したときにswapがまた有効になるのでfstab設定も変更し、ブート時のswapも無効にします。(/etc/fstabからswapパーティションをコメントアウト)
sudo sed -ri '/\sswap\s/s/^#?/#/' /etc/fstab
次に、Kuberentes動作に必要なポートをfirewallから許可します。ついでにSSHポートも許可してリモートからSSHできるようにします。(Visual Studio Code Remote SSH + Kubernetesプラグインを使うため)
sudo ufw limit ssh
sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250:10252/tcp
sudo ufw allow 8285/udp
sudo ufw allow 8472/udp
sudo ufw --force enable
※ UDP 8285, 8472ポートを許可しないと、Kubernetesのflannelプラグインが動作しなくなりPodからのインターネットアクセスができなくなります。
次に、Kubernetesが利用するコンテナエンジンであるDockerをインストールします。(公式マニュアル)
sudo apt-get update && sudo apt-get install -y \
apt-transport-https ca-certificates curl software-properties-common gnupg2
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update && sudo apt-get install -y \
containerd.io docker-ce docker-ce-cli
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
Dockerのインストールが終わったら、いよいよKubernetesのインストールです。(Kubernetes公式マニュアル)
まずはKubernetes動作に必要なネットワーク設定を行います。
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sudo sysctl --system
そしてKubernetesの各コンポーネントをインストールします。(kubelet, kubeadm, kubectl)
sudo apt-get update && sudo apt-get install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat <<EOF | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF
sudo apt-get update && sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
インストールが終わったら、このVMをControl Planeとして使うように初期化を行います。flannel利用のため、PodのCIDRを10.244.0.0/16に設定する必要があるのでパラメータで設定します。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
初期化作業のログの最後にWorker Nodeの設定に必要なコマンドが出力されるのでコピーしておきます。(kubeadm join ~)
kubectl使用に必要な設定ファイルをコピーします。(出典)
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
Kubernetesにflannelをインストールします。
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
少し待ってから、正常にKubernetesが動いているか確認します。
kubectl get node
kubectl get pod -n kube-system
これでControl PlaneのVM準備は終わりです。
Worker NodeのセットアップはControl Planeとほぼ一緒です。k8s-node-0という名前でVMを作り、Ubuntu ServerをインストールしControl Planeのセットアップと同じ手順をKubernetesの各コンポーネントをインストールまで行います。ただし、許可するポートは以下のように変えます。
sudo ufw limit ssh
sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp
sudo ufw allow 8285/udp
sudo ufw allow 8472/udp
sudo ufw --force enable
Kubernetesのコンポーネントインストールまで終わったら、Control Planeのkubeadm initコマンドのログでコピーしたkubeadm joinコマンドを実行します。
sudo kubeadm join ...
上記コマンドが成功したら、Control PlaneのVMから正しくWorker Nodeが接続されたか確認します。
kubectl get node
k8s-control-plane, k8s-node-0ノードが両方ともReady状態になっていればセットアップは終了です。
これでVirtualBoxの環境にKubernetesを構築できました。VMのSnapshot機能を利用していつでも状態を戻せるので、いろいろ自由にテストできると思います。