k8s(Kubernetes)集群部署Dashboard

最近在接触容器相关的东西,于是自己基于2台服务器部署了Kubernetes(即k8s)集群,有关k8s集群的完整部署流程在我的另一篇博客中有介绍,有需要的朋友可以浏览这篇博客https://blog.csdn.net/curry10086/article/details/107577917k8s集群安装部署(高成功率)。


在k8s部署完成后,我打算使用dashboard来管理k8s集群。dashboard就是k8s集群的web UI界面,通过可视化的方式方便用户管理集群、管理容器,还可在集群中部署容器化的应用。
先介绍以下自己的安装环境:

CentOS 7.6
Docker 18.6
Kubernetes 1.14

在部署Dashboard之前,需要确保自己的k8s集群搭建成功,集群是否搭建成功可通过以下两个步骤来进行验证。

  • 步骤一:在k8s集群的master节点上查看节点的状态,若集群搭建成功则所有节点状态为Ready。
kubectl get nodes

在这里插入图片描述

  • 步骤二:在k8s集群的master节点上查看pod的状态,集群搭建成功时所有pod的状态均为Running。
kubectl get pods -n kube-system

k8s(Kubernetes)集群部署Dashboard_第1张图片
通过执行以上步骤,如果集群的相关信息如图片所示则集群搭建成功。


接下来,我们来进行Dashboard的安装部署。

master节点执行以下操作

1、首先对集群资源进行声明式管理

https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml是配置文件,如果该配置文件在K8s集群中不存在,则此命令创建该资源。

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml
2、下载上一条命令中的配置文件资源

该命令中我所下载的是dashboard v1.10.1配置文件。

wget https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kubernetes-dashboard.yaml

注意:在执行该命令的时候可能报错: -bash: wget : command not found
解决方案:
首先,有可能是wget组件服务确实未安装,此时执行安装命令即可

yum install wget -y

其次,若之前wget已经安装过了,但还是报这个错误(这也是我自己遇到的问题),有可能第二条的命令在执行的时候命令输入错误——即在wget与https之间输入了两个空格。这不符合wget的使用规范,只需改为一个空格即可(即第二条命令中的wget与https之间改为一个空格)。

3、运行Dashboard的配置文件

执行命令中的kubectl apply -f 会加载配置文件中的相关资源,但是如果没有科学上网的话这一步应该会报错,因为dashboard中包含相关的镜像资源,而这个镜像源不设置的话默认从国外网站下载,所以会报错。

kubectl apply -f kubernetes-dashboard.yaml

报错的表现是,与dashboard相关的pod的运行状态并不是下图中所示的Running状态,而是其他的不成功状态。
k8s(Kubernetes)集群部署Dashboard_第2张图片
我们可以通过kubectl describe pod kubernetes-dashboard-7df98d85bd-dcp4s -n kube-system查看dashboard所要求的镜像资源,查看的信息如下图:
k8s(Kubernetes)集群部署Dashboard_第3张图片
可以看到红色框中的镜像要求(这是我修改镜像源后的镜像信息,如果大家没有修改过的话显示信息应该为):k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1,所以我们要更换镜像源把该镜像拉取下来。

4、修改dashboard的镜像源

即是对kubernetes-dashboard.yaml文件进行修改,大家需要执行指令vim kubernetes-dashboard.yaml或者vi kubernetes-dashboard.yaml,所要修改的信息是镜像源处,修改完成后,使用:wq!保存退出编辑。
k8s(Kubernetes)集群部署Dashboard_第4张图片
大家把image:后的内容修改为lizhenliang/kubernetes-dashboard-amd64:v1.10.1即可,这个镜像源可以保证我们把镜像拉取下来。

然后,我们就可以执行镜像的pull操作了(这是唯一一个从节点也要执行的操作,即此“拉取镜像”的操作,所有节点都要执行,所有节点都要执行,所有节点都要执行),

docker pull lizhenliang/kubernetes-dashboard-amd64:v1.10.1

使用docker images查看本地docker仓库中的镜像,镜像仓库中应该存在lizhenliang/kubernetes-dashboard-amd64这一镜像(即REPOSITORY信息),其TAG信息为v1.10.1。
我们对该镜像重新打个TAG然后将旧镜像删除,

docker tag lizhenliang/kubernetes-dashboard-amd64:v1.10.1 k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
docker rmi lizhenliang/kubernetes-dashboard-amd64:v1.10.1

这样该镜像就符合dashboard的要求了,此时使用docker images查看所有镜像的信息应为:
k8s(Kubernetes)集群部署Dashboard_第5张图片
我们再来看一下集群中的pod信息,可以看到集群中与dashboard相关的pod已经处于running状态,正常运行。
k8s(Kubernetes)集群部署Dashboard_第6张图片

5、配置dashboard的30001端口

我们仍要对kubernetes-dashboard.yaml文件进行修改,因为此时的dashboard只能在集群内部访问,我们需要使用Dashboard service的Nodeport方式作映射,这样其他的主机即集群外的主机也能够访问dashboard的管理界面。
大家需要执行指令vim kubernetes-dashboard.yaml或者vi kubernetes-dashboard.yaml,所要添加的信息的地方有两处,如图中的标注,修改完成后,使用**:wq!**保存退出编辑。所要添加的信息是
type: NodePortnodePort: 30001,注意添加信息的位置与图中位置一致。
k8s(Kubernetes)集群部署Dashboard_第7张图片
接下来我们就可以在浏览器中访问了。

6、浏览器中打开dashboard界面

大家可以使用mster主节点的ip地址+端口 访问dashboard的web UI界面,比如我的主机号是50.50.50.50,那么在浏览器(此处我使用的是chrome浏览器)中输入50.50.50.50:30001(大家注意此处替换为自己master节点的ip地址)。
我第一次输入后的界面是这样的:
k8s(Kubernetes)集群部署Dashboard_第8张图片
而我看了一下我集群中master节点的防火墙信息,防火墙是关闭的。
k8s(Kubernetes)集群部署Dashboard_第9张图片
后来通过查阅相关资料我发现了解决方案,我把之前浏览器地址栏中的50.50.50.50:30001信息拷贝下来之后,我发现这是http://50.50.50.50:30001,只需将其改作https://50.50.50.50:30001即可进行访问。但是仍可能会遇到错误,您的连接不是私密连接的错误,并且伴随着的信息是"您的连接不是私密连接攻击者可能会试图从XXX窃取您的信息(例如:密码、通讯内容或信用卡信息)",此处我才用的解决方案是:使这个google浏览器访问界面处于你自己电脑的最上面,鼠标点击界面空白处获取焦点,然后输入thisisunsafe这12个字符,问题解决。
这个时候会弹出这个页面,
k8s(Kubernetes)集群部署Dashboard_第10张图片
我们选择令牌,但是令牌信息是什么呢?我们可以把这个理解为登录dashboard的密码(其实这个说法不严谨,token只是我们用于登录dashboard的服务账号对应的密码的一部分,大家先不用纠结这个地方,不了解也没关系),所以我们需要去创建一个服务账号。由于我们是通过mster节点的ip地址+30001端口进行访问的,所以我们要在master节点上创建服务账号以此取得令牌。创建步骤如下:

kubectl create serviceaccount dashboard-admin -n kube-system
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin
kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}')

这样操作之后会生成token信息,这个token信息就是我们之前所寻找的令牌
我这里想解释一下三条指令的意义:
首先,第一条指令,kubectl create serviceaccount dashboard-admin -n kube-system。因为serviceaccount是k8s的一种授权方式,这个账号的相关信息在dashboard中使用时,dashboard会把该serviceaccount拿过来让k8s进行验证,这应该是一种安全授权与验证的策略。
其次,第二条指令,kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kube-system:dashboard-admin,这个是通过clusterrolebinding把我们刚刚创建的serviceaccount即dashboard-admin绑定到cluster-admin这个角色,这是集群管理员的角色,这样该serviceaccount就可以访问集群下全部的namespace了。
最后,第三条指令kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret | awk '/dashboard-admin/{print $1}'),即是查看此ServiceAccount的secret,其中就包含了token信息,而token信息就是登录dashboard所需要的令牌
把我们获取的token信息输入到浏览器中的令牌中,终于,我们打开了dashboard的管理界面。
k8s(Kubernetes)集群部署Dashboard_第11张图片


以上就是k8s(Kubernetes)安装部署Dashboard的完整流程了,希望对大家有所帮助,如果大家还有什么疑问的话,欢迎大家在评论区交流!

你可能感兴趣的:(容器,容器,docker,服务器)