首页 > 技术文章 > K8s ConfigMap与Dashboard

zjq-blogs 2020-12-01 14:14 原文

(一)Kubernetes ConfigMap

1、概述

ConfigMap 是用来存储配置文件的 Kubernetes 资源对象,所有的配置内容都存储在 etcd 中。它可以被用来保存单个属性,也可以用来保存整个配置文件或者 JSON 二进制对象。ConfigMap API 资源提供了将配置数据注入容器的方式,同时保证该机制对容器来说是透明的。配置应该从 Image 内容中解耦,以此来保持容器化应用程序的可移植性。

2、使用 ConfigMap 配置 MySQL

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-myshop-config
    data:
      # 这里是键值对数据
      mysqld.cnf: |
        [client]
        port=3306
        [mysql]
        no-auto-rehash
        [mysqld]
        skip-host-cache
        skip-name-resolve
        default-authentication-plugin=mysql_native_password
        character-set-server=utf8mb4
        collation-server=utf8mb4_general_ci
        explicit_defaults_for_timestamp=true
        lower_case_table_names=1
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: mysql-myshop
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            name: mysql-myshop
        spec:
          containers:
            - name: mysql-myshop
              image: mysql
              imagePullPolicy: IfNotPresent
              ports:
                - containerPort: 3306
              env:
                - name: MYSQL_ROOT_PASSWORD
                  value: "123456"
              volumeMounts:
                # 以数据卷的形式挂载 MySQL 配置文件目录
                - name: cm-vol-myshop
                  mountPath: /etc/mysql/conf.d
                - name: nfs-vol-myshop
                  mountPath: /var/lib/mysql
          volumes:
            # 将 ConfigMap 中的内容以文件形式挂载进数据卷
            - name: cm-vol-myshop
              configMap:
                name: mysql-myshop-config
                items:
                    # ConfigMap 中的 Key
                  - key: mysqld.cnf
                    # ConfigMap Key 匹配的 Value 写入名为 mysqld.cnf 的文件中
                    path: mysqld.cnf
            - name: nfs-vol-myshop
              persistentVolumeClaim:
                claimName: nfs-pvc-mysql-myshop
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-myshop
    spec:
      ports:
        - port: 3306
          targetPort: 3306
          nodePort: 32036
      type: LoadBalancer
      selector:
        name: mysql-myshop
 
    # 查看 ConfigMap
    kubectl get cm
    kubectl describe cm <ConfigMap Name>

(二)Kubernetes Dashboard

1、概述

Kubernetes Dashboard 是 Kubernetes 集群的 Web UI,用于管理集群。

2、安装

GitHub 地址:Kubernetes Dashboard(opens new window)

下载配置文件

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

修改配置如下

    # 省略部分代码...
    
    # ------------------- Dashboard Deployment ------------------- #
    
    kind: Deployment
    apiVersion: apps/v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kube-system
    spec:
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          k8s-app: kubernetes-dashboard
      template:
        metadata:
          labels:
            k8s-app: kubernetes-dashboard
        spec:
          containers:
          - name: kubernetes-dashboard
            # 修改镜像地址为阿里云
            image: registry.aliyuncs.com/google_containers/kubernetes-dashboard-amd64:v1.10.1
            ports:
            - containerPort: 8443
              protocol: TCP
            args:
              - --auto-generate-certificates
            volumeMounts:
            - name: kubernetes-dashboard-certs
              mountPath: /certs
            - mountPath: /tmp
              name: tmp-volume
            livenessProbe:
              httpGet:
                scheme: HTTPS
                path: /
                port: 8443
              initialDelaySeconds: 30
              timeoutSeconds: 30
          volumes:
          - name: kubernetes-dashboard-certs
            secret:
              secretName: kubernetes-dashboard-certs
          - name: tmp-volume
            emptyDir: {}
          serviceAccountName: kubernetes-dashboard
          tolerations:
          - key: node-role.kubernetes.io/master
            effect: NoSchedule
    
    ---
    # ------------------- Dashboard Service ------------------- #
    
    kind: Service
    apiVersion: v1
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
      name: kubernetes-dashboard
      namespace: kube-system
    spec:
      # 修改类型为 NodePort 访问
      type: NodePort
      ports:
        - port: 443
          targetPort: 8443
          # 设置端口号为 30001
          nodePort: 30001
      selector:
        k8s-app: kubernetes-dashboard
 

部署到集群

    # 部署
    kubectl create -f kubernetes-dashboard.yaml
    
    # 查看
    kubectl -n kube-system get pods
    kubectl -n kube-system get service kubernetes-dashboard
    kubectl -n kube-system describe service kubernetes-dashboard
 

3、访问

需要使用 NodeIP:30001 访问 Dashboard,因为证书原因除火狐浏览器外其它浏览器无法直接打开页面

Chrome 浏览器显示如下

Firefox 浏览器显示如下

点击 接受风险并继续 即可显示欢迎界面

4、登录

我们采用 Token 方式登录

  • 创建登录账号,创建一个名为 dashboard-adminuser.yaml 的配置文件
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: admin-user
      namespace: kube-system
    ---
    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: kube-system
 
    kubectl create -f dashboard-adminuser.yaml
 
  • 打印 Token 信息
    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
    
    # 输出如下
    Name:         admin-user-token-86cz9
    Namespace:    kube-system
    Labels:       <none>
    Annotations:  kubernetes.io/service-account.name: admin-user
                  kubernetes.io/service-account.uid: 3902d3d4-8b13-11e9-8089-000c29d49c77
    
    Type:  kubernetes.io/service-account-token
    
    Data
    ====
    ca.crt:     1025 bytes
    namespace:  11 bytes
    token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi11c2VyLXRva2VuLTg2Y3o5Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImFkbWluLXVzZXIiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIzOTAyZDNkNC04YjEzLTExZTktODA4OS0wMDBjMjlkNDljNzciLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06YWRtaW4tdXNlciJ9.pA44wyarsahOwqH7X7RVlcdB1k3_j-L3gwOYlTQ4_Lu5ZmfXDFlhqN-Q1tdryJes_V1Nj_utocnXBAxsGzOGaVR4Te4oli3htSepI9MrggQAyeC3C0_QANXGCE6V5L6B5tGZ6tDsY92VDnlvz2N6OrHaH2IJJd2DlxzYvAPvfAFuPeHWuPeVxUisMfXeW42S7US6skZwbZ06JrPYAFxHjqv3zoxRxI8-bmekltvOamsrL0pAXvIUzaowgbjiQb2NgeLAw9O6qfYcz5DAi2C-7G_yAcve6pgnWcIGhVpKoim9DfJUhe1SVx4H4X5Na6GVaaD6FdUIb7UOgsO1FVpTPw
 
  • 将 Token 输入浏览器,成功登陆后效果如下

 

推荐阅读