在Kubernetes中将另一个用户添加到MySQL
这是我的MySQL在Kubernetes中将另一个用户添加到MySQL,mysql,kubernetes,Mysql,Kubernetes,这是我的MySQL apiVersion: apps/v1beta1 kind: Deployment metadata: name: abc-def-my-mysql namespace: abc-sk-test labels: project: abc ca: my spec: replicas: 1 template: metadata: labels: app: abc-def-my-mysql pr
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: abc-def-my-mysql
namespace: abc-sk-test
labels:
project: abc
ca: my
spec:
replicas: 1
template:
metadata:
labels:
app: abc-def-my-mysql
project: abc
ca: my
spec:
containers:
- name: mysql
image: mysql:5.6
args: ["--default-authentication-plugin=mysql_native_password", "--ignore-db-dir=lost+found"]
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
- name: MYSQL_DATABASE
value: "my_abc"
- name: MYSQL_USER
value: "test_user"
- name: MYSQL_PASSWORD
value: "12345"
volumeMounts:
- mountPath: /var/lib/mysql
name: abc-def-my-mysql-storage
volumes:
- name: abc-def-my-mysql-storage
persistentVolumeClaim:
claimName: abc-def-my-mysql-pvc
我想向mysql添加另一个用户,以便真正的用户可以连接到它。而不是使用测试用户。如何添加另一个用户,是否与向上述配置添加任何其他环境变量类似取决于用户生命周期,您可以在容器启动时创建用户,或者通过MySQL的docker启动脚本(安装在/docker entrypoint initdb.d),或者在服务器启动后在CLI中创建用户 使用容器启动脚本,您可能需要处理运行同一脚本的多个容器,例如创建用户(如果存在)
如果DB服务器是长寿命的,则CLI选项可能更合适,并且即使在创建服务器之后,您也会收到创建多个用户的请求。将创建用户脚本装载到容器的/docker entrypoint initdb.d目录中。它将在第一次pod启动时执行一次
apiVersion: extensions/v1beta1
kind: Pod
metadata:
name: mysql
spec:
containers:
- name: mysql
image: mysql
.....
env:
- name: MYSQL_ROOT_PASSWORD
value: "root"
.....
volumeMounts:
- name: mysql-initdb
mountPath: /docker-entrypoint-initdb.d
volumes:
- name: mysql-initdb
configMap:
name: initdb
---
apiVersion: v1
kind: ConfigMap
metadata:
name: initdb
data:
initdb.sql: |-
CREATE USER 'first_user'@'%' IDENTIFIED BY '111' ;
CREATE USER 'second_user'@'%' IDENTIFIED BY '222' ;
测试:
请参阅Mysql Docker Hub图像:
当容器第一次启动时,一个新的数据库
将创建指定的名称,并使用提供的
配置变量。此外,它将使用
中找到的扩展名.sh、.sql和.sql.gz
/docker入口点initdb.d。文件将按字母顺序执行
秩序
通过挂载SQL,您可以轻松地填充mysql服务
转储到该目录中,并提供自定义图像
数据默认情况下,SQL文件将导入指定的数据库
通过MYSQL_数据库变量
这很好,但ConfigMaps并没有被遮挡。将其存储在存储库中可能不是一个好主意。如果设置了,最好只挂载一个.sh并依靠一些环境变量机密来填充用户。
kubectl exec -it <PODNAME> -- mysql -uroot -p -e 'SELECT user, host FROM mysql.user;'
+-------------+------+
| user | host |
+-------------+------+
| first_user | % |
| second_user | % |
| root | % |
+-------------+------+