一、概述
官方中文文檔:https://kubesphere.io/docs/zh-CN/introduction/what-is-kubesphere/
KubeSphere 是什么
KubeSphere 是在 Kubernetes 之上構建的以應用為中心的企業級分布式容器平台,提供簡單易用的操作界面以及向導式操作方式,在降低用戶使用容器調度平台學習成本的同時,極大減輕開發、測試、運維的日常工作的復雜度,旨在解決 Kubernetes 本身存在的存儲、網絡、安全和易用性等痛點。除此之外,平台已經整合並優化了多個適用於容器場景的功能模塊,以完整的解決方案幫助企業輕松應對敏捷開發與自動化運維、DevOps、微服務治理、灰度發布、多租戶管理、工作負載和集群管理、監控告警、日志查詢與收集、服務與網絡、應用商店、鏡像構建與鏡像倉庫管理和存儲管理等多種業務場景。后續版本還將提供和支持多集群管理、大數據、人工智能等更為復雜的業務場景。
KubeSphere 從項目初始階段就采用開源的方式來進行項目的良性發展,相關的項目源代碼和文檔都在 GitHub 可見。KubeSphere 支持部署和運行在包括公有雲、私有雲、VM、BM 和 Kubernetes 等任何基礎設施之上,並且支持在線安裝與離線安裝,目前已在 阿里雲、騰訊雲、華為雲、青雲、AWS、Kubernetes 上進行過部署測試。
功能架構
關於KubeSphere,最好最全面最通俗易懂的一篇文章是《一文說清 KubeSphere 容器平台的價值》,鏈接如下:
https://www.kubernetes.org.cn/7962.html
個人理解
KubeSphere,這是國內唯一一個開源的Kubernetes(k8s)發行版,它的開源不涉及任何商業意圖,它不屬於青雲而屬於社區,它極大地降低了使用Kubernetes的門檻,它的出現將加速中國企業向雲原生邁進的步伐。
“發行版”的說法常用於Linux操作系統。比如,雖有Linux內核,而Ubuntu、CentOS等等叫做Linux發行版,對應的,Kubernetes就相當於內核,KubeSphere就是Kubernetes的發行版,正常人類是很難使用Linux內核和Kubenetes的,為了讓大家用起來,要基於Linux內核和Kubernetes做很多周邊配套,Linux和Kubenetes就好像一台光禿禿的汽車發動機,為了把它當車開,你起碼得有車架子、輪胎、方向盤、剎車、……等等。
所以,開源KubeSphere的青雲就像一個汽車廠,負責KubeSphere牌汽車各個組件的組裝搭配,不過,這個汽車不需要花錢就能獲取到,這就是青雲開源KubeSphere的實質。它的意義在於加快了大家使用k8s發動機的進程,讓大家都能開上KubeSphere牌汽車。
雲原生能幫助企業做數字化轉型,幫助企業用數字化轉型獲取競爭力。而KubeSphere可以讓企業更快地上原生,開上汽車。
以上摘抄自https://tech.ifeng.com/c/7u6tUXwXbJU
我覺得,讀完以后,醍醐灌頂,茅塞頓開
我們使用Linux的各種發行版(比如:CentOS、Ubuntu等)與Linux內核交互,極大地降低了使用Linux的門檻,而且像Ubuntu還提供了特別漂亮的桌面版,圖像界面式的操作使用起來更方便。
我們當然可以使用CMD命令行窗口同Windows系統交互,所有在圖形界面上完成的操作都可以通過命令行完成,但是這種操作方式的門檻極高,不利於微軟推行Windows桌面操作系統。
同樣的,Kubenetes就相當於內核,而KubeSphere就相當於是Kubernetes的發行版。KubeSphere提供極簡體驗,向導式UI,極大的降低了使用Kubenetes的門檻。
記不住Kubenetes命令不要緊,不會寫Dockerfile也沒關系,使用KubeSphere圖像界面以后一起都變得簡單了,而且它是以應用為中心的,極大地解放了運維和開發人員的生產力。
KubeSphere就是Java編程界的Spring。想想看,用了Spring以后你不需要關心各種數據庫的連接,各種各樣的組件都幫你集成好了,拿來就用。KubeSphere也是一樣,開箱即用。
二、最小化安裝
配置要求
官方配置要求:k8s集群可用 CPU > 1 Core 且可用內存 > 2 G
環境說明
系統 | k8s版本 | docker | ip | 主機名 | 配置 |
---|---|---|---|---|---|
centos 7.6 | 1.16.3 | 19.03.5 | 192.168.31.148 | k8s-master | 2核4G |
centos 7.6 | 1.16.3 | 19.03.5 | 192.168.31.179 | k8s-node01 | 2核4G |
安裝要求
KubeSphere 支持直接在 Linux 上部署集群,也支持在 Kubernetes 上部署,我這里選擇后者,基本的要求如下:
- Kubernetes 版本:1.15.x ≤ K8s version ≤ 1.17.x;
- Helm 版本:2.10.0 ≤ Helm Version < 3.0.0(不支持 helm 2.16.0#6894),且已安裝了 Tiller,參考 如何安裝與配置 Helm(預計 3.0 支持 Helm v3);
- 集群已有默認的存儲類型(StorageClass),若還沒有准備存儲請參考安裝 OpenEBS 創建 LocalPV 存儲類型用作開發測試環境。
- 集群能夠訪問外網,若無外網請參考 在 Kubernetes 離線安裝 KubeSphere。
注意:KubeSphere要求k8s版本 小於v1.18.0。否則會出現錯誤:
fatal: [localhost]: FAILED! => { "assertion": "kubernetes_version.stdout is version('v1.18.0', '<')", "changed": false, "evaluated_to": false, "msg": "The current k8s version is not supported" }
關於Kubernetes1.16.3安裝,請參考鏈接:
https://www.cnblogs.com/xiao987334176/p/11899321.html
安裝helm
KubeSphere依賴於helm,關於helm安裝,請參考鏈接:
https://www.cnblogs.com/xiao987334176/p/12752783.html
安裝nfs
為了方便演示,這里我直接在主機k8s-node01上面安裝。
創建共享目錄
mkdir -p /data/kubernetes
安裝組件
yum -y install nfs-utils rpcbind
編輯配置文件
vi /etc/exports
內容如下:
/data/kubernetes 192.168.31.0/24(rw,sync,no_root_squash)
注意:這里的192.168.31.0/24,表示客戶端訪問白名單。只有符合的ip,才能訪問。
啟動nfs服務
service nfs start
service rpcbind start
設置開機自啟動
systemctl enable nfs
systemctl enable rpcbind
登錄主機k8s-master,安裝客戶端組件
yum -y install nfs-utils rpcbind
測試nfs
# showmount -e 192.168.31.179 Export list for 192.168.31.179: /data/kubernetes 192.168.31.0/24
出現列表,表示nfs工作正常。
安裝 StorageClass
Kubernetes 支持多種 StorageClass,我這選擇 NFS 作為集群的 StorageClass。
參考地址:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client
登錄主機k8s-master,創建目錄
mkdir nfsvolume
下載yaml文件
https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/rbac.yaml https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/class.yaml https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/deployment.yaml
注意:以上鏈接,無法直接用wget下載。只能手動打開網頁,復制粘貼到本地。
修改 deployment.yaml 中的兩處 NFS 服務器 IP 和目錄
... env: - name: PROVISIONER_NAME value: fuseim.pri/ifs - name: NFS_SERVER value: 192.168.31.179 - name: NFS_PATH value: /data/kubernetes volumes: - name: nfs-client-root nfs: server: 192.168.31.179 path: /data/kubernetes
部署創建
具體的說明可以去官網查看
kubectl create -f rbac.yaml kubectl create -f class.yaml kubectl create -f deployment.yaml
注意:請確保每一個k8s node節點,安裝了nfs-utils
yum -y install nfs-utils
查看storageclass
# kubectl get storageclass
NAME PROVISIONER AGE
managed-nfs-storage fuseim.pri/ifs 139m
查看nfs pod
# kubectl get pods NAME READY STATUS RESTARTS AGE nfs-client-provisioner-59777fb457-dkf87 1/1 Running 0 153m
確保狀態正常
標記一個默認的 StorageClass
操作命令
kubectl patch storageclass managed-nfs-storage -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
請注意,最多只能有一個 StorageClass 能夠被標記為默認。
驗證標記是否成功
# kubectl get storageclass
NAME PROVISIONER AGE
managed-nfs-storage (default) fuseim.pri/ifs 139m
出現了一個default,表示成功了。
部署 KubeSphere
過程很簡單,如果你的機器資源足夠,集群可用 CPU > 8 Core 且可用內存 > 16 G。建議你進行完整安裝,參考鏈接:
https://kubesphere.io/docs/zh-CN/installation/install-on-k8s/
由於我的是在一台i7 16g內存的筆記本運行,只能最小化安裝。完整版真心帶不動!!!
創建目錄
mkdir kubesphere
下載yaml文件
https://raw.githubusercontent.com/kubesphere/ks-installer/master/kubesphere-minimal.yaml
注意:以上鏈接,無法直接用wget下載。只能手動打開網頁,復制粘貼到本地。
部署 KubeSphere
kubectl apply -f kubesphere-minimal.yaml
這個過程根據你實際網速,實際使用時間長度有所不同。
等待1分鍾,你可以通過如下命令查看實時的日志輸出。
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
當你看到如下日志輸出,證明你的 KubeSphere 部署成功
##################################################### ### Welcome to KubeSphere! ### ##################################################### Console: http://192.168.31.148:30880 Account: admin Password: P@88w0rd NOTES: 1. After logging into the console, please check the monitoring status of service components in the "Cluster Status". If the service is not ready, please wait patiently. You can start to use when all components are ready. 2. Please modify the default password after login. #####################################################
確認 Pod 都正常運行

[root@k8s-master kubesphere]# kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE default nfs-client-provisioner-59777fb457-dkf87 1/1 Running 0 156m kube-system calico-kube-controllers-7489ff5b7c-4vs7c 1/1 Running 0 154m kube-system calico-node-5qzhg 1/1 Running 0 154m kube-system calico-node-wrpq4 1/1 Running 0 154m kube-system coredns-58cc8c89f4-jhkzr 1/1 Running 0 159m kube-system coredns-58cc8c89f4-wmdqk 1/1 Running 0 159m kube-system etcd-k8s-master 1/1 Running 0 158m kube-system kube-apiserver-k8s-master 1/1 Running 0 158m kube-system kube-controller-manager-k8s-master 1/1 Running 0 159m kube-system kube-proxy-8rmvg 1/1 Running 0 159m kube-system kube-proxy-r9pnm 1/1 Running 0 159m kube-system kube-scheduler-k8s-master 1/1 Running 0 159m kube-system tiller-deploy-6588db4955-wsxdt 1/1 Running 0 140m kubesphere-controls-system default-http-backend-5d464dd566-vd8pr 1/1 Running 0 137m kubesphere-controls-system kubectl-admin-6c664db975-95dbr 1/1 Running 0 137m kubesphere-monitoring-system kube-state-metrics-566cdbcb48-69gqx 4/4 Running 0 136m kubesphere-monitoring-system node-exporter-ntdbs 2/2 Running 0 136m kubesphere-monitoring-system node-exporter-sz5rb 2/2 Running 0 136m kubesphere-monitoring-system prometheus-k8s-0 3/3 Running 1 135m kubesphere-monitoring-system prometheus-k8s-system-0 3/3 Running 1 135m kubesphere-monitoring-system prometheus-operator-6b97679cfd-rfj48 1/1 Running 0 136m kubesphere-system ks-account-596657f8c6-f6nfn 1/1 Running 0 137m kubesphere-system ks-apigateway-78bcdc8ffc-95g9n 1/1 Running 0 137m kubesphere-system ks-apiserver-5b548d7c5c-gkh5g 1/1 Running 0 137m kubesphere-system ks-console-78bcf96dbf-kvfq5 1/1 Running 0 137m kubesphere-system ks-controller-manager-696986f8d9-59fhp 1/1 Running 0 137m kubesphere-system ks-installer-75b8d89dff-l855b 1/1 Running 0 139m kubesphere-system openldap-0 1/1 Running 0 137m kubesphere-system redis-6fd6c6d6f9-d5tn9 1/1 Running 0 138m
三、訪問KubeSphere UI
使用IP:30880訪問 KubeSphere UI 界面,默認的集群管理員賬號為:admin,密碼:P@88w0rd
登錄成功后,效果如下:
點擊平台管理-->監控中心
本文參考鏈接:
https://www.cnblogs.com/cjsblog/p/12828639.html
https://www.kubernetes.org.cn/7315.html