系列目录:
在上一篇博客中,我们的 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
镜像
老规矩,阿里云走起:
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
节点运行。
其他问题
其实遇到的问题还很多,虽然部署是成功了,但是有些问题我也还没弄明白原理,就先不写出来了。
四、参考文献
kubernetes1.8原生dashboard部署
Web UI (Dashboard) - kubernetes