在現有 Kubernetes 集群安裝 KubeSphere詳細步驟


KubeSphere 是在 Kubernetes 之上構建的開源的企業級容器平台,提供簡單易用的操作界面以及向導式操作方式,在降低用戶使用容器調度平台學習成本的同時,極大減輕開發、測試、運維的日常工作的復雜度,旨在解決 Kubernetes 本身存在的存儲、網絡、安全和易用性等痛點。

除此之外,平台已經整合並優化了多個適用於容器場景的功能模塊,以完整的解決方案幫助企業輕松應對敏捷開發與自動化運維、微服務治理、多租戶管理、工作負載和集群管理、服務與網絡管理、應用編排與管理、鏡像倉庫管理和存儲管理等業務場景。

KubeSphere 源代碼和安裝使用文檔已在 GitHub 上開放,歡迎關注:https://github.com/kubesphere/kubesphere

在現有 Kubernetes 集群安裝 KubeSphere詳細步驟在現有 Kubernetes 集群安裝 KubeSphere詳細步驟

KubeSphere 一開始就推出了開源的社區版本,只是之前提供的安裝方式比較單一,在已有的 Kubernetes 集群上要想安裝相對較麻煩,本文將為你演示如何在已有的 Kubernetes 集群上安裝 KubeSphere。

環境准備

本文安裝 KubeSphere 使用到的相關環境及工具如下:

使用 kubeadm 搭建的 Kubernetes 1.15.2 版本集群

Helm v2.14.1 版本

使用 NFS 作為集群存儲后端

使用到的安裝腳本地址:https://github.com/kubesphere/ks-installer

首先需要確保集群中有一個默認的 StorageClass 資源對象,關於 StorageClass 的使用可以查看前面的文章介紹:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dynamic-data
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: fuseim.pri/ifs

其中 annotations 下面的 storageclass.kubernetes.io/is-default-class: “true” 是必須的:

$ kubectl get sc
NAME                     PROVISIONER      AGE
dynamic-data (default)   fuseim.pri/ifs   4h41m
安裝

首先將上面安裝倉庫 Clone 到 Kubernetes 集群中的 master 節點上,因為我們需要使用到 master 節點上的一些證書文件。

1.首先,在集群中創建名為 kubesphere-system 和 kubesphere-monitoring-system 的namespace:

$ cat EOF | kubectl create -f -
---
apiVersion: v1
kind: Namespace
metadata:
  name: kubesphere-system
---
apiVersion: v1
kind: Namespace
metadata:
  name: kubesphere-monitoring-system
EOF

2.創建集群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 

3.創建etcd證書secret

注:以集群實際 etcd 證書位置創建;若 etcd 沒有配置證書,則創建空secret

$ 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

由於我這里使用的是 kubeadm 搭建的集群,所以我們可以查看 etcd 的資源清單文件:

$ cat /etc/kubernetes/manifests/etcd.yaml
......
livenessProbe:
  exec:
    command:
    - /bin/sh
    - -ec
    - ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt
        --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key
        get foo
......

從這里我們就可以獲得 etcd 集群相關的證書。

4.修改部署文件 由於 KubeSphere 部署過程中涉及到的組件非常多,所以安裝過程中難免會有一些奇奇怪怪的問題,下面是我在安裝過程中遇到的一些問題:

問題1:openldap 這個組件啟動報錯,因為 ks-account 組件又是依賴 openldap 這個組件的,所以同樣啟動報錯,在安裝過程中 openldap 出現了類似如下錯誤信息。

......
rm: cannot remove ‘/container/service/slapd/assets/config/bootstrap/ldif/readonly-user’: Directory not empty 
rm: cannot remove ‘/container/service/slapd/assets/config/bootstrap/schema/mmc’: Directory not empty 
rm: cannot remove ‘/container/service/slapd/assets/config/replication’: Directory not empty 
rm: cannot remove ‘/container/service/slapd/assets/config/tls’: Directory not empty *** /container/run/startup/slapd 

failed with status 1

解決方法:修改配置文件roles/ks-core/prepare/templates/ks-account-init.yaml.j2文件,在 openldap 這個 Deployment 下面容器中添加啟動參數--copy-service

