1. KubeSphere簡介
KubeSphere 是在 Kubernetes 之上構建的以應用爲中心的多租戶容器管理平臺,支持部署和運行在任何基礎設施之上,提供簡單易用的操作界面以及嚮導式操作方式,在降低用戶使用容器調度平臺學習成本的同時,極大減輕開發、測試、運維的日常工作的複雜度,旨在解決 Kubernetes 本身存在的存儲、網絡、安全和易用性等痛點。幫助企業輕鬆應對敏捷開發、自動化運維、應用快速交付、微服務治理、多租戶管理、監控日誌告警、服務與網絡管理、鏡像倉庫等業務場景。
我們剛開始學習使用k8s,一般使用的是docker+kubeadm部署k8s集羣,然後再部署周邊的各組件,例如harbor,gitlab,jenkins,監控與告警(grafana,prometheus),日誌(elk,efk),ingress,helm、主機資源管理等各種組件,並讓這些組件進行協同工作。而通過Kubesphere,我們可以簡化這些流程,Kubesphere把上述的大部分組件進行了整合,安裝了Kubesphere就是安裝並整合了這些組件。
簡單來說,就是我們可以使用Kubesphere來管理k8s及其相關的組件,降低部署、學習成本,提供了一個完整的k8s集羣方案。
下面介紹具體的安裝流程,主要參考:https://kubesphere.io/docs/v2.1/zh-CN/release/release-v210/
2. 環境準備
主機環境
主機 | IP | 配置 | 角色 |
---|---|---|---|
master | 192.168.66.121 | 4核12G 60G+100G(/data) | master, etcd |
node1 | 192.168.66.122 | 4核12G 60G | worker |
node2 | 192.168.66.123 | 4核12G 60G | worker |
安裝方式:
Kubesphere有兩種安裝方式
-
在已經安裝好的k8s集羣環境中安裝,安裝文檔
這種方式安裝Kubesphere,相當於把它當成了一個管理服務,侵入性低。k8s集羣的管理,還可以按照以前的方式,對於已經成型的k8s集羣來說,這種方式,是很好的選擇。安裝複雜度較高。
生產中推薦這種方式。
-
在沒有配置docker、k8s的主機集羣中安裝。安裝文檔
這種方式只適合還沒有配置過任何環境的裸機集羣,使用ansible安裝,非常方便,省略了各種操作步驟。後期,增加節點比較方便。安裝複雜度較低。
如果是對k8s集羣,沒有太多定製化需求,生產環境也可以使用,維護成本低。
爲了測試方便,我們選擇第二種
安裝方式。
注意:如果機器硬件資源不足,裏面的一些組件,可以先不安裝,例如(devops
,harbor
,gitlab
這些組件都非常耗內存資源)
配置nfs
共享文件系統,爲了測試方便,我們使用nfs
在192.168.66.121上配置nfs目錄
yum -y install nfs-utils rpcbind
mkdir /data/nfs
vim /etc/exports
# 添加如下內容(一定要注意nfs的權限配置)
/data/nfs 192.168.66.0/24(rw,sync,no_root_squash,fsid=0)
systemctl restart nfs
showmount 192.168.66.121 # 查看並確認配置
3. 開始安裝
安裝過程使用root,或sudo用戶,其它用戶安裝的,具體參考官方文檔
3.1 下載安裝包
使用網絡安裝方式,下載安裝包至192.168.66.121
cd /data
curl -L https://kubesphere.io/download/stable/v2.1.0 > installer.tar.gz \
&& tar -zxf installer.tar.gz && cd kubesphere-all-v2.1.0/conf
3.2 修改主機配置文件hosts.ini
安裝流程使用ansible
進行文件傳輸與配置修改
cd /data/kubesphere-all-v2.1.0/conf
# 示例:
[all]
master ansible_connection=local ip=192.168.0.1
node1 ansible_host=192.168.0.2 ip=192.168.0.2 ansible_ssh_pass=PASSWORD
node2 ansible_host=192.168.0.3 ip=192.168.0.3 ansible_ssh_pass=PASSWORD
[kube-master]
master
[kube-node]
node1
node2
[etcd]
master
[k8s-cluster:children]
kube-node
kube-master
3.3 修改組件配置文件common.yaml
需要注意的配置如下
1. docker鏡像站
# 下面是默認配置
## Add other registry.
docker_registry_mirrors:
- https://docker.mirrors.ustc.edu.cn
- https://registry.docker-cn.com
- https://mirror.aliyuncs.com
# 建議配置:
docker_registry_mirrors:
- https://docker.mirrors.ustc.edu.cn
- https://mirror.aliyuncs.com # 最好是自己申請一個阿里雲的docker鏡像地址
https://registry.docker-cn.com這個地址很不穩定
2. pod與service網絡
這兩個網絡一定不要跟你現有的,正在使用的網絡網段有衝突
kube_service_addresses: 10.233.0.0/18
kube_pods_subnet: 10.233.64.0/18
3. 存儲配置
本地存儲關閉:
local_volume_enabled: false
使用nfs存儲
nfs_client_enabled: true
nfs_client_is_default_class: true
# Hostname of the NFS server(ip or hostname)
nfs_server: 192.168.66.121
# Basepath of the mount point
nfs_path: /data/nfs
nfs_vers3_enabled: false
nfs_archiveOnDelete: false
4. 其他組件
其他組件,只開啓部分
grafana_enabled: true
kibana_enabled: true
devops_enabled: false # devops先不啓用
openpitrix_enabled: true # 應用商店開啓
metrics_server_enabled: true
servicemesh_enabled: true
notification_enabled: true
alerting_enabled: true
# harbor和gitlab資源佔用過多,暫不開啓,可以在安裝完成之後再開啓
harbor_enabled: false
gitlab_enabled: false
3.4 開始安裝
配置文件和各種環境準備妥當後,就可以開始安裝了。
安裝開始前,確認selinux和firewalld已經關閉了,可以在安裝完成後再調整網絡安全策略。
安裝流程直接參考官方文檔即可。
1. 執行安裝腳本
進入安裝目錄,建議使用 root 用戶執行 install.sh安裝腳本:
cd /data/kubesphere-all-v2.1.0/scripts
./install.sh
2. Multi-node 模式開始部署
輸入數字 2選擇第二種 Multi-node 模式開始部署,安裝程序會提示您的環境是否前提條件,若滿足請輸入 “yes” 開始安裝。
################################################
KubeSphere Installer Menu
################################################
* 1) All-in-one
* 2) Multi-node
* 3) Quit
################################################
https://kubesphere.io/ 2018-10-14
################################################
Please input an option: 2
3. 驗證 KubeSphere 集羣部署是否成功
(1) 待安裝腳本執行完後,當看到如下 "Successful"界面,則說明 KubeSphere 安裝成功。
successsful!
#####################################################
### Welcome to KubeSphere! ###
#####################################################
Console: http://192.168.66.121:30880
Account: admin
Password: P@88w0rd
NOTE:Please modify the default password after login.
#####################################################
提示:如需要再次查看以上的界面信息,可在安裝包目錄下執行 cat kubesphere/kubesphere_running命令查看。
注意:登陸 Console 後請在 "集羣狀態" 查看服務組件的監控狀態,待所有組件啓動完成後即可開始使用,通常所有服務組件都將在 15 分鐘內啓動完成。
安裝部署需要注意的問題:
- 在192.168.66.121,這臺master主機上,查看pod,deployment的狀態,如果所有狀態都正常,才說明可以登錄瀏覽器了。否則,即使顯示部署成功,還是無法正常訪問。
- nfs目錄的配置一定要保證讀寫權限,否則有些有狀態服務的pod,會一直卡死,無法進行下去。這個一定要注意。我剛開始部署的時候,沒有注意到這個問題,卡了很長時間。各種報錯信息,還是沒查到根上。
- 注意查看pod的景象拉取情況,這裏就有一點要說明的,最好是在阿里雲上有自己的鏡像加速地址(如何申請請自行百度),https://registry.docker-cn.com這個地址非常不穩定,有拉取失敗和超時的情況。
- 如果部署失敗,根據提示信息百度一下,可能是主機缺少某些安裝包。或者是直接去項目地址,提issue,問開發。
安裝部署完成後,瀏覽器輸入地址是這樣的:
3.5 部署完成後
部署完成後,就可以按照官方文檔進行測試了。下面這些示例,跑一遍,基本就能熟悉Kubesphere的操作流程了。確實是易上手,功能很多。
4. 使用中的一些思考
4.1 docker配置需要注意的一些問題
1. 鏡像源
鏡像源配置,最好使用大廠的鏡像源
2. 存儲問題
在生產環境中,如果項目非常多,最好使用統一的基礎鏡像包,統一的開發環境包(java,php,go這些),避免docker images越來越多,越來越大。建議使用debian的基礎鏡像包+各種開發環境配置,來構建基礎包。也可以用centos的。
docker存儲路徑儘量不使用默認路徑,存儲目錄所在的磁盤,不要低於100g以下,避免程序越來越多,空間爆滿。可以用docker system prune
定期清理不用的鏡像。
3. harbor
生產環境使用harbor來管理鏡像倉庫,記得定期清理。
harbor如果使用的ip地址或http地址,docker上要注意配置Insecure Registries參數,信任你的harbor地址。
4.2 k8s配置,使用,需要注意的一些問題
1. 每臺主機可以調度的pod數
這個在Kubesphere的配置文件common.yaml中
kubelet_max_pods: 110
這個是可配置的,一般根據主機情況進行配置。
2. 資源預留
k8s的默認資源調度算法是有一定問題的,默認情況下 pod 能夠使用節點全部可用容量。
這是個問題,因爲節點自己通常運行了不少驅動 OS 和 Kubernetes 的系統守護進程(system daemons)。除非爲這些系統守護進程留出資源,否則它們將與 pod 爭奪資源並導致節點資源短缺問題
。
kubelet 公開了一個名爲 Node Allocatable 的特性,有助於爲系統守護進程預留計算資源。Kubernetes 推薦集羣管理員按照每個節點上的工作負載密度配置 Node Allocatable。
我在剛開始部署的時候,配置了日誌,devops等組件,後面想添加gitlab,harbor,調度了快半個小時,還沒結束,而且node2主機基本卡死,導致節點NotReady。
後面查了一下問題:
在部署前,node1的pod數是大於node2的,所以當有新的資源調度請求時,會把所有新的pod全部調度到node2。(注意:gitlab、harbor調度時是所有pod在一臺主機上)
但是node2上面pod數雖然不多,內存資源已經不足了。這個時候,pod還是往node2上調度,就會導致node2主機資源耗盡,全部卡死
。
在生產環境中,這個會是一個非常嚴重的bug。想象一下,一臺主機出現了NotReady,pod資源調度會到其他主機,這臺主機上的pod也會遷移到其它主機,其他主機也出現了NotReady,不斷重複這個過程,很可能會出現連鎖反應,集羣內的Nodes逐個的Not Ready了,導致集羣雪崩
。雖然概率很小,但是一定要進行預防。
配置參考:
https://cloud.tencent.com/developer/article/1097002
https://www.bladewan.com/2018/01/26/k8s_resource_resver/
http://docs.kubernetes.org.cn/723.html
https://www.cnblogs.com/xiaoyaojinzhazhadehangcheng/p/11605966.html
3. 證書與升級問題
證書的有效期是一年,一年之後需要更換證書,更新有效時間。解決方式簡單粗暴一些吧,每年,或者每半年升級一次k8s和docker版本就可以必滿。這種方式可以很好的解決版本漏洞問題。
4.3 KubeSphere使用中需要注意的一些問題
1. 節點資源預留
k8s節點的資源預留,KubeSphere默認是沒有配置的,需要手動修改k8s的配置
2. 持久化存儲問題
KubeSphere安裝配置前需要制定一種共享存儲,可以使用nfs,Ceph,GlusterFS,QingCloud 雲平臺塊存儲,QingStor NeonSAN,根據實際情況進行配置即可。
如果後面需要添加存儲,感覺添加配置的界面,對添加nfs不是太完善,可能是我有些小白了,感覺沒那麼方便。
如果pod不想用已經配置好的StorageClasses,想要使用其它共享存儲,可以在配置服務的時候,最後用編輯模式,編輯你想要使用的共享存儲配置。
3. 有狀態服務
在KubeSphere組件中,有一部分是有狀態服務,使用的存儲是我們剛開始配置的StorageClasses(我們演示用的是共享存儲nfs)。
生產環境如果要使用,初期建議,有狀態服務(比如數據庫,日誌系統,消息隊列),有計劃的遷移到k8s,而不是直接all in k8s。前期,應用程序先上k8s,優勢更明顯一些。
4. 其它組件
KubeSphere有一些組件,我們不需要在安裝前就配置。安裝完成後,我們可以再啓用。比如devops(基於jenkins),gitlab,harbor,這些組件,如果已經有現成的了,就不需要配置上了。如果有需要,修改配置即可開啓
kubectl edit cm -n kubesphere-system ks-installer
應用商店功能在初期可上可不上
5. 添加worker節點
參考:https://kubesphere.io/docs/v2.1/zh-CN/installation/add-nodes/
6. master、etcd節點高可用問題
參考:https://kubesphere.io/docs/v2.0/zh-CN/installation/master-ha/
v2.1版本這個文檔找不到了。
如果要配置多個master、etcd節點,修改安裝配置文件hosts.ini,把你要添加的主機加到相關主機組下面
修改配置文件common.yaml,如下
記得把loadbalancer的配置段打開。
ip地址這個可以用KubeSphere官方推薦的配置方式。當然,測試環境,也可以隨便配一個。
配置完成後重新執行安裝程序
cd /data/kubesphere-all-v2.1.0/scripts
./install.sh
執行完之後,新的master、etcd節點就加進去了。
7. etcd數據備份問題
在etcd主機上,看一下crontab任務,你會發現,KubeSphere已經幫你考慮到這個問題了。
每30分鐘備份一次。
寫在最後
docker,k8s,Kubesphere,功能都很多,組件很多,你想要用它們實現什麼功能呢?
這是一個需要在部署前,部署後都需要考慮的問題
我們需要通過k8s解決什麼問題?
- 服務高可用
- 彈性伸縮
- 應用發佈
- 環境一致性
- 權限、系統安全性,開發不再登錄主機
上面的只是基礎功能。。。。。。。。。。