文章目錄
透過 Kubespray 來架設 Kubernetes
最近剛好有機會可以參與專案的部署作業,雖然過去也持續進行過不同方式的 CI/CD,但真正部署至 Kubernetes 上則是全新的體驗,為了降低扯團隊後腿的機會,免不了要自己練習一下先,在細節不少加上本來掌握度就不高下狀況可謂是相當慘烈呀,於是一搞定就馬上筆記,加深印象
過去筆記 (CentOS ) 上使用kubeadm 架設Kubernetes (K8s) 提到的 kubeadm 與 Kubespray 都是 Google open source 的工具,其中 Kubespray 主要核心是透過 Ansible 來執行相關操作,雖說與 Kubeadm 都有細微操作被包裝的問題,但相較之下 Kubespray 因為搭配了 Ansible,讓靈活度與門檻降低了些
基本環境說明
以下 VM 透過 Azure 建立
CentOS 7.6 * 3
- Standard B2ms
- 2 vcpus, 8 GiB memory
- 200 GB Standard SSD
VM 配置說明
請確保各個 node 間可以透過 host name 連線
Name IP 用途 node1 10.0.0.4 ansible-client,master,etcd node2 10.0.0.5 node,etcd node3 10.0.0.6 node,etcd Kubespray 2.10
Kubernetes 1.14.3
VM 基礎環境設定
關閉 selinux
執行對象:所有 VM
setenforce 0 sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
setenforce 0
暫時關閉sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
永久關閉,需重新開機
關閉系統 Swap 交換空間
執行對象:所有 vm
swapoff -a && echo "vm.swappiness=0" >> /etc/sysctl.conf && sysctl -p && free –h
閉閉防火牆
執行對象:所有 vm
systemctl disable firewalld && systemctl stop firewalld
啟用 iptable filter 的 FOWARD
執行對象:所有 vm
iptables -P FORWARD ACCEPT
啟用 bridge-nf-call-iptablesx
這是同事提醒的設定,不啟用的話某些網路功能會受限 (我還沒搞清問題,先紀錄起來)
modprobe br_netfilter echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables
設定免密碼登入
執行對象:ansible-client ;在 ansible-client 產生 key,並複製至各個 vm,避免執行 ansible 部署時出問題
ssh-keygen -t rsa -N "" ssh-copy-id -i /root/.ssh/id_rsa.pub 10.0.0.4 ssh-copy-id -i /root/.ssh/id_rsa.pub 10.0.0.5 ssh-copy-id -i /root/.ssh/id_rsa.pub 10.0.0.6
安裝基本軟體
執行對象:ansible-client
yum -y install epel-release && yum -y install https://centos7.iuscommunity.org/ius-release.rpm && yum clean all && yum makecache && yum install -y python-pip python36 python-netaddr python36-pip ansible git
透過 Kubespray 安裝
執行對象: ansible-client
下載 Kubespray
2019/7/14 測試:
master
仍無法順利完成安裝,需使用release-2.10
branch 最高僅能安裝Kubernetes v1.14.3
2019/9/6 測試:使用
release-2.11
可以順利安裝Kubernetes v1.15.3
git clone https://github.com/kubernetes-sigs/kubespray.git -b release-2.11
2019/12/5 測試:使用
release-2.12
可以順利安裝Kubernetes v1.16.3
git clone https://github.com/kubernetes-sigs/kubespray.git -b release-2.11
安裝相依套件
cd kubespray pip install -r requirements.txt
調整 Kubespray 參數
複製一份 config
{k8s}
名稱可自訂,以下以k8s
為例示範cp -rfp inventory/sample inventory/k8s
修改
inventory/k8s/inventory.ini
[all] node1 ansible_host=10.0.0.4 node2 ansible_host=10.0.0.5 node3 ansible_host=10.0.0.6 [kube-master] node1 [etcd] node1 node2 node3 [kube-node] node1 node2 node3 [k8s-cluster:children] kube-master kube-node
修改
inventory/k8s/group_vars/all/all.yml
loadbalancer_apiserver_localhost: true kubelet_load_modules: true
執行 Kubespray 安裝 Kubernetes
ansible-playbook -i inventory/k8s/inventory.ini cluster.yml -b -v -k
Kubernetes 的版本紀錄在
inventory/k8s/group_vars/k8s-cluster/k8s-cluster.yml
心得
看了幾篇 kubespray 安裝的網路文章,大致上理解操作流程與步驟,不過細節幾乎不同:像是 更新 cpu kernel
、inventory.ini
值的設定…etc,對於一個新入門的人來說,我自己覺得門檻不低,另外一個讓我決定要自己紀錄一篇的重大理由是:看的大部份文章都需要 科學上網
,或是調整 docker registry 位置,這對我來說是種雜訊
我照著文章操作過不下十次,VM 建了又刪、刪了又建,一直無法成功,老是卡在 etcd 的 health check,每次一跑都要個十幾二十分鐘,最後靠著 Kubernetes 大神同事的幫忙,終於發現原來是 kubespray master 的 issue 造成的,改用 release branch 就沒問題,感謝同事的協助
就個人使用體驗來說,kubespray 確實比 kubeadm 好些,多數設定都可以透過 yaml 檔案來調整,指令使用也相對較簡潔,不過還是有不少動作被包在 ansible 中,從這點來看 ansible 至少還是比較通用些
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-02
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。