所有文章

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

说明:

  1. 先将--auto-generate-certificates这个选项去掉
  2. 指定heapster服务的访问方式,hostname和ip的方式都可以,如果不指定是默认自动获取的,但我在使用的时候发现日志里一直报错,说访问heapster时连接超时。
  3. 指定我们自己的证书和私钥,因为这个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所有工作日志。


编写日期:2018-01-17