k8s-集羣管理系統-KubeSphere2.1.0搭建與測試

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有兩種安裝方式

  1. 在已經安裝好的k8s集羣環境中安裝,安裝文檔
    這種方式安裝Kubesphere,相當於把它當成了一個管理服務,侵入性低。k8s集羣的管理,還可以按照以前的方式,對於已經成型的k8s集羣來說,這種方式,是很好的選擇。安裝複雜度較高。
    生產中推薦這種方式。

  2. 在沒有配置docker、k8s的主機集羣中安裝。安裝文檔
    這種方式只適合還沒有配置過任何環境的裸機集羣,使用ansible安裝,非常方便,省略了各種操作步驟。後期,增加節點比較方便。安裝複雜度較低。
    如果是對k8s集羣,沒有太多定製化需求,生產環境也可以使用,維護成本低。

爲了測試方便,我們選擇第二種安裝方式。

注意:如果機器硬件資源不足,裏面的一些組件,可以先不安裝,例如(devopsharborgitlab這些組件都非常耗內存資源)


配置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 分鐘內啓動完成。

安裝部署需要注意的問題:

  1. 在192.168.66.121,這臺master主機上,查看pod,deployment的狀態,如果所有狀態都正常,才說明可以登錄瀏覽器了。否則,即使顯示部署成功,還是無法正常訪問。
  2. nfs目錄的配置一定要保證讀寫權限,否則有些有狀態服務的pod,會一直卡死,無法進行下去。這個一定要注意。我剛開始部署的時候,沒有注意到這個問題,卡了很長時間。各種報錯信息,還是沒查到根上。
  3. 注意查看pod的景象拉取情況,這裏就有一點要說明的,最好是在阿里雲上有自己的鏡像加速地址(如何申請請自行百度),https://registry.docker-cn.com這個地址非常不穩定,有拉取失敗和超時的情況。
  4. 如果部署失敗,根據提示信息百度一下,可能是主機缺少某些安裝包。或者是直接去項目地址,提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解決什麼問題?

  1. 服務高可用
  2. 彈性伸縮
  3. 應用發佈
  4. 環境一致性
  5. 權限、系統安全性,開發不再登錄主機

上面的只是基礎功能。。。。。。。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章