Kubernetes Dashboard 終結者:KubeSphere

> 原文連接:Kubernetes Dashboard 終結者:KubeSpherenode

2018 年 7 月份,青雲在 Cloud Insight 雲計算峯會上推出了一款全新的容器平臺——KubeSphere,旨在幫助企業快速低成本管理容器。而且 KubeSphere 自己是開源的,它是基於 Kubernetes 構建的分佈式、多租戶、企業級開源容器平臺,具備強大且完善的網絡與存儲能力,並經過極簡的人機交互提供完善的多集羣管理、CI / CD 、微服務治理、應用管理等功能,幫助企業在雲、虛擬化及物理機等異構基礎設施上快速構建、部署及運維容器架構,實現應用的敏捷開發與全生命週期管理。git

KubeSphere 目前最新的版本爲高級版 2.0.2,而且全部版本 100% 開源。它的 Dashboard 是這個樣子的:github

<center><p id="small">KubeSphere 主界面</p></center>redis

<center><p id="small">Istio 微服務治理界面</p></center>docker

<center><p id="small">多維度監控界面</p></center>api

這個顏值,比 Kubernetes Dashboard 不知道高到哪裏去了,感興趣的小夥伴能夠給一個 Github Star 鼓勵一下開發小哥。訪問官網請戳這裏:kubesphere.io瀏覽器

KubeSphere 官網大體提供了兩種安裝方式,一種是安裝 k8s 集羣和 KubeSphere,一種是在現有的 k8s 集羣上安裝 KubeSphere。我想大多數用戶的需求確定是在現有的集羣上安裝,但官方文檔給出的部署方案有不少奇怪的坑,本文就來爲你們一一填平這些坑。bash

1. 環境準備

固然,還有些同窗可能會和我同樣有強迫症,即便目前沒有現成的 Kubernetes 環境,我也不想讓 KubeSphere 給我來個全家桶,仍是想本身搭建 k8s 集羣,怎麼辦,二進制部署好煩啊,像我這種菜鳥沒有半天搞不定,有沒有簡單快捷的方法,十分鐘就能建好集羣?固然有,用 sealos 就行了,只需一條命令便可跨主機安裝全部依賴,不須要 ansible,不須要 ssh 登陸到其餘機器,安裝以前須要作一些準備工做:微信

個人機器規劃是這樣的:網絡

Hostname IP Role
sealos-node1 192.168.0.2 master
sealos-node2 192.168.0.3 node
sealos-node3 192.168.0.4 node

安裝步驟分爲如下幾步:

一、在 master 上執行如下命令:

$ sealos init --master 192.168.0.2 \
  --node 192.168.0.3 \
  --node 192.168.0.4 \
  --user root \
  --passwd password \
  --version v1.14.5 \
  --pkg-url /root/kube1.14.5.tar.gz

二、沒有了。

真沒有了,若是想了解原理,請查看 sealos 的官方文檔

下面就正式進入 KubeSphere 的安裝環節。

2. 安裝 KubeSphere

一、首先將 ks-installer 倉庫克隆到 master 節點上:

$ git clone https://github.com/kubesphere/ks-installer -b advanced-2.0.2

二、在 Kubernetes 集羣中建立名爲 kubesphere-systemkubesphere-monitoring-system 的 namespace。

三、建立 Kubernetes 集羣 CA 證書的 Secret。

