在Kubernetes中向MySQL添加另一个用户

4

这是我的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
        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,这样真实的用户就可以连接它了。而不是使用“test_user”。我该如何添加另一个用户?是否像添加任何其他环境变量到上述配置一样添加即可?

2个回答

5
将“创建用户脚本”挂载到容器的/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' ;

测试:

kubectl exec -it <PODNAME> -- mysql -uroot -p -e 'SELECT user, host FROM mysql.user;'

    +-------------+------+
    | user        | host |
    +-------------+------+
    | first_user  | %    |
    | second_user | %    |
    | root        | %    |
    +-------------+------+

请见Mysql Docker Hub镜像的“初始化新实例”部分:
当容器首次启动时,将创建一个新数据库,并使用提供的配置变量进行初始化。此外,它还会执行在/docker-entrypoint-initdb.d中找到的扩展名为.sh.sql.sql.gz的文件。文件按字母顺序执行。
您可以通过将SQL转储挂载到该目录并提供自定义镜像来轻松填充mysql服务的数据。 SQL文件默认将导入由MYSQL_DATABASE变量指定的数据库。

这很好,但ConfigMaps并没有被遮蔽。将其存储在存储库中可能不是一个好主意。最好只是挂载一个.sh文件,并依靠一些环境变量机密来填充用户(如果设置)。 - David

0
根据用户生命周期,您可以在容器启动时创建用户,也可以通过MySQL的docker启动脚本在/docker-entrypoint-initdb.d上挂载,或者在服务器启动后通过CLI进行创建。
使用容器启动脚本时,您可能需要注意多个容器运行相同的脚本,例如CREATE user if exists。
如果DB服务器长期存在,并且您将在服务器创建后收到多个用户创建请求,则CLI选项可能更合适。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接