Linux Mint MATE 20.1 でサーバ構築 #3 Docker/kubernetes(kubeadm)
今回は、Linux Mint MATE 20.1 に Docker と Kubernetes クラスタを構築する手順をまとめました。
最初に構築しようとした際に、Ubuntu 20.04 LTS と同じコマンドを何も考えずに実行していて、リポジトリの追加コマンドで躓いてしまったので、備忘録として記事にしました。
環境
今回環境構築した各ソフトのバージョンです。
ソフト | バージョン |
---|---|
OS | Linux Mint MATE 20.1 |
Docker | 20.10.3 |
kubernetes | 1.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