最近在接触容器相关的东西,于是自己基于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集群搭建成功,集群是否搭建成功可通过以下两个步骤来进行验证。
kubectl get nodes
kubectl get pods -n kube-system
通过执行以上步骤,如果集群的相关信息如图片所示则集群搭建成功。
接下来,我们来进行Dashboard的安装部署。
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
该命令中我所下载的是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之间改为一个空格)。
执行命令中的kubectl apply -f 会加载配置文件中的相关资源,但是如果没有科学上网的话这一步应该会报错,因为dashboard中包含相关的镜像资源,而这个镜像源不设置的话默认从国外网站下载,所以会报错。
kubectl apply -f kubernetes-dashboard.yaml
报错的表现是,与dashboard相关的pod的运行状态并不是下图中所示的Running状态,而是其他的不成功状态。
我们可以通过kubectl describe pod kubernetes-dashboard-7df98d85bd-dcp4s -n kube-system
查看dashboard所要求的镜像资源,查看的信息如下图:
可以看到红色框中的镜像要求(这是我修改镜像源后的镜像信息,如果大家没有修改过的话显示信息应该为):k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1,所以我们要更换镜像源把该镜像拉取下来。
即是对kubernetes-dashboard.yaml文件进行修改,大家需要执行指令vim kubernetes-dashboard.yaml
或者vi kubernetes-dashboard.yaml
,所要修改的信息是镜像源处,修改完成后,使用:wq!保存退出编辑。
大家把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
查看所有镜像的信息应为:
我们再来看一下集群中的pod信息,可以看到集群中与dashboard相关的pod已经处于running状态,正常运行。
我们仍要对kubernetes-dashboard.yaml文件进行修改,因为此时的dashboard只能在集群内部访问,我们需要使用Dashboard service的Nodeport方式作映射,这样其他的主机即集群外的主机也能够访问dashboard的管理界面。
大家需要执行指令vim kubernetes-dashboard.yaml
或者vi kubernetes-dashboard.yaml
,所要添加的信息的地方有两处,如图中的标注,修改完成后,使用**:wq!**保存退出编辑。所要添加的信息是
type: NodePort
和nodePort: 30001
,注意添加信息的位置与图中位置一致。
接下来我们就可以在浏览器中访问了。
大家可以使用mster主节点的ip地址+端口 访问dashboard的web UI界面,比如我的主机号是50.50.50.50,那么在浏览器(此处我使用的是chrome浏览器)中输入50.50.50.50:30001
(大家注意此处替换为自己master节点的ip地址)。
我第一次输入后的界面是这样的:
而我看了一下我集群中master节点的防火墙信息,防火墙是关闭的。
后来通过查阅相关资料我发现了解决方案,我把之前浏览器地址栏中的50.50.50.50:30001
信息拷贝下来之后,我发现这是http://50.50.50.50:30001
,只需将其改作https://50.50.50.50:30001
即可进行访问。但是仍可能会遇到错误,您的连接不是私密连接的错误,并且伴随着的信息是"您的连接不是私密连接攻击者可能会试图从XXX窃取您的信息(例如:密码、通讯内容或信用卡信息)",此处我才用的解决方案是:使这个google浏览器访问界面处于你自己电脑的最上面,鼠标点击界面空白处获取焦点,然后输入thisisunsafe这12个字符,问题解决。
这个时候会弹出这个页面,
我们选择令牌
,但是令牌信息是什么呢?我们可以把这个理解为登录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的完整流程了,希望对大家有所帮助,如果大家还有什么疑问的话,欢迎大家在评论区交流!