iT邦幫忙

1

搭建 Kubernetes 環境 透過 kubeadm 基於 CentOS

  • 分享至 

  • xImage
  •  

甚麼是 kubeadm

kubeadm 是一種工具,
用於自動化 Kubernetes 叢集的部署過程,這是一個廣泛使用的容器編排系統。

Kubernetes 使開發者能夠部署、管理和擴展容器化應用程序,
kubeadm 專注於建立和初始化 Kubernetes 叢集的基本部分。

使用 kubeadm,可以快速且一致地設置 Kubernetes 的主節點和工作節點。
它主要負責幾個關鍵任務:初始化叢集、設置 Kubernetes 控制平面、配置網絡層以及添加工作節點以加入叢集。

kubeadm 也處理安全設置,包括 TLS 證書的生成和分配,這對於叢集安全通訊至關重要。

此外,kubeadm 提供了一套命令,讓使用者能夠執行從初始化到升級、配置修改及叢集拆解的各種操作。

這樣的設計使得 Kubernetes 叢集的管理更加標準化和自動化,對於那些希望快速部署和維護 Kubernetes 環境的團隊來說,kubeadm 是一個非常有用的工具。

事前準備

事先建立至少兩個或以上 虛擬機
(其中一台需作為 管理節點 其餘虛擬機作為 工作節點)

image

虛擬機建立可以參考 https://hackmd.io/@Tcweeei/BJqpg2aAT

管理節點 - 基礎設置

(首先進入管理節點的虛擬機當中)

更改主機名稱

# master 可以自行更改成 修改的主機名稱
sudo hostnamectl set-hostname master

為甚麼需要改名呢?
預設名稱都會一樣,這樣會導致節點名稱相同進而引發錯誤

sudo reboot

重新開機 載入設定

關閉防火牆

sudo systemctl stop firewalld
sudo systemctl disable firewalld

關閉 SWAP 與 IP 開放設定

快速關閉 SWAP

# 快速關閉 SWAP
sudo swapoff -a

永久關閉 SWAP

sudo vi /etc/fstab

image

將該兩行資訊 刪除 或 註釋 ( 前面加 # )

sudo reboot

重新開機,載入設定

允許網橋(bridge)接收網路層的流量過濾功能

# 加載相關模塊
sudo modprobe br_netfilter
# 建立相關設定
echo 'br_netfilter' | sudo tee /etc/modules-load.d/br_netfilter.conf
# 立即採用設定
sudo sysctl -p

IP轉發和網橋過濾相關的設定

# 使通過網橋的流量可以被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

安裝 CRI 與 文件設置

進行軟體更新 與 下載相關套件

# 軟體更新
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

下載 kubeadm

請參考官方文檔
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

image

很好,完成初始化

Kubectl 設定

sudo cp /etc/kubernetes/admin.conf $HOME/.kubeconfig
sudo chown $(id -u):$(id -g) $HOME/.kubeconfig
export KUBECONFIG=$HOME/.kubeconfig
source ~/.bashrc 

建立 CNI

# 運行 CNI
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
# 重啟 kubectl
systemctl restart kubelet

image

獲取叢集運行狀態

# 獲取 節點 資訊
kubectl get nodes

image

很好,看見 master 已經成功 Ready 了!

工作節點 - 基礎設置

大部分基本設定 與 管理節點一致
不過最後下載完,並非初始化叢集 而是連線 管理節點

更改主機名稱

# worker 可以自行更改成 修改的主機名稱
sudo hostnamectl set-hostname worker

為甚麼需要改名呢?
預設名稱都會一樣,這樣會導致節點名稱相同進而引發錯誤

sudo reboot

重新開機 載入設定

關閉防火牆

sudo systemctl stop firewalld
sudo systemctl disable firewalld

關閉 SWAP 與 IP 開放設定

快速關閉 SWAP

# 快速關閉 SWAP
sudo swapoff -a

永久關閉 SWAP

sudo vi /etc/fstab

image

將該兩行資訊 刪除 或 註釋 ( 前面加 # )

sudo reboot

重新開機,載入設定

允許網橋(bridge)接收網路層的流量過濾功能

# 加載相關模塊
sudo modprobe br_netfilter
# 建立相關設定
echo 'br_netfilter' | sudo tee /etc/modules-load.d/br_netfilter.conf
# 立即採用設定
sudo sysctl -p

IP轉發和網橋過濾相關的設定

# 使通過網橋的流量可以被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

安裝 CRI 與 文件設置

進行軟體更新 與 下載相關套件

# 軟體更新
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

下載 kubeadm

請參考官方文檔
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

建立連線 token ( 回到管理節點 )

kubeadm token create --print-join-command

image

連接管理節點

按照先前生成的指令輸入
image

檢查連線 ( 回到管理節點 )

kubectl get nodes

image

很好,確實多一個節點

標籤新的工作節點 ( 回到管理節點 )

kubectl label nodes worker node-role.kubernetes.io/worker=worker

image

很好 目前工作節點的腳色也被設定為 worker

如此一來就完成 kubernetes 的 環境設置

備註:
    可以根據需求新增其他工作節點,按照增加工作節點的方式依序增加

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言