文章目錄
Windows 慣用者如何在 Red Hat Enterprise Linux 7.5 (CentOS ) 上使用 kubeadm 架設 Kubernetes (K8s)
之前筆記 Windows 慣用者如何在 Ubuntu Server 16.04 LTS 上使用 kubeadm 架設 Kubernetes (K8s) 紀錄到如何在 Ubuntu 上使用 kubeadm 建立 Kubernetes cluster,考量到公司使用的 linux 都為 CentOS (RHEL) 所以趁著印象還新鮮時趕緊紀錄一下在 CentOS 上架設 Kubernetes 的做法
開始安裝前的小提醒
指令常需要以
root
(類似 Windows 的系統管理員角色) 執行在每個指令前加上
sudo
來執行切換成
root
使用者切換前需先為
root
設定密碼,否則切換時會一直遇到認證失敗 (Authentication failure)使用
sudo passwd
設定密碼實際切換為
root
su root
或
su
安裝 Docker
記得執行指令前加上
sudo
或是切換為root
直接從 OS 中內建的 CentOS-Extras 庫安裝 Docker
yum( Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 SUSE 中基於 RPM 檔的軟體管理工具,能夠從指定的伺服器自動下載 RPM 檔並且安裝,可以處理依賴性關係,並且一次安裝所有相依賴的軟體,無須自行下載、安裝,作用等同於 Windows 的 Chocolatey ,只是在 Windows 上 Chocolatey 需要自行安裝
yum install -y docker
-y
:安裝過程選項提示皆預設選擇 “yes”
設定 Docker 在系統開機時自動啟動
systemctl enable docker
立即啟動 Docker 服務
systemctl start docker
確認安裝成功
docker version
安裝 kubeadm, kubelet 跟 kubectl
記得執行指令前加上
sudo
或是切換為root
將 yum 來源位置覆寫至 kubernetes.repo
這邊要留意一下從 Windows 貼上因為換行符號與 linux 不同,可能會有問題
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF
關閉
SELinux
SELinux
是Security Enhanced Linux
縮寫,原意是為了加強安全性避免被攻擊,但因為 container 需要存取 host 上的檔案系統,而目前kubelet
暫時未支援SELinux
,需先行關閉setenforce 0
安裝
kubelet
,kubeadm
,kubectl
kubelet
安裝於 cluster 所有機器上的元件,用來啟動 pod 跟 container
kubeadm
是 Kubernetes 官方提供的快速安裝和初始化 Kubernetes cluster 的工具
kubectl
Kubernetes 的命令列工具
yum install -y kubelet kubeadm kubectl
設定
kubelet
在系統開機時自動啟動並立即啟動kubelet
服務systemctl enable kubelet && systemctl start kubelet
確認安裝成功
kubeadm version
關閉系統 Swap
Swap 類似 Windows 中的虛擬記憶體,從 Kubernetes 1.8 開始要求關閉系統的 Swap
關閉 Swap
swapoff -a
修改
/etc/fstab
,避免Swap
自動掛載sed -e '/swap/ s/^#*/#/' -i /etc/fstab
確認關閉
free -m
建立 cluster
初始化 master
--pod-network-cidr
是為後面的 Pod 網路套件 (flannel
) 做準備kubeadm init --pod-network-cidr=10.244.0.0/16
確保有權限執行
kubectl
非 root user
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
root user
export KUBECONFIG=/etc/kubernetes/admin.conf
安裝 Pod 網路套件
這邊以
flannel
為例kubectl apply --namespace kube-system -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
加入其他 Node
- 新的 Node 上需先完成前面的
安裝 Docker
,安裝 Kubernetes
,關閉系統 Swap
執行 join 指令
指令內容會在 master 執行
kubeadm init
時產生kubeadm join --token <token> <master-ip>:<master-port> --discovery-token-ca-cert-hash sha256:<hash>
出現如下錯誤訊息
Failed to request cluster info, will try again: [Get https://x.x.x.x:xxxx/api/v1/namespaces/kube-public/configmaps/cluster-info: dial tcp x.x.x.x:xxxx: getsockopt: no route to host
請先將 master 的防火牆關閉
systemctl disable firewalld systemctl stop firewalld
加入成功
至 master 上確認
kubectl get nodes
心得
大致安裝流程與 Windows 慣用者如何在 Ubuntu Server 16.04 LTS 上使用 kubeadm 架設 Kubernetes (K8s) 相同,只是語法上跟 Ubuntu 有些不同,另外需要特別留意的是 CentOS 安全性較高,需要自行關閉
但對於關閉 SELinux
與防火牆,我還是覺得有點害怕,或許日後的版本會再做調整吧
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。