Linux Mint MATE 20.1 でサーバ構築 #3 Docker/kubernetes(kubeadm)

Docker,Linux,kubernetes

今回は、Linux Mint MATE 20.1 に Docker と Kubernetes クラスタを構築する手順をまとめました。

最初に構築しようとした際に、Ubuntu 20.04 LTS と同じコマンドを何も考えずに実行していて、リポジトリの追加コマンドで躓いてしまったので、備忘録として記事にしました。

環境

今回環境構築した各ソフトのバージョンです。

ソフトバージョン
OSLinux Mint MATE 20.1
Docker20.10.3
kubernetes1.20.2

Dockerをインストールする

Dockerの公式手順(Install Docker Engine on Ubuntu)に沿ってインストールしていきます。

 

dockerをインストールためにリポジトリ更新

$ sudo apt update

$ sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

DockerのGPG Keyを追加

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88

 

リポジトリ追加

$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   xenial \
   stable"

docker-ceをインストール

$ sudo apt update
$ sudo apt install docker-ce

 

インストールが成功しているか確認

$ docker --version
Docker version 20.10.3, build 48d30b5

利用ユーザに権限付与

dockerコマンドをsudoなしで実行できるように権限付与しておきます。

$ sudo usermod -aG docker $USER

kubernetes(kubeadm / kubelet / kubectl)をインストールする

kubeadmをインストールためにリポジトリ更新

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"

 

kubeadm / kubelet / kubectlをインストール

$ sudo apt update
$ sudo apt install -y kubeadm kubelet kubectl

 

swapを無効にする

kubernetes(kubeadm)のインストール要件を確認すると色々と書いてあります。

kubeadmのインストール要件

  • One or more machines running one of:
    • Ubuntu 16.04+
    • Debian 9+
    • CentOS 7
    • Red Hat Enterprise Linux (RHEL) 7
    • Fedora 25+
    • HypriotOS v1.0.1+
    • Container Linux (tested with 1800.6.0)
  • 2 GB or more of RAM per machine (any less will leave little room for your apps)
  • 2 CPUs or more
  • Full network connectivity between all machines in the cluster (public or private network is fine)
  • Unique hostname, MAC address, and product_uuid for every node. See here for more details.
  • Certain ports are open on your machines. See here for more details.
  • Swap disabled. You MUST disable swap in order for the kubelet to work properly.

 

見落としがちなのが赤字のSwapを無効にする必要があることです。

以下のコマンドでswapを無効にします。

$ sudo swapoff -a

kubernetesのセットアップ

kubeadmのinitコマンドで環境構築

$ sudo kubeadm init --node-name master --pod-network-cidr=10.244.0.0/16

 

ノード名を指定しない場合はマシン名となるため –node-name で master を指定しています。

以下のようなメッセージが表示されれば、initコマンドは成功です。

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.x.xx:6443 --token xxxxxxxxxxxxxxxxx \
    --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

kubernetes clusterを利用する準備

initコマンドのメッセージ通りにコマンドを実行します。

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

flannelをインストール

$ sudo sysctl net.bridge.bridge-nf-call-iptables=1
$ kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

kubernetesのnodeが準備できたか確認

STATUSがReadyとなっていればOKです。

$ kubectl get nodes
NAME     STATUS   ROLES                  AGE    VERSION
master   Ready    control-plane,master   3d8h   v1.20.2

masterノード(コントロールプレーンノード)にpodをデプロイできるようにする

kubectl taint nodes --all node-role.kubernetes.io/master-

クライアント(他の端末)のkubectlから操作できるようにする

クライアントがWindows10の場合は、WSLを利用してkubectlを導入しましょう。

WSLを利用した環境構築の方法については、以下の記事を参考にしてください。

kubectlをインストール

$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
$ sudo apt-add-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main"
$ sudo apt update
$ sudo apt install -y kubectl

 

サーバ側のkubectlのconfigファイルをそのままコピーする

~/.kube/config

 

サーバ側のファイアウォールを設定

kubernetes-clusterのポート番号を調べる

$ kubectl cluster-info
Kubernetes master is running at https://192.168.x.xx:6443
KubeDNS is running at https://192.168.x.xx:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

 

ファイアウォールの6443ポートをufwで開放する。

$ sudo ufw allow 6443
$ sudo ufw reload

 

その他、serviceでnodeportで外部からアクセスするためのポートなどを必要に応じて解放しましょう。

クライアント側からkubectlで確認

クライアントからkubectlコマンドを実行しサーバ側での実行結果と同じであれば無事成功です。

$ kubectl get nodes
NAME     STATUS   ROLES                  AGE    VERSION
master   Ready    control-plane,master   3d8h   v1.20.2