在 Kubernetes 中,我们可以使用 ConfigMap 和 Secret 来指定应用程序中的用户名和密码。
以下是一个示例 YAML 文件,用于创建 MySQL Deployment,并从 ConfigMap 和 Secret 中获取用户名和密码:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: root-password
- name: MYSQL_USER
valueFrom:
configMapKeyRef:
name: mysql-config
key: username
- name: MYSQL_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: user-password
ports:
- containerPort: 3306
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-pvc
在这个 YAML 文件中,我们使用了两个对象:ConfigMap 和 Secret。ConfigMap 包含了 MySQL 用户名,而 Secret 则包含了 MySQL 的 root 密码和用户密码。
要创建 ConfigMap 和 Secret,请使用以下命令:
# 创建 ConfigMap
kubectl create configmap mysql-config --from-literal=username=myuser
# 创建 Secret
kubectl create secret generic mysql-secret --from-literal=root-password=secret --from-literal=user-password=anothersecret
这些命令将创建一个名为 mysql-config 的 ConfigMap 和一个名为 mysql-secret 的 Secret,其中包含了 MySQL 的用户名、root 密码和用户密码。
请注意,在 MySQL 镜像中,存在一个名为 MYSQL_ROOT_PASSWORD 的环境变量,它表示 root 用户的密码。因此,在 YAML 文件中,我们只需指定 MYSQL_USER 和 MYSQL_PASSWORD 环境变量即可。同时,我们还指定了一个名为 mysql-pvc 的 PersistentVolumeClaim,以保存 MySQL 数据库文件。
最后,我们可以使用以下命令来部署 MySQL 应用程序:
kubectl apply -f mysql.yaml
这将部署一个名为 mysql 的 Deployment,并创建一个 Pod,其中运行了 MySQL 容器。容器将从 ConfigMap 和 Secret 中获取用户名和密码,以及 root 密码。