Kubernetes ConfigMap

概述

ConfigMap 是用來存儲配置文件的 Kubernetes 資源對象,所有的配置內容都存儲在 etcd 中。它可以被用來保存單個屬性,也可以用來保存整個配置文件或者 JSON 二進制對象。ConfigMap API 資源提供了將配置數據注入容器的方式,同時保證該機制對容器來說是透明的。配置應該從 Image 內容中解耦,以此來保持容器化應用程序的可移植性。

使用 ConfigMap 配置 MySQL

刪除原有mysql服務。有時候會部署失敗,刪除下共享卷裏面的數據/usr/local/kubernetes/volumes。注意正式環境不要隨意刪除。

修改mysql.yaml

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: apps/v1
kind: Deployment
metadata:
  name: mysql-myshop
spec:
  selector:
    matchLabels:
      app: mysql-myshop
  replicas: 1
  template:
    metadata:
      labels:
        name: mysql-myshop
        app: mysql-myshop
    spec:
      containers:
        - name: mysql-myshop
          image: mysql:8.0.16
          # 只有鏡像不存在時,纔會進行鏡像拉取
          imagePullPolicy: IfNotPresent
          # 同 Docker 配置中的 environment
          ports:
            - containerPort: 3306
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: "123456"
          # 容器中的掛載目錄
          volumeMounts:
            - name: nfs-vol-myshop
              mountPath: /var/lib/mysql
            # 以數據卷的形式掛載 MySQL 配置文件目錄
            - name: cm-vol-myshop
              mountPath: /etc/mysql/conf.d
      volumes:
        # 掛載到數據卷
        - name: nfs-vol-myshop
          persistentVolumeClaim:
            claimName: nfs-pvc-mysql-myshop
        # 將 ConfigMap 中的內容以文件形式掛載進數據卷
        - name: cm-vol-myshop
          configMap:
            name: mysql-myshop-config
            items:
                # ConfigMap 中的 Key
              - key: mysqld.cnf
                # ConfigMap Key 匹配的 Value 寫入名爲 mysqld.cnf 的文件中
                path: mysqld.cnf
---
apiVersion: v1
kind: Service
metadata:
  name: mysql-myshop
spec:
  ports:
    - port: 3306
      targetPort: 3306
  type: LoadBalancer
  selector:
    name: mysql-myshop
# 查看 ConfigMap
kubectl get cm
kubectl describe cm <ConfigMap Name>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章