0%

从零开始搭建k8s集群环境(六)——部署Dashboard UI

系列目录:

在上一篇博客中,我们的 k8s 集群基本就已经部署完成了。但是为了方便了解 k8s 的各项概念,我们再继续把 k8s 的 Dashboard UI图形化界面 插件搭建起来。

环境说明:

  • Master:VBox虚拟机/Centos_7.5-1804/192.168.56.100
  • Images:VBox虚拟机/Centos_7.5-1804/192.168.56.101
  • Node01:VBox虚拟机/Centos_7.5-1804/192.168.56.102

软件环境说明:

  • docker-ce-17.03.2
  • kubernetes-v1.9.0
  • harbor-v1.4.0

一、准备镜像和 yaml 文件

镜像

老规矩,阿里云走起:

1
2
3
docker pull registry.cn-shenzhen.aliyuncs.com/lx0758/kubernetes-dashboard-amd64:v1.8.3
docker tag registry.cn-shenzhen.aliyuncs.com/lx0758/kubernetes-dashboard-amd64:v1.8.3 k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
docker rmi registry.cn-shenzhen.aliyuncs.com/lx0758/kubernetes-dashboard-amd64:v1.8.3

yaml 文件

1
wget https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

修改 yaml 文件

实际操作发现,服务器的 yaml 有些地方并不太合理,所以还得手动修改一下。

更改镜像下载策略

yml 中默认强制走服务器下拉镜像,在国内网络环境明显是不合理的,需要改成 “如果本地没有再去拉取”。

修改镜像 pull 策略

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
template:
spec:
containers:
image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.8.3
# 修改镜像 pull 策略
imagePullPolicy: IfNotPresent

更改部署节点

通过节点名称改变

1
2
3
4
5
6
7
8
9
10
11
12
13
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
template:
spec:
# nodeName 和 containers 同级
# 强制指定调度节点为 localhost.master
nodeName: localhost.master

通过节点标签改变

查看所有节点所有 label

1
2
3
[root@localhost ~]# kubectl get nodes localhost.master --show-labels
NAME STATUS ROLES AGE VERSION LABELS
localhost.master Ready master 14h v1.9.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=localhost.master,node-role.kubernetes.io/master=

这里我们使用 k8s 自带的 lable 操作:

kubernetes.io/hostname=localhost.master

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
template:
spec:
# nodeSelector 和 containers 同级
nodeSelector:
# 指定调度节点label标记为:
# kubernetes.io/hostname=localhost.master 的节点
kubernetes.io/hostname: localhost.master

修改 apiserver Host

必须指向自己的 Master 的 apiserver:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
template:
spec:
containers:
- args:
- --auto-generate-certificates
# Uncomment the following line to manually specify Kubernetes API server Host
# If not specified, Dashboard will attempt to auto discover the API server and connect
# to it. Uncomment only if the default does not work.
# - --apiserver-host=http://my-address:port
# 这里对应 apiserver 的访问地址,如果是 https 还需要下面那一句
- --apiserver-host=https://192.168.56.100:6443
# 因为 apiserver 是证书认证,所以需要加上证书信息(这个文件是挂载的)
- --kubeconfig=/etc/kubernetes/master-kubeconfig.yaml

由于 apiserver 使用的是 https 协议证书授权,我们还需要向 pod 配置证书挂载:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
apiVersion: apps/v1beta2
kind: Deployment
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
template:
spec:
containers:
volumeMounts:
# 添加一个容器内挂载目标,和上一步 --kubeconfig 定义路径相同
- mountPath: /etc/kubernetes/master-kubeconfig.yaml
name: kubeconfig
volumes:
# 添加挂载文件所在主机的位置
- name: kubeconfig
hostPath:
path: /root/.kube/config

添加直接访问端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
# 添加端口类型
type: NodePort
ports:
- port: 443
# 添加直接访问端口
nodePort: 30000
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard

二、正式部署

应用 yaml 文件

1
kubectl create -f ./kubernetes-dashboard.yaml

开始使用

没有问题的话,就可以通过浏览器访问了(可能需要在浏览器添加例外):

https://192.168.56.100:30000/

Token登录

这里有一个简单的命令:

1
kubectl -n kube-system describe $(kubectl -n kube-system get secret -n kube-system -o name | grep namespace) | grep token

也可以自己手动查询:

1
2
3
4
5
6
# 输入下面命令查询kube-system命名空间下的所有secret
kubectl get secret -n kube-system

# 然后获取token。只要是type为service-account-token的secret的token都可以使用。
# 比如我们获取replicaset-controller-token-wsv4v的touken
kubectl -n kube-system describe replicaset-controller-token-wsv4v

Kubeconfig验证

只需要在 kubeadm 生成的 admin.conf 文件末尾加上刚刚获取的 token 就好了。

1
2
3
4
5
- name: kubernetes-admin
user:
client-certificate-data: xxxxxxxx
client-key-data: xxxxxx
token: "在这里加上token"

三、问题总结

Dashboard 自动在节点运行,导致不可用

具体表现症状是 Pod 运行出错,但镜像已经下拉成功。加改变运行节点的配置,强制在 Master 节点运行。

其他问题

其实遇到的问题还很多,虽然部署是成功了,但是有些问题我也还没弄明白原理,就先不写出来了。

四、参考文献

  1. kubernetes1.8原生dashboard部署
  2. Web UI (Dashboard) - kubernetes
  • 本文作者: 6x
  • 本文链接: https://6xyun.cn/article/58
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-ND 许可协议。转载请注明出处!