概述
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>