为k8s配置可视化
K8s dashboard是k8s集群的web-based UI工具,用户可以通过dashboard管理运行在集群上的应用以及集群自身。
安装本身非常容易,只需要下面一条语句就可以
1 | kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml |
但是再次由于墙的原因,国内执行这条语句会出现ErrImagePull
的错误。如果你已经执行了,就需要删除这个pod。但是如果直接用kubectl delete pods <pod name> --namespace=<namespace>
的话,通过kubectl get pods --all-namespaces
查看会发现它马上就会重新建立。这是因为要直接删除kubectl delete deployment <deployment name>
。
所以在国内还得需要镜像
1 | docker pull registry.cn-qingdao.aliyuncs.com/wangxiaoke/kubernetes-dashboard-amd64:v1.10.0 |
下载完镜像后执行kubectl apply -f http://mirror.faasx.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
就部署完成了,可以通过命令:
1 | `kubectl get pods --namespace=kube-system` |
查看,然后可以通过kubectl get service --namespace=kube-system
查看dashboard的外网暴露端口。如果发现暴露的端口类型是ClusterIP
,可以运行kubectl edit service kubernetes-dashboard --namespace=kube-system
大概配置文件,找到type,将ClusterIP改成NodePort。同时也可以通过这个命令修改NodePort
以达到修改暴露端口的目的。
现在在本级上通过访问localhost:端口
就能访问图形界面了。但是想要在其他机器访问,需要SSL证书,通过https来访问。
生成私钥和证书签名:
1
2
3
4openssl genrsa -des3 -passout pass:x -out dashboard.pass.key 2048
openssl rsa -passin pass:x -in dashboard.pass.key -out dashboard.key
rm dashboard.pass.key
openssl req -new -key dashboard.key -out dashboard.csr生成SSL证书
1
openssl x509 -req -sha256 -days 365 -in dashboard.csr -signkey dashboard.key -out dashboard.crt
创建dashboard用户
执行
kubectl create -f dashboard-user-role.yaml
命令,其中dashboard-user-role.yaml
内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
name: admin
annotations:
rbac.authorization.kubernetes.io/autoupdate: "true"
roleRef:
kind: ClusterRole
name: cluster-admin
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: admin
namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin
namespace: kube-system
labels:
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile获取登陆dashboard的token
1
kubectl describe secret/$(kubectl get secret -nkube-system |grep admin|awk '{print $1}') -nkube-system
该语句返回的结果中会包含token
登陆
在其他机器浏览器访问
https://master的ip:暴露端口
,比如我的例子中就是https://10.0.0.23:30502
。登陆时选择token登陆,粘贴上面命令返回的token就可以成功登陆。
部署官方用例
官方给出了用于测试的用例,如果k8s部署正确的话,可以直接通过下面的两条命令部署:
1 | kubectl create namespace sock-shop |
kubectl edit service front-end --namespace=sock-shop
来编辑服务的配置,主要是端口。
部署完成后通过NodePort:端口
可以直接访问,是一个袜子购物网站,支持购物车等功能:
参考
- k8s dashboard官方:https://github.com/kubernetes/dashboard#kubernetes-dashboard
- K8s heapster官方:https://github.com/kubernetes-retired/heapster