k8s 仪表盘与性能指标
安装Heapster
需要注意的地方就是镜像,如果官方的不能下载,可以选择国内的,共三个:
docker pull kxdmmr/heapster-influxdb-amd64:v1.3.3
docker pull kxdmmr/heapster-grafana-amd64:v4.4.3
docker pull kxdmmr/heapster-amd64:v1.4.2
然后去官方下载三个yaml文件:
https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/influxdb
还有一个关于RBAC的:
https://github.com/kubernetes/heapster/tree/master/deploy/kube-config/rbac
修改文件内的镜像地址,然后通过kubectl create一次性创建它们。
[root@node10 dashboard]# kubectl -n kube-system get pods
NAME READY STATUS RESTARTS AGE
heapster-7f776d4686-8nfz2 1/1 Running 0 12d
monitoring-grafana-64768ccd78-4tgmd 1/1 Running 0 12d
monitoring-influxdb-84774b9644-z9m28 1/1 Running 0 12d
安装Dashboard
下载yaml
下载官方的yaml文件:
mkdir dashboard && cd dashboard
curl -O https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
修改镜像地址
如果你不能下载官方的镜像,可以选择国内镜像,将yaml文件内image: k8s.gcr
这一行改为image: kxdmmr/kubernetes-dashboard-amd64:v1.8.1
挂载证书到pod中
在默认的启动参数中指定了自动生成证书--auto-generate-certificates
,但实际并不能正常提供https服务,我们可以指定为自己的证书。
我们打算将证书以Secret的方法挂载到Pod中,所以先将证书和私钥编码成base64,至于证书和私钥的选择,你可以专门为dashboard生成一对,也可以用已经存在的,这里我用安装集群时的一对密钥作为示例:
less /etc/kubernetes/ssl/kubernetes.pem | base64 -w 0
less /etc/kubernetes/ssl/kubernetes-key.pem | base64 -w 0
然后将得到的两个base64码放入yaml文件中的Secret中,给它增加一个data字段,如下:
apiVersion: v1
kind: Secret
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard-certs
namespace: kube-system
type: Opaque
data:
certfile: EZ6VVcwZWx0NC94Z.........(省略)
keyfile: LRVktLNCS0tLE9Qo=.........(省略)
引用证书
这里需要修改dashboard的启动参数,也就是Deployment部分:
Deployment.spec.template.spec.containers.args
:
args:
# - --auto-generate-certificates
- --heapster-host=http://heapster.kube-system.svc.cluster.local.:80
- --tls-cert-file=certfile
- --tls-key-file=keyfile
说明:
- 先将
--auto-generate-certificates
这个选项去掉
- 指定heapster服务的访问方式,hostname和ip的方式都可以,如果不指定是默认自动获取的,但我在使用的时候发现日志里一直报错,说访问heapster时连接超时。
- 指定我们自己的证书和私钥,因为这个Secret默认已经被以Volume的方式挂载到了
/certs
这个位置,所以我们可以直接指定,注意不用加/certs
这个前缀。
暴露端口
将配置文件中的Service改为NodePort类型:
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
externalIPs:
- "10.100.100.101"
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
创建
kubectl create -f kubernetes-dashboard.yaml
现在你可以通过https://10.100.100.101/
来访问你的仪表盘了,如果显示了要求登录的界面直接点skip即可,并且可以看到每个namespace的资源使用情况。
需要注意的问题
如果遇到任何问题请先查看相应pod的运行日志,比如dashboard不能启动,应该先用kubectl describe
查看apiserver创建pod时发生了什么,然后是通过kubectl log
查看dashboard的启动日志,它可以看到dashboard所有工作日志。