kubernetes之配置mysql的configmap


一.簡單說明

我們在運行一個mysql服務時,mysql服務有兩類重要的數據,一個是存儲的數據、另一個是存儲的配置文件。存儲數據這里我們可以使用掛載PVC來實現持久化存儲,配置文件這里我們如果實現和容器的解耦,可以采用configmap來實現。

二.ConfigMap介紹

2.1 ConfigMap作用和使用場景

  • ConfigMap用於保存配置數據,以鍵值對的形式存儲
  • ConfigMap資源提供了向Pod注入配置數據的方法
  • ConfigMap旨在讓鏡像與配置文件解耦,以實現鏡像的可移植性和可復用性。
  • 填充環境變量的值
  • 填充卷的配置文件

2.2 ConfigMap的創建

這里有以下幾種創建方式:

  • 使用字面值創建
    kubectl create configmap my-configmap --from-literal=key1=1 --from-literal=key2=2
    [root@k8s001 ~]# kubectl get cm my-configmap -o yaml
    apiVersion: v1
    data:
      key1: "1"
      key2: "2"
    kind: ConfigMap
    metadata:
      creationTimestamp: "2020-08-11T03:54:00Z"
      name: my-configmap
      namespace: default
      resourceVersion: "4745970"
      selfLink: /api/v1/namespaces/default/configmaps/my-configmap
      uid: 4a277575-db86-11ea-bb5f-6c4b9005d934
    
  • 使用文件創建
    [root@k8s001 ~]# cat configmap-file 
    10.10.2.2 k8s001
    [root@k8s001 ~]# kubectl create cm my-configmap-file --from-file=configmap-file 
    configmap/my-configmap-file created
    [root@k8s001 ~]# kubectl get cm my-configmap-file -o yaml
    apiVersion: v1
    data:
      configmap-file: |
        10.10.2.2 k8s001
    kind: ConfigMap
    metadata:
      creationTimestamp: "2020-08-11T03:58:23Z"
      name: my-configmap-file
      namespace: default
      resourceVersion: "4747102"
      selfLink: /api/v1/namespaces/default/configmaps/my-configmap-file
      uid: e6c966b8-db86-11ea-bb5f-6c4b9005d934
    
  • 使用目錄創建
    [root@k8s001 ~]# mkdir configmap-dir
    [root@k8s001 ~]# cp configmap-file ./configmap-dir/
    [root@k8s001 ~]# kubectl create cm myconfigmap-dir --from-file=configmap-dir
    configmap/myconfigmap-dir created
    [root@k8s001 ~]# kubectl get cm myconfigmap-dir -o yaml
    apiVersion: v1
    data:
      configmap-file: |
        10.10.2.2 k8s001
    kind: ConfigMap
    metadata:
      creationTimestamp: "2020-08-11T04:01:51Z"
      name: myconfigmap-dir
      namespace: default
      resourceVersion: "4748006"
      selfLink: /api/v1/namespaces/default/configmaps/myconfigmap-dir
      uid: 62fde3bb-db87-11ea-ab20-6c4b9005ca34
    
  • 編寫ConfigMap的yaml文件來創建
    [root@k8s001 ~]# cat configmap_mysql.yaml 
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mysql-config
      namespace: business
    data:
      mysqld.cnf: |-
        [mysqld]
        pid-file	= /var/run/mysqld/mysqld.pid
        socket      = /var/run/mysqld/mysqld.sock
        datadir	= /var/lib/mysql
        symbolic-links = 0
        max_allowed_packet = 50M
        character_set_server = utf8
        collation_server = utf8_general_ci
        group_concat_max_len = 102400
        [client]
        default_character_set = utf8
    

2.3 如何使用ConfigMap

  • 可以通過環境變量的形式直接傳遞給Pod
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wf-mysql
spec:
  containers:
  - image: mysql:5.7
    imagePullPolicy: IfNotPresent
    name: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        configMapKeyRef:
          name: mysql-credentials
          key: rootpw
    - name: MYSQL_USER
      valueFrom:
        configMapKeyRef:
          name: mysql-credentials
          key: user
    - name: MYSQL_PASSWORD
      valueFrom:
        configMapKeyRef:
          name: mysql-credentials
          key: password
  • 通過在Pod的命令行下運行命令方式
[k8s001 ~]# cat busybox.yaml
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wf-mysql
spec:
  containers:
  - image: busybox
    imagePullPolicy: IfNotPresent
    command: ["/bin/sh", "-c", "echo ${test_env}"]
    name: busybox
    envFrom:
      - configMapRef:
          name: configmap-test
    restartPolicy: Always
  • 作為volume的方式掛載到Pod內
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: wf-mysql
spec:
  containers:
  - image: mysql:5.7
    imagePullPolicy: IfNotPresent
    name: mysql
    env:
    - name: MYSQL_ROOT_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysql-credentials
          key: rootpw
    - name: MYSQL_USER
      valueFrom:
        secretKeyRef:
          name: mysql-credentials
          key: user
    - name: MYSQL_PASSWORD
      valueFrom:
        secretKeyRef:
          name: mysql-credentials
          key: password
    
    ports:
    - containerPort: 3306
      name: mysql
    volumeMounts:
    - name: config-volume
      mountPath: /etc/mysql/mysql.conf.d
  volumes:
  - name: config-volume                     
    configMap:           
      name: mysql-config


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM