美文网首页
CICD搭建之 kubernetes-dashboard

CICD搭建之 kubernetes-dashboard

作者: 行走的记忆 | 来源:发表于2020-10-08 18:09 被阅读0次

    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:       <none>
    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   <none>        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

          本文链接:https://www.haomeiwen.com/subject/mmzcpktx.html