Kubernetesのテスト環境を準備しよう

LINSTORのSDS機能をテストするため、Kubernetesをインストールしてみましょう。

無料で利用できるLINBITのリポジトリを利用するため、OSのUbuntu 20.04 LTSを使います。

Kubernetesのインストールにはいろいろな手段があるようですが、今回はcontainerdとkubeadm、Ciliumをそれぞれの公式の手順に基づいてインストールします。

1.containerdのインストール

コンテナランタイムであるcontainerdをインストールします。
インストール前に必要なカーネルモジュールをOSに組み込み、ネットワークの設定を済ませておきます。


cat > /etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF

modprobe overlay
modprobe br_netfilter

# Setup required sysctl params, these persist across reboots.
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

設定のあと、パッケージをインストールします。

apt install -y containerd
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
systemctl restart containerd

2.kubeadmのインストール

公式の手順の通りにkubelet kubeadm kubectlをインストールします。現時点(2020年9月)の最新バージョン1.19ではLINSTORのCSIドライバーが動作しないため、インストールするバージョンを1.17.11に固定します。LINBITの推奨バージョンは1.17と1.18です。

apt update && apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

cat << EOF | tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
EOF

apt update
apt install -y kubelet=1.17.11-00 kubeadm=1.17.11-00 kubectl=1.17.11-00
cat << EOF | tee /etc/default/kubelet
KUBELET_EXTRA_ARGS=--cgroup-driver=systemd
EOF

3.マスターノードのセットアップ

マスターノードをセットアップします。node1をマスターノードとして次のコマンドを実行します。

sudo -i
kubeadm init
.....
.....
[addons] Applied essential addon: kube-proxy

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.3.101:6443 --token 781qhi.XXXXXXXXXXXXX \
    --discovery-token-ca-cert-hash sha256:abef9a14025069b8657fe1be5XXXXXXXXXXXXX 

kubeadmの実行はrootアカウントで実行します。実行がエラーなく終わったら、一般ユーザに戻って上の表示されている”mkdir -p $HOMNE/.kube”から3行を実行します。

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl get nodeコマンドを実行してノードの登録状態を調べます。

kubectl get nodes
NAME    STATUS   ROLES    AGE    VERSION
node1   NotReady master   13s    v1.17.11

4.ワーカーノードの設定

残ったnode2、node3でワーカーノードの設定をします。マスターノードのkubeadm initで表示されたコマンドを実行します。

kubeadm join 192.168.3.101:6443 --token 781qhi.XXXXXXXXXXXXX \
    --discovery-token-ca-cert-hash sha256:abef9a14025069b8657fe1be5XXXXXXXXXXXXX 

マスターノードでワーカーノードの登録を確認します。

kubectl get nodes
NAME    STATUS   ROLES    AGE    VERSION
node1   NotReady master   5m20s  v1.17.11
node2   NotReady <none>   45s    v1.17.11
node3   NotReady <none>   11s    v1.17.11

5.コンテナネットワーキングの設定

Ciliumを設定します。

kubectl create -f https://raw.githubusercontent.com/cilium/cilium/1.8.3/install/kubernetes/quick-install.yaml

次のような情報が出力されます。

serviceaccount/cilium created
serviceaccount/cilium-operator created
configmap/cilium-config created
clusterrole.rbac.authorization.k8s.io/cilium created
clusterrole.rbac.authorization.k8s.io/cilium-operator created
clusterrolebinding.rbac.authorization.k8s.io/cilium created
clusterrolebinding.rbac.authorization.k8s.io/cilium-operator created
daemonset.apps/cilium created
deployment.apps/cilium-operator created

しばらくしたのち、各ノードの状態がReadyになれば正常です。

kubectl get nodes
NAME STATUS ROLES AGE VERSION
node1 Ready master 4d6h v1.17.11
node2 Ready <none> 4d6h v1.17.11
node3 Ready <none> 4d6h v1.17.11

KubernetesとLINSTOR/DRBD9の動作環境ができたので、次回はCSIプラグインをテストします。