天天看點

建構生産環境可用的高可用kubernetes叢集建構生産環境可用的高可用kubernetes叢集 | sealos項目位址 特性ship on docker啟動ansible容器與免密鑰設定修改配置啟動安裝uninstall all

建構生産環境可用的高可用kubernetes叢集 | sealos項目位址

特性

  • [x] 支援任意節點的etcd叢集自動建構,且etcd叢集使用 安全證書,通過static pod方式啟動,這樣可以通過監控pod來監控etcd叢集健康狀态
  • [x] 支援多master節點,允許任意一台master當機叢集功能不受影響
  • [x] calico使用etcd叢集,配置安全證書,網絡管控資料無單點故障
  • [x] 包含dashboard, heapster coreDNS addons, coreDNS雙副本,無單點故障
  • [x] 使用haproxy負載master節點,同樣是用static pod,這樣可通過統一監控pod狀态來監控haproxy是否健康
  • [x] haproxy節點使用keepalived提供虛拟IP,任意一個節點當機虛拟IP可實作漂移,不影響node連接配接master
  • [x] node節點與kube-proxy配置使用虛拟IP
  • [ ] 叢集健康檢測功能
  • [ ] promethus 監控功能,一鍵安裝,無需配置
  • [ ] EFK 日志收集功能
  • [ ] 分布式HA模式,不用keepalived,減少叢集建構出錯機率,無VIP切換時間
  • [x] istio 微服務支援

ship on docker

你必須已經有了 sealyun kubernetes離線安裝包 (預設支援kubernetes版本v1.12.x,針對特殊版本的适配會切分支處理)

針對後續高版本會有更多優化

大概原理是為了減少大家搭建ansible和sealos的環境,用戶端的東西都放到docker裡,把安裝包挂載到容器中,然後ansible腳本會把包分發到你在hosts檔案中配置的所有伺服器上

是以大概分成三步:

  1. 配置免密鑰,把docker裡的公鑰分發給你所有的伺服器
  2. 配置ansible playbook的hosts檔案
  3. 執行ansible

下面逐一說明:

啟動ansible容器與免密鑰設定

找台主控端如你的PC,或者一台伺服器,把下載下傳好的離線包拷貝到/data目錄,啟動sealos容器,把離線包挂載進去:

docker run --rm -v /data/kube1.12.0.tar.gz:/data/kube1.12.0.tar.gz -it -w /etc/ansible fanux/sealos:v1.12.0-beta bash           

在容器裡面執行:

mkdir ~/.ssh cd ~/.ssh ssh-keygen -t rsa           

ssh public key:

cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7fTirP9zPcx7wIjhsF+Dyu0A2sV5llC8jsmp/xtiyuJirE3mclpNEqgrzHC26f+ckfzwoE0HPU0wDPxbWFl3B0K89EwJSBsVZSZ0VLYnZp0u2JgwCLZzZzKfY0018yoqoL9KHz/68RpqtG2bWVf0/WSj+4hN7xTRpRTtXJHBOQRQBfqVSIcfMBSEnO15buUbDaLol/HvQd0YBrWwafQtMacmBlqDG0Z6/yeY4sTNRVRV2Uu5TeaHfzgYgmY9+NxtvPn8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464           

這樣公鑰就生成了

在其它所有要安裝k8s的伺服器上執行:

cd ~/.ssh
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7fTirP9zPcx7wIjhsF+Dyu0A2sV5llC8jsmp/xtiyuJirE3mclpNEqgrzHC26f+ckfzwoE0HPU0wDPxbWFl3B0K89EwJSBsVZSZ0VLYnZp0u2JgwCLZzZzKfY0018yoqoL9KHz/68RpqtG2bWVf0/WSj+4hN7xTRpRTtXJHBOQRQBfqVSIcfMBSEnO15buUbDaLol/HvQd0YBrWwafQtMacmBlqDG0Z6/yeY4sTNRVRV2Uu5TeaHfzgYgmY9+NxtvPn8Td6tgZtq7cVU//kSsbzkUzDSD8zsh8kPUm4yljT5tYM1cPFLGM4m/zqAjAZN2YaEdFckJFAQ7TWAK857d root@8682294b9464" >> authorized_keys           

這樣公鑰分發工作完成了,所有的機器直接ssh無需輸入密碼即可登入

修改配置

Config your own hosts

# cd /etc/ansible # vim hosts           

配置說明:

[k8s-master]
10.1.86.204 name=node01 order=1 role=master lb=MASTER lbname=lbmaster priority=100
10.1.86.205 name=node02 order=2 role=master lb=BACKUP lbname=lbbackup priority=80
10.1.86.206 name=node03 order=3 role=master 

[k8s-node]
10.1.86.207 name=node04 role=node

[k8s-all:children]
k8s-master
k8s-node

[all:vars]
vip=10.1.86.209 # 同網段未被占用IP
k8s_version=1.12.0 # kubernetes版本
ip_interface=eth.*
etcd_crts=["ca-key.pem","ca.pem","client-key.pem","client.pem","member1-key.pem","member1.pem","server-key.pem","server.pem","ca.csr","client.csr","member1.csr","server.csr"]
k8s_crts=["apiserver.crt","apiserver-kubelet-client.crt","ca.crt", "front-proxy-ca.key","front-proxy-client.key","sa.pub", "apiserver.key","apiserver-kubelet-client.key", "ca.key", "front-proxy-ca.crt", "front-proxy-client.crt" , "sa.key"]           

注意role=master的會裝etcd與kubernetes控制節點,role=node即k8s node節點,配置比較簡單,除了改IP和版本,其它基本不用動

啟動安裝

# ansible-playbook roles/install-all.yaml           

uninstall all

# ansible-playbook roles/uninstall-all.yaml           

本文轉自SegmentFault-

建構生産環境可用的高可用kubernetes叢集

繼續閱讀