基於Kubernetes部署安裝KubeSphere

本文來自於個人公衆號 程序猿天璇基於Kubernetes部署安裝KubeSphere,轉載請保留連接 ;)

KubeSphere簡介

Kubernetes官方有提供一套Dashboard,可是我這裏選擇功能更強大的KubeSphere,如下內容引用自KubeSphere官網:linux

KubeSphere是在Kubernetes之上構建的以應用爲中心的企業級分佈式容器平臺,提供簡單易用的操做界面以及嚮導式操做方式,在下降用戶使用容器調度平臺學習成本的同時,極大減輕開發、測試、運維的平常工做的複雜度,旨在解決 Kubernetes 自己存在的存儲、網絡、安全和易用性等痛點。除此以外,平臺已經整合並優化了多個適用於容器場景的功能模塊,以完整的解決方案幫助企業輕鬆應對敏捷開發與自動化運維、DevOps、微服務治理、灰度發佈、多租戶管理、工做負載和集羣管理、監控告警、日誌查詢與收集、服務與網絡、應用商店、鏡像構建與鏡像倉庫管理和存儲管理等多種業務場景。後續版本還將提供和支持多集羣管理、大數據、人工智能等更爲複雜的業務場景。git

KubeSphere 從項目初始階段就採用開源的方式來進行項目的良性發展,相關的項目源代碼和文檔都在GitHub可見。KubeSphere 支持部署和運行在包括公有云、私有云、VM、BM 和 Kubernetes 等任何基礎設施之上,而且支持在線安裝與離線安裝,目前已在阿里雲、騰訊雲、華爲雲、青雲、AWS、Kubernetes上進行過部署測試github

KubeSphere 2.1 提供了全棧化容器部署與管理平臺,支持在生產環境安裝與使用,它的核心功能能夠歸納在如下的功能架構圖中,瞭解 2.1 的具體功能說明,能夠在產品功能進行查看。數據庫

安裝要求

KubeSphere支持直接在Linux上部署集羣,也支持在Kubernetes上部署,我這裏選擇後者,基本的要求以下:json

  • 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

安裝Helm

Helm簡介

helm基本思想如圖所示api

如下內容引用自此篇文章安全

爲何要用Helmbash

首先在原來項目中都是基於yaml文件來進行部署發佈的,而目前項目大部分微服務化或者模塊化,會分紅不少個組件來部署,每一個組件可能對應一個deployment.yaml,一個service.yaml,一個Ingress.yaml還可能存在各類依賴關係,這樣一個項目若是有5個組件,極可能就有15個不一樣的yaml文件,這些yaml分散存放,若是某天進行項目恢復的話,很難知道部署順序,依賴關係等,而全部這些包括服務器

  • 基於yaml配置的集中存放
  • 基於項目的打包
  • 組件間的依賴
  • 均可以經過helm來進行解決。

Helm 基本概念網絡

Helm 能夠理解爲 Kubernetes 的包管理工具,能夠方便地發現、共享和使用爲Kubernetes構建的應用,它包含幾個基本概念

  • Chart:一個 Helm 包,其中包含了運行一個應用所須要的鏡像、依賴和資源定義等,還可能包含 Kubernetes 集羣中的服務定義
  • Release: 在 Kubernetes 集羣上運行的 Chart 的一個實例。在同一個集羣上,一個 Chart 能夠安裝不少次。每次安裝都會建立一個新的 release。例如一個 MySQL Chart,若是想在服務器上運行兩個數據庫,就能夠把這個 Chart 安裝兩次。每次安裝都會生成本身的 Release,會有本身的 Release 名稱。
  • Repository:用於發佈和存儲 Chart 的倉庫。

Helm 組件及架構

Helm 採用客戶端/服務器架構,有以下組件組成:

  • Helm CLI 是 Helm 客戶端,能夠在本地執行
  • Tiller 是服務器端組件,在 Kubernetes 羣集上運行,並管理 Kubernetes 應用程序的生命週期
  • Repository 是 Chart 倉庫,Helm客戶端經過HTTP協議來訪問倉庫中Chart的索引文件和壓縮包。

Helm安裝

安裝過程以下

# 建立部署目錄並下載Helm
mkdir tiller
cd tiller

# 先使用官方的方式安裝,若是安裝不了,能夠看到下載文件的地址,而後手動下載解壓
curl -L https://git.io/get_helm.sh | bash
# 獲取到下載地址後,想辦法下載
wget https://get.helm.sh/helm-v2.16.3-linux-amd64.tar.gz
tar zxf helm-v2.16.3-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