> 注:按照當前集羣 ca.crt 和 ca.key 證書路徑建立(Kubeadm 建立集羣的證書路徑通常爲 /etc/kubernetes/pki

$ kubectl -n kubesphere-system create secret generic kubesphere-ca  \
--from-file=ca.crt=/etc/kubernetes/pki/ca.crt  \
--from-file=ca.key=/etc/kubernetes/pki/ca.key

四、建立 etcd 的證書 Secret。

> 注:根據集羣實際 etcd 證書位置建立;

  • 若 etcd 已經配置過證書,則參考以下建立:
$ kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs  \
--from-file=etcd-client-ca.crt=/etc/kubernetes/pki/etcd/ca.crt  \
--from-file=etcd-client.crt=/etc/kubernetes/pki/etcd/healthcheck-client.crt  \
--from-file=etcd-client.key=/etc/kubernetes/pki/etcd/healthcheck-client.key
  • 若 etcd 沒有配置證書,則建立空 Secret(如下命令適用於 Kubeadm 建立的 Kubernetes 集羣環境):
$ kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs

我這裏是使用 sealos 搭建的集羣,能夠經過查看 etcd 的資源清單文件來獲取它的證書:

五、修改部署文件

因爲 KubeSphere 部署過程當中涉及的組件很是多,安裝過程當中會有不少莫名其妙的坑,你可能會遇到如下幾個問題:

**問題 1:**若是現有集羣中已經安裝有 metrics-server,須要在配置文件中將 metrics_server_enable 設置爲 False。個人集羣中沒有安裝這個組件,因此不用設爲 False。

**問題 2:**在安裝過程當中卡死在 Waitting for ks-sonarqube port to become open 部分,節點上經過 NodePort 已經能夠正常訪問 sonarqube ,該問題沒有解決,因爲是一個不影響全局安裝的一個操做,因此一樣在配置文件中將 sonarqube_enable 設置爲 False。

**問題 3:**若是當前的集羣資源不是很足,能夠臨時取消掉 istio 的安裝,後續再開啓 istio 的支持。

**問題 4:**KubeSphere 的組件默認狀況下使用持久化存儲,須要確保集羣中有一個默認的 StorageClass 資源對象,若是確實沒有,只是想臨時部署一個 demo,能夠在配置文件中將 persistence 裏面的 enable 設置爲 false。

我最終用於安裝 KubeSphere 的配置文件以下:

只須要修改 ConfigMap 的值便可,其中 kube_apiserver_host 就是現有集羣的 APIServer 地址,etcd_endpoint_ips 就是 etcd 的所在節點 IP,默認端口爲 2379,若是你是集羣模式 etcd,這裏能夠填寫多個節點 IP,中間用 , 隔開,下面就是不須要安裝的組件設置爲 False。

六、自定義 Docker 鏡像。

由於目前 ConfigMap 中不能禁用日誌,因此只能強行修改 ansible playbook 了。進入 ks-installer 的根目錄,將 kubesphere.yaml 中的 ks-logging 刪除:

而後修改 Dockerfile,將 Helm v2 替換爲 Helm v3,緣由你懂得,我可不想裝 tiller。修改後的 Dockerfile 內容以下:

最後從新構建鏡像,將部署文件中 Deployment 的鏡像改成自定義的鏡像,就能夠直接部署了:

$ kubectl apply -f deploy/kubesphere.yaml

$ kubectl -n kubesphere-system get pod
NAME                                     READY   STATUS      RESTARTS   AGE
ks-account-585846bd44-mt7ss              1/1     Running     0          3h9m
ks-apigateway-7d77cb9495-hxgz8           1/1     Running     0          3h9m
ks-apiserver-697c5f4859-dsbmm            1/1     Running     0          3h7m
ks-console-5b8fbf45c4-7hxrw              1/1     Running     0          3h8m
ks-console-5b8fbf45c4-hj4bj              1/1     Running     0          3h8m
ks-controller-manager-7497f6c944-4k8wd   1/1     Running     0          3h8m
ks-docs-65999c97c9-5f9z7                 1/1     Running     0          3h37m
kubesphere-installer-6j49s               0/1     Completed   0          3h10m
openldap-78df9f7b47-wvs5n                1/1     Running     0          3h38m
redis-99f5985b8-2d62q                    1/1     Running     0          3h38m

$ kubectl -n kubesphere-system get job
NAME                   COMPLETIONS   DURATION   AGE
kubesphere-installer   1/1           2m9s       3h10m

若是上面用於安裝的 Job 是完成狀態的話,證實 KubeSphere 已經安裝成功了。

能夠建立一個 IngressRoute 對象來訪問 KubeSphere:

將域名信息加入本地電腦的 hosts 中,就能夠在瀏覽器中訪問 KubeSphere 的 Dashboard 了。

默認的集羣管理員帳號爲:

  • 用戶名:admin
  • 密碼:P@88w0rd

詳細的使用方式能夠參考官方文檔:https://kubesphere.io/docs/zh-CN/

3. 參考資料

微信公衆號

掃一掃下面的二維碼關注微信公衆號,在公衆號中回覆◉加羣◉便可加入咱們的雲原生交流羣,和孫宏亮、張館長、陽明等大佬一塊兒探討雲原生技術

相關文章
相關標籤/搜索