はじめに
本記事ではコンテナオーケストレーションであるKubernetesをインストールする手順を紹介します。KubernetesとはDockerなどのコンテナを管理、自動化を行うシステムです。
Kubernetes触るの初めてでとりあえずサクッと動かしたい人向けです。
構成図
マスターノードの自宅NW NIC:192.168.1.30
ワーカーノードの自宅NW NIC:192.168.1.31
それぞれのVMはCPU1core、メモリ2GB、ディスク30GB
Kubernetesインストール【対象:マスターノード、ワーカーノード】
パッケージの更新
# dnf update -y
SELinux無効化
# setenforce 0
# sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewalldサービス停止、無効化
# systemctl disable --now firewalld
br_netfilterモジュールインストール
bridgeしたインターフェースのパケットをフィルタリングするモジュール。
クラスタでのポッド間通信で利用します。
# modprobe br_netfilter
ホストがbridgeしたパケットをフィルタリング無効
# cat <<EOF > /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
カーネルパラメータ反映(/etc/sysctl.d/配下)
# sysctl --system
スワップ領域を無効にする
# swapoff -a
# sed -i -e '/swap/s/^/# /g' /etc/fstab
Dockerパッケージをインストールする。
# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
# dnf install -y https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.6.9-3.1.el7.x86_64.rpm
# dnf install docker-ce --nobest -y
Dockerサービス起動、有効化
# systemctl enable --now docker
systemd cgroupドライバー設定
# echo '{
"exec-opts": ["native.cgroupdriver=systemd"]
}' > /etc/docker/daemon.json
Docker再起動
# systemctl restart docker
Kubernetesリポジトリ設定
# cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
パッケージの更新
# dnf upgrade -y
Kubernetes関連パッケージをインストール
# dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
kubeletサービス起動、有効化
# systemctl enable --now kubelet
kubeadm init のエラー回避
# rm -f /etc/containerd/config.toml
# systemctl restart containerd
クラスタの作成【対象:マスターノード】
# kubeadm init --pod-network-cidr 192.168.0.0/16
※Podに割り当てるIPアドレスの範囲を指定する:--pod-network-cidr
標準出力の末尾に以下のようなコマンドが記載されるのでメモする。
(例)kubeadm join 192.168.1.30:6443 --token titnqn.1mwqcq0daycjpanz --discovery-token-ca-cert-hash sha256:720c70f6a41684a92724ad7b983092893c3e7d836fb032124e14280c2a38660c
kubectl コマンドを実行する権限を付与
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config
Calioインストール
# kubectl apply -f https://docs.projectcalico.![Kubernetes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3092281/bf370e43-ef62-7a72-0dce-0d29838f3849.png)
org/v3.15/manifests/calico.yaml
クラスタ参加【対象:ワーカーノード】
前述でメモした「kubeadm init --pod-network-cidr 【ネットワークアドレス】」で出力されたコマンドを実行する。
(例)kubeadm join 192.168.1.30:6443 --token titnqn.1mwqcq0daycjpanz --discovery-token-ca-cert-hash sha256:720c70f6a41684a92724ad7b983092893c3e7d836fb032124e14280c2a38660c
マスターノードで以下コマンド実行してノードに関する情報の取得する。
# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kubernetes Ready control-plane 8m10s v1.26.1
worker-node-1 Ready <none> 57s v1.26.1
参考URL
https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/
https://upcloud.com/resources/tutorials/install-kubernetes-cluster-centos-8
https://github.com/containerd/containerd/issues/4581