動作確認したバージョン
- Oracle Linux 7.9
- Linux Kernel 5.4.17-2102.200.13
- Kubernetes 1.21.0
- Calico v3.18.1
Oracle Linuxのダウンロード
次からダウンロードする。
リポジトリーの有効化
add-onsリポジトリーを有効にすると、Dockerおよびcontainerdをインストールできる。このパッケージを使って構築できる。Kubernetesにおけるdockershimを用いたDockerのサポートは間も無く終了なので、containerdを推奨。
$ sudo yum-config-manager --enable ol7_addons
containerdのインストール
$ sudo yum intall containerd
ランタイム由来の設定の適用
ランタイムを入れるときの事前設定方法は公式の設定に従う。
$ sudo mkdir -p /etc/containerd $ containerd config default | sudo tee /etc/containerd/config.toml
「Using the systemd cgroup driver」で述べられている設定の追記を忘れずに。インデント注意。
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] ... [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] SystemdCgroup = true
設定変更後にサービスを起動。
$ sudo systemctl enable --now containerd
kubeadmツールなどの導入
kubeadmツールなどのインストールは、公式に従うと最新のバージョンをセットアップできる。
ファイアウォールの設定
共通
2行目は実際のネットワークセグメントを許可する。
$ sudo firewall-cmd --permanent --add-port=10250/tcp #kubelet API $ sudo firewall-cmd --zone trusted --add-source 192.168.0.0/24 --permanent #物理ネットワークセグメント許可 $ sudo firewall-cmd --zone=public --add-masquerade $ sudo firewall-cmd --permanent --zone=public --add-masquerade $ sudo firewall-cmd --reload
master
2行目はCNIで実際指定するネットワークセグメントを許可する。
$ sudo firewall-cmd --permanent --add-port=6443/tcp #Kubernetes API server $ sudo firewall-cmd --zone trusted --add-source 10.244.0.0/16 --permanent $ sudo firewall-cmd --reload
worker
2行目はCNIで実際指定するネットワークセグメントを許可する。
$ sudo firewall-cmd --permanent --add-port=30000-32767/tcp #NodePort Services $ sudo firewall-cmd --zone trusted --add-source 10.244.0.0/16 --permanent $ sudo firewall-cmd --reload
Calicoを使う場合は以下のポートなども許可。シングルノードでは特に設定しないでも良い。
kubeadmツールを使ったクラスター作成
クラスターを作成するにはkubeadm init
コマンドを使う。
$ sudo kubeadm init --kubernetes-version 1.21.0 --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=<Public IP Address>
シングルクラスターにする(もしくはmasterでもPodスケジュールしたい)場合は以下を実施
$ kubectl taint nodes --all node-role.kubernetes.io/master-
Workerを別に用意する場合は以下を実施して出力されるコマンドをノードで実行
$ kubeadm token create --print-join-command kubeadm join 10.211.55.44:6443 --token ....
CNIを導入。様々なネットワークアドオンが存在する。Calicoの場合は
構築後のクラスターの状態(シングルクラスターの場合)
$ kubectl get nodes NAME STATUS ROLES AGE VERSION localhost.localdomain Ready control-plane,master 58m v1.21.0 $ kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE kube-system calico-kube-controllers-6d8ccdbf46-pxr84 1/1 Running 0 57m kube-system calico-node-vj9cs 1/1 Running 0 57m kube-system coredns-558bd4d5db-2t6sw 1/1 Running 0 58m kube-system coredns-558bd4d5db-p84zs 1/1 Running 0 58m kube-system etcd-localhost.localdomain 1/1 Running 0 58m kube-system kube-apiserver-localhost.localdomain 1/1 Running 0 58m kube-system kube-controller-manager-localhost.localdomain 1/1 Running 0 58m kube-system kube-proxy-xsdt9 1/1 Running 0 58m kube-system kube-scheduler-localhost.localdomain 1/1 Running 0 58m $ kubectl get svc -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 58m kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 58m