KubeSphere安裝部署2.1.0DEV版本
1 Kubesphere簡介
https://github.com/kubesphere/ks-installer
https://kubesphere.io/zh-CN/install/
https://kubesphere.io/docs/express/zh-CN/basic/
https://www.qikqiak.com/post/install-kubesphere-on-k8s/
KubeSphere是在 Kubernetes 之上構建的企業級分布式多租戶容器管理平台,提供簡單易用的操作界面以及向導式操作方式,在降低用戶使用容器調度平台學習成本的同時,極大減輕開發、測試、運維的日常工作的復雜度,旨在解決 Kubernetes 本身存在的存儲、網絡、安全和易用性等痛點。除此之外,平台已經整合並優化了多個適用於容器場景的功能模塊,以完整的解決方案幫助企業輕松應對敏捷開發與自動化運維、微服務治理、多租戶管理、工作負載和集群管理、服務與網絡管理、應用編排與管理、鏡像倉庫管理和存儲管理等業務場景。
1.1 產品功能
KubeSphere 為用戶提供了一個具備極致體驗的 Web 控制台,讓您能夠像使用任何其他互聯網產品一樣,快速上手各項功能與服務。KubeSphere 目前集成了應用負載、服務與網絡、應用管理、資源管理和平台管理共五大模塊,以下從專業的角度為您詳解各個模塊的功能服務:
| 功能 |
說明 |
| 應用負載管理 |
對 kubernetes 中的多種 workload 提供向導式管理界面,包括 Deployments,Daemon Sets,Stateful Sets,並提供 HPA 支持。 |
| 服務與網絡管理 |
基於原生 API,對 k8s 中的服務 (Service)、應用路由 (ingress) 等功能提供向導式管理界面,快速將應用暴露以供用戶訪問。高級版將集成 istio 中的 微服務治理、熔斷、灰度發布、限流、智能路由等功能提供向導式管理界面。 |
| 應用管理 |
后端使用開源的 OpenPitrix 服務,為用戶提供應用全生命周期管理功能,包括: 應用倉庫管理、應用拓撲圖、APM、應用變更和發布、應用上下線審批、版本控制、魯棒性測試等。 |
| 資源管理 |
提供存儲、主機、集群以及配額管理。存儲既支持主流開源存儲解決方案,也可對接青雲的塊存儲和 NeonSAN。可批量添加主機,且對主機平台及系統弱依賴。並且支持鏡像倉庫管理、鏡像復制、權限管理、鏡像安全掃描。 |
| 平台管理 |
提供基於角色的細粒度權限多租戶管理,平台服務間進行加密通信;提供操作審計日志;可對宿主機以及容器鏡像進行安全掃描並發現漏洞。 |
1.2 部署模式
KubeSphere 部署支持 all-in-one 和 multi-node 兩種部署模式, KubeSphere Installer 采用 Ansible 對部署目標機器及部署流程進行集中化管理配置。采用預配置模板,可以在部署前通過對相關配置文件進行自定義實現對部署過程的預配置,以適應不同的 IT 環境,幫助您快速部署 KubeSphere。
- KubeSphere 集群中由於部署服務的不同,分為管理節點和計算節點兩個角色。
- 當進行 all-in-one 模式進行單節點部署時,這個節點既是管理節點,也是計算節點。
- 當進行 multi-node 模式部署多節點集群時,可在配置文件中設置集群角色。
- 由於部署過程中需要更新操作系統和從鏡像倉庫拉取鏡像,因此必須能夠訪問外網。無外網環境需先下載離線安裝包安裝。
- 如果是新裝系統,在 Software Selection 界面需要把 OpenSSH Server 選上。
2 部署
https://github.com/kubesphere/ks-installer
2.1 環境准備
- 使用 kubeadm 搭建的 Kubernetes 1.15.3 版本集群,Kubernetes 版本要求為 1.13.0 ≤ K8s Version ≤ 1.16 kubernetes(3):kubeadm安裝k8s1.15
- Helm v2.13.1 版本,至少為2.10 kubernetes(27):k8s包管理工具-helm(1)-安裝helm
- 使用 NFS 作為集群存儲后端 kubernetes(13):k8s數據持久化-pv和pvc—NFS實現
- 使用到的安裝腳本地址: https://github.com/kubesphere/ks-installer
- 集群現有的可用內存至少在
10G以上
# kubectl version | grep Server Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.3", GitCommit:"2d3c76f9091b6bec110a5e63777c332469e0cba2", GitTreeState:"clean", BuildDate:"2019-08-19T11:05:50Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"linux/amd64"} # helm version Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
2.1.1 創建StorageClass
首先需要確保集群中有一個默認的 StorageClass 資源對象,關於 StorageClass 的使用可以查看
kubernetes(14):k8s基於NFS部署storageclass實現pv自動供給
# vim sphere-sc.yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: kubesphere-data annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: fuseim.pri/ifs
其中 annotations 下面的 storageclass.kubernetes.io/is-default-class: “true” 是必須的:
# kubectl get sc | grep dynamic NAME PROVISIONER AGE kubesphere-data (default) fuseim.pri/ifs 4h41m
2.2 清理環境
建議先停止已經安裝的prometheus/gitlab/Jenkins/sonarqube/harbor/ metrics_server/node-exporter/ Dashboard會有沖突
2.3 安裝
2.3.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.3.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
2.3.3 創建etcd證書secret
注:以集群實際 etcd 證書位置創建;若 etcd 沒有配置證書,則創建空secret
kubectl -n kubesphere-monitoring-system create secret generic kube-etcd-client-certs
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 集群相關的證書。
2.3.4 下載代碼
git clone https://github.com/kubesphere/ks-installer.git -b master # 看起來我這邊是2.1.0dev版本
2.3.5 在Kubernetes 集群部署 KubeSphere。
版本不一部署方式也不一樣,我這里是通過配置文件確定部署模塊的,把Jenkins、gitlab、harbor、sonarqube、監控一堆都部署上
修改cat config.yaml 文件
# ls controller deploy Dockerfile docs env LICENSE playbooks README.md README_zh.md roles scripts src cd deploy # ls config.yaml kubesphere-installer.yaml
# cat config.yaml --- apiVersion: v1 data: ks-config.yaml: | --- kubernetes: apiserverAddr: 10.6.76.25:6443 # master addr or master's lb addr etcd: endpointIps: 10.6.76.25 port: 2379 tlsEnable: True persistence: storageClass: "kubesphere-data" common: enableHA: True mysqlVolumeSize: 20Gi minioVolumeSize: 20Gi etcdVolumeSize: 20Gi openldapVolumeSize: 2Gi redisVolumSize: 2Gi metrics-server: enabled: True console: enableMultiLogin: True # enable/disable multi login port: 30880 replicas: 1 monitoring: prometheusReplicas: 1 prometheusMemoryRequest: 400Mi prometheusVolumeSize: 20Gi grafana: enabled: True logging: enabled: True elasticsearchMasterReplica: 1 elasticsearchDataReplica: 1 elasticsearchVolumeSize: 20Gi logMaxAge: 7 elkPrefix: logstash containersLogMountedPath: "" kibana: enabled: True openpitrix: enabled: True devops: enabled: True jenkinsMemoryLim: 2Gi jenkinsMemoryReq: 1500Mi jenkinsVolumeSize: 8Gi jenkinsJavaOpts_Xms: 512m jenkinsJavaOpts_Xmx: 512m jenkinsJavaOpts_MaxRAM: 2g sonarqube: enabled: True servicemesh: enabled: True notification: enabled: True alerting: enabled: True harbor: enabled: True domain: harbor.devops.kubesphere.local gitlab: enabled: True domain: gitlab.devops.kubesphere.local kind: ConfigMap metadata: name: ks-installer namespace: kubesphere-system
#執行部署
kubectl apply -f kubesphere-installer.yaml
2.3.6 查看部署日志
#這個不同版本也不一樣,實在不行就直接 kubectl -n kubesphere-system logs -f 部署的pod
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
2.3.7 所需鏡像
注意查看失敗的pod信息,如果有鏡像不能正確拉取,可以通過ks-installer/scripts/download-docker-images.sh下載 或者根據提示失敗的node上拉取
#例如 docker login -u guest -p guest dockerhub.qingcloud.com docker pull dockerhub.qingcloud.com/gitlab_org/gitlab-unicorn-ce:v11.8.1
3 登錄使用kubesphere
3.1 登錄
查看控制台的服務端口,使用 IP:30880 訪問 KubeSphere UI 界面,默認的集群管理員賬號為 admin/P@88w0rd。



3.2 prometheus監控
ks整合了prometheus監控,多種維度監控
# kubectl -n kubesphere-monitoring-system get pod NAME READY STATUS RESTARTS AGE kube-state-metrics-6749b6ff4b-5dh62 4/4 Running 0 18h node-exporter-5ctrs 2/2 Running 0 18h node-exporter-gqd84 2/2 Running 0 18h node-exporter-q2vdl 2/2 Running 0 18h node-exporter-t7wfj 2/2 Running 0 18h prometheus-k8s-0 3/3 Running 27 18h prometheus-k8s-1 3/3 Running 1 18h prometheus-k8s-system-0 3/3 Running 1 18h prometheus-k8s-system-1 3/3 Running 1 18h prometheus-operator-799455496d-fwlcb 1/1 Running 0 18h


設置一個測試告警
配置起來非常方便



郵件發送



3.3 Jenkins
Jenkins 是一款由 Java 開發的開源的持續集成工具,KubeSphere 內置的 Jenkins 服務端可參考如下步驟登錄訪問。
1、Jenkins Dashboard 服務暴露的端口 (NodePort) 默認為 30180,若在雲平台部署 KubeSphere,則需要進行端口轉發和添加防火牆規則,確保外網流量能夠正常通過該端口。
2、然后訪問公網 IP 和端口號即 http://${EIP}:${NODEPORT},Jenkins 已對接了 KubeSphere 的 LDAP,因此可使用用戶名 admin 和 KubeSphere 集群管理員的密碼 (初始密碼為 P@88w0rd) 登錄 Jenkins Dashboard。
說明:若部署在私有環境,則可以在集群的任意節點通過 http://{$節點 IP}:30180 進行訪問。

3.4 sonarqube
https://kubesphere.io/docs/v2.0/zh-CN/installation/sonarqube-jenkins/
SonarQube 是一個開源的代碼分析軟件,用來持續分析和檢測代碼的質量,支持檢測 Java、C#、C、C++、JavaScript 等二十多種編程語言。通過 SonarQube 可以檢測出項目中潛在的 Bug、漏洞、代碼規范、重復代碼、缺乏單元測試等問題,SonarQube 提供了 UI 界面進行查看和管理。KubeSphere 安裝時默認內置了 SonarQube 服務,可參考如下步驟,訪問內置 SonarQube。
# kubectl get pods,svc -n kubesphere-devops-system | grep sonarqube pod/ks-sonarqube-postgresql-5cbb44cc9-64mgb 1/1 Running 0 18h pod/ks-sonarqube-sonarqube-9bf449458-7mzfw 1/1 Running 0 18h service/ks-sonarqube-postgresql ClusterIP 10.104.23.38 <none> 5432/TCP 18h service/ks-sonarqube-sonarqube NodePort 10.97.163.216 <none> 9000:30746/TCP 18h
在瀏覽器中訪問 SonarQube,初次登錄的默認賬號密碼為 admin / admin。

e7a66041f8920011049207b480cef50b54474c8a


mvn sonar:sonar \ -Dsonar.host.url=http://10.6.76.25:32746 \ -Dsonar.login=e7a66041f8920011049207b480cef50b54474c8a
3.5 gitlab
https://kubesphere.io/docs/v2.1/zh-CN/installation/gitlab-installation/
在瀏覽器中可以通過 {$域名}:{$NodePort} 即 http://gitlab.devops.kubesphere.local:30080 訪問 GitLab 登錄頁面。默認的 GitLab 用戶名和密碼為 admin / P@88w0rd。
這個一定要域名解析啊


3.6 harbor
https://kubesphere.io/docs/v2.1/zh-CN/installation/harbor-installation/
可以域名解析 http://harbor.devops.kubesphere.local:30280
輸入默認的管理員用戶名和密碼 admin / Harbor12345 登錄 Harbor。
其它用戶登錄的賬號密碼與 KubeSphere 的 LDAP 用戶賬戶體系一致。

3.7 elk日志中心



3.8 kubectl控制台
相當於命令行


4 卸載
卸載腳本 將從機器中刪除 KubeSphere,該操作不可逆,也不會備份任何數據,請謹慎操作。
ks-installer/scripts/kubesphere-delete.sh
helm list #查看未刪除的
刪除 devops命名空間 sts 有狀態服務
#刪除持久化存儲文件 cd /data/volumes/v1/ 選擇性刪除
