ホスト名設定
hostnamectl set-hostname k8s1
# hostnamectl set-hostname k8s2
# hostnamectl set-hostname k8s3
# hostnamectl set-hostname k8s4
IPアドレスとホスト名の紐付け
cat << _EOF_ | sudo tee -a /etc/hosts
172.24.20.40 k8s1
172.24.20.41 k8s2
172.24.20.42 k8s3
172.24.20.43 k8s4
_EOF_
Docker/kubernetesを動作させるための設定
cat << _EOF_ | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
_EOF_
sudo sysctl --system
Cgroupの設定
ラズパイに設定しないのであればいらない?
依存する関連パッケージのインストール
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common socat conntrack ipset
プロキシの設定
apt-getやaptのインストールが出来ない場合がある。以下の設定を入れる
nano /etc/hosts
Acquire::http::No-Cache true;
Acquire::http::Pipeline-Depth 0;
containerdのインストール
curl -fsSL https://download.docker.com/linux/ubuntu/gpg |
##アーキテクチャの設定は適切に
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt-get -y install containerd.io
再起動後にもcontainerdで利用するカーネルモジュールを有効
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
カーネルモジュールのロード、アンロードを行う
sudo modprobe overlay
sudo modprobe br_netfilter
containerdの設定ファイルを編集
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
Kubernetesパッケージのインストール
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
cat << _EOF_ | sudo tee /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/ kubernetes-xenial main
_EOF_
sudo apt-get update
apt-get install -y kubelet=1.23.3-00 kubeadm=1.23.3-00 kubectl=1.23.3-00
apt-mark hold kubelet kubeadm kubectl
swapオフ
sudo swapoff -a
kubeadmの設定
nano /etc/systemd/system/kubelet.service.d/10-allow-swap.conf
[Service]
Environment="KUBELET_EXTRA_ARGS=--fail-swap-on=false"
systemctl daemon-reload
Kubeletの設定
systemctl start kubelet
systemctl enable kubelet
ファイアーウォールの無効化(状況に応じて)
systemctl stop ufw
Kubernetesクラスタの初期化(MASTER)
MasterNodeだけで初期化コマンドを実行する。
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=k8s1 --apiserver-cert-extra-sans=k8s1
kubeletに関するエラー
ここでkubeletに関するエラーが出た。
kubeadmのリセット
kubeadm reset
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --control-plane-endpoint=k8s1 --apiserver-cert-extra-sans=k8s1
出力
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
Alternatively, if you are the root user, you can run:
export KUBECONFIG=/etc/kubernetes/admin.conf
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/
You can now join any number of control-plane nodes by copying certificate authorities
and service account keys on each node and then running the following as root:
kubeadm join k8s1:6443 --token 867qpj.1dwsg5x8e003ihyi \
--discovery-token-ca-cert-hash sha256:2dc50ac606f40bb12d4eb1ac0af2bfc852a47be83f3ad1b4f8f75c69338dca1c \
--control-plane
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join k8s1:6443 --token 867qpj.1dwsg5x8e003ihyi \
--discovery-token-ca-cert-hash sha256:2dc50ac606f40bb12d4eb1ac0af2bfc852a47be83f3ad1b4f8f75c69338dca1c
出力されたコマンドをWorkerに打ち込む
コントロールプレーンを追加したかったら別途上のコマンドを打ち込む
kubectl利用する認証情報のファイルをデフォルトで読み込まれるパスにコピー
$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config
Workerノードの組み込み
クラスタへの参加コマンドを実行する。
kubeadm join k8s1:6443 --token 867qpj.1dwsg5x8e003ihyi \
--discovery-token-ca-cert-hash sha256:2dc50ac606f40bb12d4eb1ac0af2bfc852a47be83f3ad1b4f8f75c69338dca1c
MasterのみFlannelの設定
sudo sysctl net.bridge.bridge-nf-call-iptables=1
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml