kubeadm
是一種工具,
用於自動化 Kubernetes 叢集的部署過程,這是一個廣泛使用的容器編排系統。
Kubernetes 使開發者能夠部署、管理和擴展容器化應用程序,
而 kubeadm
專注於建立和初始化 Kubernetes 叢集的基本部分。
使用 kubeadm
,可以快速且一致地設置 Kubernetes 的主節點和工作節點。
它主要負責幾個關鍵任務:初始化叢集、設置 Kubernetes 控制平面、配置網絡層以及添加工作節點以加入叢集。
kubeadm
也處理安全設置,包括 TLS 證書的生成和分配,這對於叢集安全通訊至關重要。
此外,kubeadm
提供了一套命令,讓使用者能夠執行從初始化到升級、配置修改及叢集拆解的各種操作。
這樣的設計使得 Kubernetes 叢集的管理更加標準化和自動化,對於那些希望快速部署和維護 Kubernetes 環境的團隊來說,kubeadm
是一個非常有用的工具。
事先建立至少兩個或以上 虛擬機
(其中一台需作為 管理節點 其餘虛擬機作為 工作節點)
虛擬機建立可以參考 https://hackmd.io/@Tcweeei/BJqpg2aAT
(首先進入管理節點的虛擬機當中)
# master 可以自行更改成 修改的主機名稱
sudo hostnamectl set-hostname master
為甚麼需要改名呢?
預設名稱都會一樣,這樣會導致節點名稱相同進而引發錯誤
sudo reboot
重新開機 載入設定
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 快速關閉 SWAP
sudo swapoff -a
sudo vi /etc/fstab
將該兩行資訊 刪除 或 註釋 ( 前面加 # )
sudo reboot
重新開機,載入設定
# 加載相關模塊
sudo modprobe br_netfilter
# 建立相關設定
echo 'br_netfilter' | sudo tee /etc/modules-load.d/br_netfilter.conf
# 立即採用設定
sudo sysctl -p
# 使通過網橋的流量可以被iptables的規則處理
echo "1" | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
# 開啟IP轉發
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
# 寫入設定 確保每次開機可以直接運行
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.conf
# 立即載入設定
sudo sysctl -p
進行軟體更新 與 下載相關套件
# 軟體更新
sudo yum update -y
# 下載相關套件
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
拉取 CRI 倉庫 並下載 containred.io
# 新增 repo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安裝 containred.io
sudo yum install -y containerd.io
設定相關文件
# 建立相關文件
sudo mkdir -p /etc/containerd
# 更改文件相關設定
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
重啟 並 設定開機後自動啟動
# 重啟 containred
sudo systemctl restart containerd
# 設定 containred 開機後 自動開啟
sudo systemctl enable containerd
請參考官方文檔
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
依官方文檔為主 CentOS 屬於 Linux 中 RedHat 系列
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
sudo kubeadm init
很好,完成初始化
sudo cp /etc/kubernetes/admin.conf $HOME/.kubeconfig
sudo chown $(id -u):$(id -g) $HOME/.kubeconfig
export KUBECONFIG=$HOME/.kubeconfig
source ~/.bashrc
# 運行 CNI
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# 重啟 kubectl
systemctl restart kubelet
# 獲取 節點 資訊
kubectl get nodes
很好,看見 master 已經成功 Ready 了!
大部分基本設定 與 管理節點一致
不過最後下載完,並非初始化叢集 而是連線 管理節點
# worker 可以自行更改成 修改的主機名稱
sudo hostnamectl set-hostname worker
為甚麼需要改名呢?
預設名稱都會一樣,這樣會導致節點名稱相同進而引發錯誤
sudo reboot
重新開機 載入設定
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 快速關閉 SWAP
sudo swapoff -a
sudo vi /etc/fstab
將該兩行資訊 刪除 或 註釋 ( 前面加 # )
sudo reboot
重新開機,載入設定
# 加載相關模塊
sudo modprobe br_netfilter
# 建立相關設定
echo 'br_netfilter' | sudo tee /etc/modules-load.d/br_netfilter.conf
# 立即採用設定
sudo sysctl -p
# 使通過網橋的流量可以被iptables的規則處理
echo "1" | sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables
# 開啟IP轉發
echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.conf
# 寫入設定 確保每次開機可以直接運行
echo "net.bridge.bridge-nf-call-iptables = 1" | sudo tee -a /etc/sysctl.conf
# 立即載入設定
sudo sysctl -p
進行軟體更新 與 下載相關套件
# 軟體更新
sudo yum update -y
# 下載相關套件
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
拉取 CRI 倉庫 並下載 containred.io
# 新增 repo
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安裝 containred.io
sudo yum install -y containerd.io
設定相關文件
# 建立相關文件
sudo mkdir -p /etc/containerd
# 更改文件相關設定
containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
重啟 並 設定開機後自動啟動
# 重啟 containred
sudo systemctl restart containerd
# 設定 containred 開機後 自動開啟
sudo systemctl enable containerd
請參考官方文檔
https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
依官方文檔為主 CentOS 屬於 Linux 中 RedHat 系列
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.29/rpm/repodata/repomd.xml.key
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni
EOF
sudo yum install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet
kubeadm token create --print-join-command
按照先前生成的指令輸入
kubectl get nodes
很好,確實多一個節點
kubectl label nodes worker node-role.kubernetes.io/worker=worker
很好 目前工作節點的腳色也被設定為 worker
如此一來就完成 kubernetes 的 環境設置
備註:
可以根據需求新增其他工作節點,按照增加工作節點的方式依序增加