# 驗證
helm version

部署tiller,對於tiller的官方的解釋以下

Tiller is the server component for helm. Tiller will be present in the kubernetes cluster and the helm client talks to it for deploying applications using helm charts.

先建立 SA

# yaml文件以下
$ cat /root/tiller/helm-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
 name: tiller
 namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
 name: tiller
roleRef:
 apiGroup: rbac.authorization.k8s.io
 kind: ClusterRole
 name: cluster-admin
subjects:
 - kind: ServiceAccount
 name: tiller
 namespace: kube-system

建立ac

kubectl apply -f helm-rbac.yaml

初始化,這個過程可能不會成功,具體接着往下看

helm init --service-account=tiller --history-max 300

檢查初始化的狀況,不出意外的話,牆內用戶看pod詳情能夠看到獲取不到鏡像的錯誤。

kubectl get deployment tiller-deploy -n kube-system

若是一直獲取不到鏡像,能夠經過更換到Azure中國鏡像源來解決,操做步驟以下:

# 編輯 deploy
kubectl edit deploy tiller-deploy -n kube-system
# 查找到image地址,替換爲以下地址,保存退出
gcr.azk8s.cn/kubernetes-helm/tiller:v2.16.3

接下來稍等片刻,再次查看deployment和pod詳情,就正常了

kubectl get deployment tiller-deploy -n kube-system

安裝StorageClass

Kubernetes支持多種StorageClass,我這選擇NFS做爲集羣的StorageClass。

參考地址:https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client

下載所需文件

下載所需文件,並進行內容調整

mkdir nfsvolume && cd nfsvolume
for file in class.yaml deployment.yaml rbac.yaml ; do wget https://raw.githubusercontent.com/kubernetes-incubator/external-storage/master/nfs-client/deploy/$file ; done

修改deployment.yaml中的兩處NFS服務器IP和目錄

...
          env:
            - name: PROVISIONER_NAME
              value: fuseim.pri/ifs
            - name: NFS_SERVER
              value: 192.168.115.50
            - name: NFS_PATH
              value: /data/k8s
      volumes:
        - name: nfs-client-root
          nfs:
            server: 192.168.115.50
            path: /data/k8s

部署建立

具體的說明能夠去官網查看。

kubectl create -f rbac.yaml
kubectl create -f class.yaml
kubectl create -f deployment.yaml

若是日誌中看到「上有壞超級塊」,請在集羣內全部機器上安裝nfs-utils並啓動。

yum -y install nfs-utils
systemctl start nfs-utils
systemctl enable nfs-utils
rpcinfo -p

查看storageclass

$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage fuseim.pri/ifs Delete Immediate false 10m

標記一個默認的StorageClass

操做命令格式以下

kubectl patch storageclass -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

請注意,最多隻能有一個 StorageClass 可以被標記爲默認。

驗證標記是否成功

$ kubectl get storageclass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
managed-nfs-storage (default) fuseim.pri/ifs Delete Immediate false 12m

部署kubesphere

過程很簡單,若是你的機器資源足夠,建議你進行完整安裝,操做步驟以下。若是你的資源不是很充足,則能夠進行最小化安裝,參考地址。我固然是選擇完整安裝了,香!

# 下載yaml文件
mkdir kubesphere && cd kubesphere
wget https://raw.githubusercontent.com/kubesphere/ks-installer/master/kubesphere-complete-setup.yaml
# 部署 kubesphere
kubectl apply -f kubesphere-complete-setup.yaml

這個過程根據你實際網速,實際使用時間長度有所不一樣。你能夠經過以下命令查看實時的日誌輸出。當你在日誌充看到http://192.168.115.49:30880字樣的輸出時,證實你的集羣安裝成功。

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

當你看到以下日誌輸出,證實你的 KubeSphere 部署成功

**************************************************
task monitoring status is successful
task notification status is successful
task devops status is successful
task alerting status is successful
task logging status is successful
task openpitrix status is successful
task servicemesh status is successful
total: 7     completed:7
**************************************************
#####################################################
###              Welcome to KubeSphere!           ###
#####################################################

Console: http://192.168.115.49: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 都正常運行後,可以使用IP:30880訪問 KubeSphere UI 界面,默認的集羣管理員帳號爲admin/P@88w0rd,Enjoy it,😏!

相關文章
相關標籤/搜索