......
image: {{ openldap_repo }}:{{ openldap_tag }}
imagePullPolicy: IfNotPresent
args:   # 添加該啟動參數
- --copy-service 
name: openldap
......

問題2:如果現有集群中已經安裝有 metrics_server,需要在配置文件中將 metrics_server_enable 設置為 False

問題3:在安裝過程中卡死在Waitting for ks-sonarqube port to become open部分,節點上通過 NodePort 已經可以正常訪問 sonarqube ,該問題沒有解決,由於是一個不影響全局安裝的一個操作,所以同樣在配置文件中將 sonarqube_enable 設置為 False

問題4:在安裝過程中 istio 安裝不上,由於我當前的集群資源不是很足,所以也臨時取消掉 istio 的安裝,后續在開啟 istio 的支持。

最終用於安裝 KubeSphere 的配置文件如下所示:(deploy/kubesphere.yaml)

---
apiVersion: v1
data:
  ks-config.yaml: |
    kube_apiserver_host: 10.151.30.11:6443
    etcd_tls_enable: True
    etcd_endpoint_ips: 10.151.30.11
    disableMultiLogin: True
    elk_prefix: logstash
    metrics_server_enable: False
    sonarqube_enable: False
    istio_enable: False
kind: ConfigMap
metadata:
  name: kubesphere-config
  namespace: kubesphere-system
......

只需要修改 ConfigMap 的值即可,其中 kube_apiserver_host 就是現有集群的 APIServer 地址,etcd_endpoint_ips 就是 etcd 的所在節點 IP,默認端口為 2379,如果你是集群模式 etcd,這里可以填寫多個節點 IP,中間用,隔開,下面就是不需要安裝的組件設置為 False。

到這里執行安裝命令即可:

$ kubectl apply -f deploy/kubesphere.yaml
$ kubectl get pods -n kubesphere-system
NAME                                     READY   STATUS      RESTARTS   AGE
ks-account-575d4fd8f-r5476               1/1     Running     0          44m
ks-apigateway-5c56f79976-jxmd4           1/1     Running     0          44m
ks-apiserver-5d56bc8976-678hj            1/1     Running     0          41m
ks-console-75b6cb84c-ldsn7               1/1     Running     0          42m
ks-console-75b6cb84c-pzqcx               1/1     Running     0          42m
ks-controller-manager-78bfd56fbf-dtcg2   1/1     Running     0          43m
ks-docs-65bd89559b-58lpp                 1/1     Running     0          3h16m
kubesphere-installer-x7q8z               0/1     Completed   0          45m
openldap-5bd67c84c6-gw8f5                1/1     Running     0          114m
redis-6cf6fc98b5-nsqfn                   1/1     Running     0          3h19m

在安裝過程中可能會因為拉取鏡像過慢導致安裝校驗失敗,這種情況我們可以先手動在節點上拉取鏡像,然后再重新創建一個新的用於安裝的 Job 即可。通過如下命令可以查看部署過程中的完整日志:

$ kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l job-name=kubesphere-installer -o jsonpath='{.items[0].metadata.name}') -f

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

最后,可以創建一個 Ingress 對象來訪問 KubeSphere:(kubesphere-ingress.yaml)

$ apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: kubesphere
  namespace: kubesphere-system
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  rules:
  - host: ks.qikqiak.com
    http:
      paths:
      - path:
        backend:
          serviceName: ks-console
          servicePort: 80

直接創建即可:

$ kubectl create -f kubesphere-ingress.yaml

最后做好域名解析,在瀏覽器中就可以訪問了:

在現有 Kubernetes 集群安裝 KubeSphere詳細步驟在現有 Kubernetes 集群安裝 KubeSphere詳細步驟

默認的登錄信息為:

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

在現有 Kubernetes 集群安裝 KubeSphere詳細步驟在現有 Kubernetes 集群安裝 KubeSphere詳細步驟

KubeSphere 還在持續迭代和快速發展,歡迎大家在 GitHub 關注和下載體驗。

本文地址:https://www.linuxprobe.com/kubernetes-kubesphere.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM