前情提要
可視化操作面板對于開發、運維絕對是提升工作效率的一大利器,因此很有必要搭建一套可視化操作來管理Kubernetes。
可視化面板有多種:
1.Kubernetes官方提供的默認面板:dashboard,用處不大,放棄;
2.Kuboard 也很不錯, 集群要求不高,可通過訪問https://kuboard.cn/support/作進一步了解;3.Kubesphere 集成了很多套件, 集群要求較高,可通過訪問https://kubesphere.io/作進一步了解。
本文主要圍繞KubeSphere進行講解。
?簡介
KubeSphere 是一款面向云原生設計的開源項目, 在目前主流容器調度平臺 Kubernetes 之上構建的分布式多租戶容器管理平臺, 提供簡單易用的操作界面以及向導式操作方式, 在降低用戶使用容器調度平臺學習成本的同時, 極大降低開發、 測試、 運維的日常工作的復雜度。
安裝前置環境
主要是安裝helm,tiller和openebs,這個在上一篇中已完成。
然后是最小化安裝 kubesphere,本文要介紹的。
須確保集群可用的資源符合 CPU > 1 Core, 可用內存 > 2 G
下面具體的搭建的過程
搭建過程
1.創建一個kubesphere-mini.yaml文件
并寫入下面的內容 :
---
apiVersion: v1
kind: Namespace
metadata:name: kubesphere-system---
apiVersion: v1
data:ks-config.yaml: |---persistence:storageClass: ""etcd:monitoring: FalseendpointIps: 192.168.0.7,192.168.0.8,192.168.0.9port: 2379tlsEnable: Truecommon:mysqlVolumeSize: 20GiminioVolumeSize: 20GietcdVolumeSize: 20GiopenldapVolumeSize: 2GiredisVolumSize: 2Gimetrics_server:enabled: Falseconsole:enableMultiLogin: False # enable/disable multi loginport: 30880monitoring:prometheusReplicas: 1prometheusMemoryRequest: 400MiprometheusVolumeSize: 20Gigrafana:enabled: Falselogging:enabled: FalseelasticsearchMasterReplicas: 1elasticsearchDataReplicas: 1logsidecarReplicas: 2elasticsearchMasterVolumeSize: 4GielasticsearchDataVolumeSize: 20GilogMaxAge: 7elkPrefix: logstashcontainersLogMountedPath: ""kibana:enabled: Falseopenpitrix:enabled: Falsedevops:enabled: FalsejenkinsMemoryLim: 2GijenkinsMemoryReq: 1500MijenkinsVolumeSize: 8GijenkinsJavaOpts_Xms: 512mjenkinsJavaOpts_Xmx: 512mjenkinsJavaOpts_MaxRAM: 2gsonarqube:enabled: FalsepostgresqlVolumeSize: 8Giservicemesh:enabled: Falsenotification:enabled: Falsealerting:enabled: False
kind: ConfigMap
metadata:name: ks-installernamespace: kubesphere-system---
apiVersion: v1
kind: ServiceAccount
metadata:name: ks-installernamespace: kubesphere-system---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:creationTimestamp: nullname: ks-installer
rules:
- apiGroups:- ""resources:- '*'verbs:- '*'
- apiGroups:- appsresources:- '*'verbs:- '*'
- apiGroups:- extensionsresources:- '*'verbs:- '*'
- apiGroups:- batchresources:- '*'verbs:- '*'
- apiGroups:- rbac.authorization.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- apiregistration.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- apiextensions.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- tenant.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- certificates.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- devops.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- monitoring.coreos.comresources:- '*'verbs:- '*'
- apiGroups:- logging.kubesphere.ioresources:- '*'verbs:- '*'
- apiGroups:- jaegertracing.ioresources:- '*'verbs:- '*'
- apiGroups:- storage.k8s.ioresources:- '*'verbs:- '*'
- apiGroups:- admissionregistration.k8s.ioresources:- '*'verbs:- '*'---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: ks-installer
subjects:
- kind: ServiceAccountname: ks-installernamespace: kubesphere-system
roleRef:kind: ClusterRolename: ks-installerapiGroup: rbac.authorization.k8s.io---
apiVersion: apps/v1
kind: Deployment
metadata:name: ks-installernamespace: kubesphere-systemlabels:app: ks-install
spec:replicas: 1selector:matchLabels:app: ks-installtemplate:metadata:labels:app: ks-installspec:serviceAccountName: ks-installercontainers:- name: installerimage: kubesphere/ks-installer:v2.1.1imagePullPolicy: "Always"
2.執行apply命令
#KubeSphere 最小化安裝:
kubectl apply -f kubesphere-mini.yaml
?3.檢查kubesphere pod啟動運行情況
執行下面的命令,觀察kubesphere相關pods啟動情況,確保所有的都處于Running狀態
kubectl get pods --all-namespaces
如果哪個pod失敗,使用下面的命令找出失敗的原因
# pod替換為失敗的pod名,n后面的參數換成對應的命名空間
kubectl describe pod default-http-backend-5d464dd566-wtr98 -n kubesphere-controls-system
?如果失敗的原因是ImagePullBackOff,可以使用這個命令,找到需要的鏡像
# pod和n 后面的參數替換為失敗的pod名和對應的命名空間
kubectl describe pod node-exporter-kjs4p -n kubesphere-monitoring-system | grep -A5 "Containers"
?像上圖中出現一個pod:default-http-backend鏡像拉取失敗,最后試了這個才拉取到本地
registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4
拉取到以后需要打標簽,偽裝成mirrorgooglecontainers/defaultbackend-amd64:1.4
拉取和打標簽通過下面的命令來實現:
# 拉鏡像
docker pull registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4
# 打標簽
docker tag registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4 mirrorgooglecontainers/defaultbackend-amd64:1.4
然后刪除失敗的pod進行重建,注意替換pod后面的參數自己的Pod名,n后面的參數為自己的命名空間
kubectl delete pod ?default-http-backend-5d464dd566-z2bt2 -n kubesphere-controls-system
?刪除后重建如果還是失敗上面提到的命令再次查看原因,注意查看輸出的原因分析的Event部分
Events:
? Type ? ? Reason ? ? Age ? ? ? ? ? ? ? ? ?From ? ? ? ? ? ? ? ?Message
? ---- ? ? ------ ? ? ---- ? ? ? ? ? ? ? ? ---- ? ? ? ? ? ? ? ?-------
? Normal ? Scheduled ?<unknown> ? ? ? ? ? ?default-scheduler ? Successfully assigned kubesphere-controls-system/default-http-backend-5d464dd566-9dqlz to k8s-node2
? Warning ?Failed ? ? 74s (x2 over 3m38s) ?kubelet, k8s-node2 ?Failed to pull image "mirrorgooglecontainers/defaultbackend-amd64:1.4": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
? Warning ?Failed ? ? 74s (x2 over 3m38s) ?kubelet, k8s-node2 ?Error: ErrImagePull
? Normal ? BackOff ? ?59s (x2 over 3m37s) ?kubelet, k8s-node2 ?Back-off pulling image "mirrorgooglecontainers/defaultbackend-amd64:1.4"
? Warning ?Failed ? ? 59s (x2 over 3m37s) ?kubelet, k8s-node2 ?Error: ImagePullBackOff
? Normal ? Pulling ? ?47s (x3 over 6m4s) ? kubelet, k8s-node2 ?Pulling image "mirrorgooglecontainers/defaultbackend-amd64:1.4"
?
從上面輸出可以看出
Pod 被調度到了 node2,但 node2 去拉鏡像時失敗了(因為網絡問題,連不上 Docker Hub)。
問題本質
只在 k8s-node1 上
docker pull
和docker tag
了鏡像,
但是 k8s-node2 也要這個鏡像,它自己本地沒有,所以還會去拉。
Kubernetes 不會自動把 node1 的鏡像復制給 node2
因此需要在k8s-node2上執行下面的命令
# 拉鏡像
docker pull registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4
# 打標簽
docker tag registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64:1.4 mirrorgooglecontainers/defaultbackend-amd64:1.4
?驗證本地是否有相關鏡像
docker images | grep defaultbackend
?輸出下圖的提示才正常
[root@k8s-node2 ~]# docker images | grep defaultbackend
mirrorgooglecontainers/defaultbackend-amd64 ? ? ? ? ? ? ? ? ? ? ? ? ?1.4 ? ? ? ? ? ? ? ? 846921f0fe0e ? ? ? ?7 years ago ? ? ? ? 4.84MB
registry.cn-beijing.aliyuncs.com/kubesphereio/defaultbackend-amd64 ? 1.4 ? ? ? ? ? ? ? ? 846921f0fe0e ? ? ? ?7 years ago ? ? ? ? 4.84MB
?如果本地有鏡像但還是ImagePullBackOff,需要使用下面的命令指定imagePullPolicy: IfNotPresent
kubectl -n kubesphere-controls-system patch deployment default-http-backend -p '{"spec":{"template":{"spec":{"containers":[{"name":"default-http-backend","imagePullPolicy":"IfNotPresent"}]}}}}'
經過上面的處理,再次查看kubesphere所有pod的狀態,全部變為Running狀態了
還可以使用下面的命令查看安裝日志,整個過程所需時間跟網絡緊密相關,?請耐心等待安裝成功:
kubectl logs -n kubesphere-system $(kubectl get pod -n kubesphere-system -l app=ks-install -o jsonpath='{.items[0].metadata.name}') -f
?當所有kubesphere pod都處于Running狀態時,就可以使用瀏覽器訪問kubesphere了,kubeSphere v2.x默認的賬號為admin,密碼為P@88w0rd,因此使用這個它們即可登錄