Kubernetes 安裝筆記 part.1 : 環境準備
Kubernetes Master(Control-plane) / Worker 的 Node 環境準備
OS: | CentOs 7 (kernel = 3.10.1) |
K8s: | v1.24.1 (新安裝時預設使用當下的最新版,因此此版本資訊參考用) |
更新時間:
- 2022/06/11 - use containerd / 不使用 docker
- 2022/04/10 - kubelet kubeadm kubectl 等工具安裝錯誤的解決方案
1 Docker
清除舊安裝
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
更新 yum 以安裝 docker
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安裝 docker-ce 與依賴套件
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
指定版本安裝
列出可用的版本
sudo yum list docker-ce --showduplicates | sort -r
安裝指定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
啟動 docker 並設定預設啟動
警告在 kubernetes 1.24 版之後,由於被拔除了 docker 支援,所以這邊可以不用啟用了,並請參考 containerd 的設定章節sudo systemctl start docker sudo systemctl enable docker
Docker 磁碟管理模式確認
確認目前 docker 用的磁碟管理模式
docker info
資訊正常來說預設安裝後就會使用 overlay2 的磁碟管理模式,若非此模式,可配合下一節的 daemon.json 設定檔來變更設定
Set daemon
新安裝尚未有 daemon.json 檔案時可使用以下語法進行建立
sudo mkdir /etc/docker cat <<EOF | sudo tee /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2" } EOF
編輯現有 daemon.json
vim /etc/docker/daemon.json
加入 cgroupdriver 設定
可參考官方文件:
資訊"exec-opts": ["native.cgroupdriver=systemd"],
加入磁碟管理模式的設定
"storage-driver": "overlay2"
資訊由於現在 Linux OS 新安裝的 docker 都會預設都會使用 overlay2 的磁碟驅動,通常不用特別設定
有時可能也會發生調整為 overlay2 之後就無法啟動 docker 的狀況,所以若有 docker 無法啟動的情況時,可以省略 overlay2 的設定
restart docker
sudo systemctl enable docker sudo systemctl daemon-reload sudo systemctl restart docker
2 containerd 安裝
- Kubernetes 1.24 以後的版本建議使用此套件 (或其他預設支援的 ORI 套件)
- 如果有走前一章節的 docker 安裝的話,可以直接跳到
設定 config
更新 yum 以安裝 docker
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
安裝 containerd.io
sudo yum install containerd.io
設定 config
path: /etc/containerd/config.toml
因為使用 yum 安裝 containerd 時的預設設定檔長這樣 (已忽略註解項目)
disabled_plugins = ["cri"]
我們需要把 disabled_plugins
裡面的 cri 移除,並加入 systemd 的相關控制,所以設定檔會變成這樣
disabled_plugins = []
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
- 啟動 (重啟) containerd
sudo systemctl daemon-reload
sudo systemctl enable --now containerd
# 如果已經有設定啟用 containerd 的話就要用這個
sudo systemctl restart containerd
3 Iptables 設定
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# sysctl params required by setup, params persist across reboots
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# Apply sysctl params without reboot
sudo sysctl --system
4 關閉 Swap
- 使用指令關閉
sudo swapoff -a
永久關閉 swap
註解掉以下命令開啟的檔案中,含有 swap 字樣的行次
vim /etc/fstab
用 vim 開啟 /etc/sysctl.conf 檔案,並加入
vm.swappiness=0
此項我在目前有運作的主機上並未進行此設定,但仍可正常運作,但是前述 /etc/fstab 的檔案是確定要修改的
5 安裝 kubernetes 所需 cli 工具
直接參考官方資料
- 以下命令會安裝 kubelet / kubeadm / kubectl 等 cli 工具,並且會調整 selinux 設定
- 此處紀錄的命令已修正 repo_gpgcheck 問題 (請見下面 Troubleshooting 章節)
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
EOF
# Set SELinux in permissive mode (effectively disabling it)
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
預設會安裝以下依賴工具
- conntrack-tools
- cri-tools
- kubernetes-cni
- libnetfilter_cthelper
- libnetfilter_cttimeout
- libnetfilter_queue
- socat
5.1 Troubleshooting
如果在安裝 kubelet 等套件時出現以下訊息
https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64/repodata/repomd.xml: [Errno -1] repomd.xml signature could not be verified for kubernetes
Trying other mirror.
積極的解決方案 = unknow
消極的解決方案
修改 /etc/yum.repos.d/kubernetes.repo
裡面的 repo_gpgcheck
為 0
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl