CICD搭建之 kubernetes-dashboard

Kubernetes Dashboard 是 Kubernetes 的官方 Web UI。使用 Kubernetes Dashboard,您可以:

向 Kubernetes 集群部署容器化应用
诊断容器化应用的问题
管理集群的资源
查看集群上所运行的应用程序
创建、修改Kubernetes 上的资源(例如 Deployment、Job、DaemonSet等)
展示集群上发生的错误

版本v2.0.4
项目地址
https://github.com/kubernetes/dashboard/tree/v2.0.4

一、安装

官方说明,通过以下命令进行安装,如果改文件不能直接访问,可以先通过其他途径下载到本地

kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

下载文件指令

wget https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.4/aio/deploy/recommended.yaml

文件中指定了dashboard的镜像版本,可以提前将镜像先下载好。
文件片段一

    spec:
      containers:
        - name: kubernetes-dashboard
          image: kubernetesui/dashboard:v2.0.4
          imagePullPolicy: Always

这里Always是每次启动都拉取镜像,可以改成本地没有再拉取远程镜像

文件片段二

    spec:
      containers:
        - name: dashboard-metrics-scraper
          image: kubernetesui/metrics-scraper:v1.0.4

执行上面的yml文件后,会启动镜
执行以下命令后会看到启动完毕,网上有的是把dashboard部署到kube-system的namespace的,建议大家在不熟悉的情况下根据官方的yaml直接安装,不要做修改,避免走弯路,本人是吃过亏的。

[root@localhost ~]# kubectl -n kubernetes-dashboard get po
NAME                                         READY   STATUS    RESTARTS   AGE
dashboard-metrics-scraper-7b59f7d4df-qczqq   1/1     Running   0          25s
kubernetes-dashboard-665f4c5ff-5s4rr         1/1     Running   0          25s

二、创建访问用户

1 创建文件dashboard-auth.yaml

vi dashboard-auth.yaml
内容如下

apiVersion: v1
kind: ServiceAccount
metadata:
  name: admin-user
  namespace: kubernetes-dashboard

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
[root@localhost ~]# kubectl create -f /home/wxd/dashboard-auth.yaml
serviceaccount/admin-user created
clusterrolebinding.rbac.authorization.k8s.io/admin-user created

2 获取token

[root@localhost ~]# kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
Name:         admin-user-token-85mdb
Namespace:    kubernetes-dashboard
Labels:       
Annotations:  kubernetes.io/service-account.name: admin-user
              kubernetes.io/service-account.uid: 7c8d9d9f-92a4-47c8-8dc9-601abb6e0d08

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1066 bytes
namespace:  20 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6ImtLdjhBaXdDWWwwcjNyUG1VaFpfR3ZmdDM1RWc0UEdCMDV2dWRDOURHR1UifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTg1bWRiIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiI3YzhkOWQ5Zi05MmE0LTQ3YzgtOGRjOS02MDFhYmI2ZTBkMDgiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZXJuZXRlcy1kYXNoYm9hcmQ6YWRtaW4tdXNlciJ9.O73aWRwFa_xTs-_17G_3NADMI4_tnSl0CuHyRLlfPsJQ7av3XyGOlLCtR_Bdz3V4WuFC_NZ02p22HgfULDBd5ZOOJ0zpZLjlbJZr3GjCja2WrkuUN9S0-ofL38ObIwBAZ2Y_3IG3tIK2EHu_tcp_1Kzq3AYOlqGqpbIde9Cd_k3Mht0zIu9yMr1cabdjM1VOz-UhRjUzIRODVC8NCKuW_ZNhYcpCKC4Avc9q78qqdmV3qtX7locrjcDRl1d74rGXkdkPX6autavJ3l2SeraPysIuaFO4ZN_7qkop2Kx6GakrLbDbqCKfKHTP-JZP_nKCFAjFJAcBo5hQnK49YGK4Jg

下文中浏览器显示的登录页面,将获取到的token复制粘贴,然后点击登录即可。

三、访问

1 本地访问

如果直接本机访问,按照官方手册执行

kubectl proxy

浏览器访问如下地址
http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
上面的命令只能本地访问,通过其他机器是不能访问的,端口都不通的,即使使用如下命令允许其他机器访问8001端口

[root@localhost ~]# kubectl proxy --address='0.0.0.0'  --accept-hosts='^*$'
Starting to serve on [::]:8001

只能显示登陆页面,但无法登录。登录按钮始终是灰色。如下图


image.png

这是因为Dashboard只允许localhost和127.0.0.1使用HTTP连接进行访问,而其它地址只允许使用HTTPS

2 非本机访问

2.1 映射宿主机端口

通过NodePort映射到宿主机端口,修改刚才下载的recommended.yaml文件,找到如下内容

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

修改为(增加NodePort的配置,注意k8映射到宿主机的端口范围是30000-32767,是为了避免与宿主机的其他服务端口冲突)

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
spec:
  type: NodePort
  ports:
    - port: 443
      nodePort: 30001
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

指定宿主机端口30001,这样方便管理一些

登录页

将前面通过命令获取到的token复制粘贴到这里,点击登录即可。


登录后

2.2 偷懒模式

如果只是为了便捷可以通过k8后台命令直接修改,命令如下
执行kubectl edit命令进行编辑

kubectl -n kubernetes-dashboard edit service kubernetes-dashboard

会在控制台显示一个临时的yml文件,默认是vi打开的,可以直接编辑,保存后会立即生效。

临时的yml文件片段

spec:
  clusterIP: 10.103.5.139
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

将上面的type: ClusterIP修改为type: NodePort。
用如下命令可以看到自动映射的宿主机端口

kubectl -n kube-system get service kubernetes-dashboard
kubernetes-dashboard        NodePort    10.99.112.184           443:31119/TCP            57m

然后浏览器直接访问宿主机ip+查询到的端口(31119)即可看到登录页

四、部署一个应用

使用dashboard部署一个nginx集群试试,这里采用yml方式部署,如图,点击右上角+,贴上yml脚本


部署nginx
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx
  labels:
    k8s-app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      k8s-app: nginx
  template:
    metadata:
      name: nginx
      labels:
        k8s-app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx

---
kind: Service
apiVersion: v1
metadata:
  name: nginx
  labels:
    k8s-app: nginx
spec:
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      nodePort: 30002
  selector:
    k8s-app: nginx

提交后,跳转到视图页面


image.png

可以看到,部署成功,也可以通过表单创建,只是表单创建nodeport会是随机的,现在可以访问一下30002端口

image.png

看到欢迎页,成功!
其他功能


pod的操作

service的操作

好了,现在验证完成,大家按照好体验一番吧!

参考资料

更多访问配置方式访问如下地址
https://www.cnblogs.com/RainingNight/p/deploying-k8s-dashboard-ui.html

你可能感兴趣的:(CICD搭建之 kubernetes-dashboard)