1. 程式人生 > >離線安裝 k8s 1.5 高可用叢集_Kubernetes中文社群

離線安裝 k8s 1.5 高可用叢集_Kubernetes中文社群

經常遇到全新初始安裝k8s叢集的問題,所以想著搞成離線模式,本著最小依賴原則,採用純shell指令碼編寫

基於Centos7-1503-minimal執行指令碼測試OK, 預設安裝docker1.12.3 etcd-v3.0.15 k8s-v1.5.1

本離線安裝所有的依賴都打包放到了百度網盤,不放心安全的,可自行打包替換,就是些映象tar包和rpms

簡要說明

  • HA環境,需要先存在etcd叢集,可使用etcd目錄下的一鍵部署etcd叢集指令碼
  • 預設master和etcd部署在同一臺裝置,共三臺相互冗餘
  • master間通過keepalived做主-從-從冗餘, controller和scheduler通過自帶的–leader-elect選項
  • 如果只想部署單master的話, 可以修改腳本里KUBE_HA=false
  • 如果想部署kubeadm的預設模式,即全面容器化但都單例項的方式,可以參考這裡
  • [TODO]現在的keepalived和etcd叢集沒用容器執行,後面有時間會嘗試做到全面容器化
  • 下圖是官方ha模型,除了LB部分是用的keepalived的VIP功能, 此專案和官方基本一致

20170214173000

第一步

離線安裝的基本思路是,在k8s-deploy目錄下,臨時啟個http server, 節點上會從此拉取所依賴映象和rpms

# python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...

windows上可以用hfs臨時啟個http server, 自行google如何使用

master側

執行以下命令,初始化master, master側如果是單核的話,會因資源不足, dns安裝失敗。

curl -L http://192.168.56.1:8000/k8s-deploy.sh | bash -s master \
    --api-advertise-addresses=192.168.56.103 \
    --external-etcd-endpoints=http://192.168.56.100:2379,http://192.168.56.101:2379,http://192.168.56.102:2379
  • 192.168.56.1:8000 是我的http-server, 注意要將k8s-deploy.sh 裡的HTTP-SERVER變數也改下
  • –api-advertise-addresses 是VIP地址
  • –external-etcd-endpoints 是你的etcd叢集地址,這樣kubeadm將不再生成etcd.yaml manifest檔案
  • 記錄下你的token輸出, minion側需要用到
  • 安裝docker時,如果之前裝過“不乾淨的”東西,可能會遇到依賴問題,我這裡會遇到systemd-python依賴問題, 解除安裝之,即可 yum remove -y systemd-python

replica master側

在replica master側執行下面的命令,會自動和第一個master組成冗餘

最好和第一個master建立免祕鑰認證,此過程需要從master那裡拷貝配置

curl -L http://192.168.56.1:8000/k8s-deploy.sh | bash -s replica \
    --api-advertise-addresses=192.168.56.103 \
    --external-etcd-endpoints=http://192.168.56.100:2379,http://192.168.56.101:2379,http://192.168.56.102:2379

重複上面的步驟之後,會有一個3例項的HA叢集,執行下面命令的時候可關閉第一個master,以驗證高可用

  • 驗證vip漂移的網路影響ping 192.168.56.103
  • 驗證kube-apiserver故障影響
    while true; do kubectl get po -n kube-system; sleep 1; done
    

minion側

視自己的情況而定, 使用第一個master側生成的token, 注意這裡的56.103是你的VIP地址

curl -L http://192.168.56.1:8000/k8s-deploy.sh |  bash -s join --token=6c96b6.ca1d13745c237904 192.168.56.103

總結

  • 指令碼如果中間執行出錯,就會自動退出,自己手動執行下退出前的地方,找原因,解決後,繼續執行一開始的命令curl -L … | bash -s …
  • 1.5.1,預設關閉了匿名訪問,可通過帶token的方式訪問API,參考這裡,
    TOKEN=$(kubectl describe secret $(kubectl get secrets | grep default | cut -f1 -d ' ') | grep -E '^token' | cut -f2 -d':' | tr -d '\t')
    curl -k --tlsv1 -H "Authorization: Bearer $TOKEN" https://192.168.56.103:6443/api
    

    當然也可以通過更改apiserver的啟動引數來開啟匿名訪問,自行google

  • 1.5 與 1.3給我感覺最大的變化是網路部分, 1.5啟用了cni網路外掛 不需要像以前一樣非要把flannel和docker綁在一起了(先啟flannel才能啟docker)。具體可以看這裡