本文來自於個人公衆號 程序猿天璇: 基於Kubernetes部署安裝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);LocalPV 存儲類型
用做開發測試環境。Kubernetes
離線安裝KubeSphere
。helm基本思想如圖所示api
如下內容引用自此篇文章安全
爲何要用Helm?bash
首先在原來項目中都是基於yaml文件來進行部署發佈的,而目前項目大部分微服務化或者模塊化,會分紅不少個組件來部署,每一個組件可能對應一個deployment.yaml,一個service.yaml,一個Ingress.yaml還可能存在各類依賴關係,這樣一個項目若是有5個組件,極可能就有15個不一樣的yaml文件,這些yaml分散存放,若是某天進行項目恢復的話,很難知道部署順序,依賴關係等,而全部這些包括服務器
Helm 基本概念網絡
Helm 能夠理解爲 Kubernetes 的包管理工具,能夠方便地發現、共享和使用爲Kubernetes構建的應用,它包含幾個基本概念
Helm 組件及架構
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
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
操做命令格式以下
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
過程很簡單,若是你的機器資源足夠,建議你進行完整安裝,操做步驟以下。若是你的資源不是很充足,則能夠進行最小化安裝,參考地址。我固然是選擇完整安裝了,香!
# 下載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,😏!