部署環境:
名稱 | IP | 備註 |
master01 |
192.168.2.1 | master,etcd |
master02 | 192.168.2.2 | master,etcd |
master03 | 192.168.2.3 | master,etcd |
node01 | 192.168.2.4 | node |
node02 | 192.168.2.5 | node |
node03 | 192.168.2.6 | node |
node04 | 192.168.2.7 | node |
breeze | 192.168.2.8 | breeze部署機 |
harbor | 192.168.2.9 | harbor鏡像倉庫 |
部署機配置:
關閉selinux和配置firewalld防火牆
setenforce 0
sed --follow-symlinks -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
firewall-cmd --set-default-zone=trusted
firewall-cmd --complete-reload
服務器時間同步:
yum install ntp -y
ntpdate time.windows.com
安裝使用工具:
yum install docker lrzsz vim net-tools wget epel-release -y
yum install ansible -y
安裝docker-compose命令:
下載連接:https://github.com/docker/compose/releases/,下載需要的版本,實例使用1.24版本
cp docker-compose1.24-Linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
下載用於部署某個Kubernetes版本的docker-compose文件,實例是centos7,版本1.17.3
將文件內容https://github.com/wise2c-devops/breeze/blob/v1.17.3/docker-compose-centos.yml複製到本地
vim docker-compose.yml
docker啓動:
systemctl start docker
systemctl enable docker
docker-compose運行部署文件:docker-compose up -d
部署完成截圖:
部署機上安裝其他服務器的ssh免密登錄:
ssh-keygen 後面一直回車就行
ssh-copy-id 192.168.2.1
...
ssh-copy-id 192.168.2.9
中間會有兩段交互信息,輸入密碼即可
Are you sure you want to continue connecting (yes/no)? yes
[email protected]'s password:
使用ansible同步其他服務器的時間:
vim /etc/ansible/hosts #輸入其他服務器,具體使用參考ansible配置
ansible all -m command -a 'yum install ntp -y'
ansible all -m command -a 'ntpdate time.windows.com'
ansible all -m cron -a "minute=00 hour=01 day=* month=* weekday=* name='Ntpdate server for sync time' job='ntpdate time.windows.com'"
WEB部署集羣:
打開瀏覽器,訪問部署程序的圖形界面(部署機 IP 及端口 88),添加主機列表、添加服務角色並將加入的主機進行角色分配,然後開始部署:http://192.168.2.8:88
創建集羣主機,master、node、harbor
添加組件:
docker組件添加:希望Breeze部署程序使用界面裏輸入的主機名代替當前服務器的主機名,則勾選format host name選項框
harbor組件安裝:鏡像倉庫設置這裏如果選擇某個版本,那麼Breeze會自動部署非https的Harbor,如果在版本里選擇external,那麼Breeze則不再部署Harbor而是和現有Harbor做對接;參數harbor entry point是指用戶端訪問鏡像倉庫的URL,可以直接寫IP地址或寫對應的域名;如果對接外部的Harbor,請注意勾選外部Harbor是以http訪問還是以https訪問的
高可用組件(haproxy+keepalived):vip for k8s master是指三個k8s master服務器的高可用虛擬浮動IP地址;網卡請填寫實際操作系統下的網卡名,注意請保證3個節點網卡名一致;router id和virtual router id請確保不同k8s集羣使用不同的值
etcd組件安裝:Etcd可以選擇部署於K8S Master節點也可以選擇獨立的三臺主機,Back up etcd database folder and upgrade etcd cluster 和 Make a snapshot backup for etcd and upgrade etcd cluster 這兩個選項是用於升級環節的,在升級Etcd集羣前做備份,默認新裝集羣不要勾選這兩項
kubernetes組件安裝:Kubernetes entry point是指高可用的一個設定值,如果生產環境有硬件或軟件負載均衡指向這裏的k8s master所有節點,那麼就可以在這裏填寫負載均衡的統一入口地址。相對於昂貴的F5專業硬件設備,我們也可以使用HAProxy和Keepalived的組合輕鬆完成這個設置,Breeze自帶這個組合模塊的部署。例如下圖的 192.168.2.10:6444 就是k8s集羣高可用的統一入口,k8s的worker node會使用這個地址訪問API Server。請注意如果使用的是Breeze自帶的高可用組件haproxy+keepalived,則請填寫實際的虛IP與默認端口6444。Just add new worker nodes, do not reinstall this cluster這個選項是用於向現有集羣添加計算節點(Worker Nodes),Upgrade existing cluster和Upgrade K8s nodes automatically選項用於升級現有集羣而不是新裝集羣,而在生產環境升級集羣一般採用對節點逐步進行,Breeze只負責將需要升級的鏡像及腳本發到工作節點,應由管理員手動執行,並在執行過程中觀察業務應用的高可用不受影響,如果勾選了Upgrade K8s nodes automatically這一切會全自動進行,如果所有業務都是有多副本分佈在不同計算節點,那麼這不會影響業務服務,否則不推薦使用這種方式進行集羣在線升級。關於升級的詳情,請參考breeze視頻演示。Kubernetes的界面裏還有CNI模型供選擇,請按實際需求選擇部署Flannel、Calico還是Canal,至於Calico又分爲IPIP隧道模式和BGP路由模式,還需要注意集羣規模,詳情請參考Calico官方網站文檔解釋。對於網絡地址範圍CIDR參數共有三個,分別是Pod、Service、和ClusterIP的地址範圍定義,默認值即可正常工作,除非它與你實際網絡分配相沖突,才需要手動修改後進行部署
點擊下一步,開始安裝:
等待安裝,當上圖圖標全都變爲綠色時,就表示安裝成功
可以在部署機上輸入命令 docker logs -f deploy-main 來獲取更詳細的日誌
安裝完成查看:
訪問dashboard:
Kubernetes Dashboard的訪問入口我們採用了NodePort:30300的方式暴露端口,因此可以通過火狐瀏覽器訪問 https://任意服務器IP:30300 來登錄Dashboard頁面,注意其它瀏覽器例如Chrome因爲不接受自簽名證書會拒絕訪問請求;新版本Dashboard引入了驗證模式,可以通過以下命令獲取admin-user的訪問令牌:
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
問題:安裝後,發現集羣並沒有安裝上dashboard
解決:登陸master01,進入目錄/var/tmp/wise2c/kubernetes,運行命令:kubectl apply -f kubernetes-dashboard.yml和kubectl apply -f kubernetes-dashboard-svc.yml即可解決
參考文檔:https://github.com/wise2c-devops/breeze/blob/v1.17.3/BreezeManual-CN.md
常見排錯說明在此: https://github.com/wise2c-devops/breeze/blob/master/TroubleShooting-CN.md
-----------日常記錄---------------