用户';s mysql自定义图像和Minikube奇怪的行为

用户';s mysql自定义图像和Minikube奇怪的行为,mysql,docker,kubernetes,mariadb,minikube,Mysql,Docker,Kubernetes,Mariadb,Minikube,吃。我创建了我的服务、部署和持久卷声明,这样我的mysql sholud就可以在minikube中工作,但它不能。我不明白为什么minikube外部的docker容器工作得很好,但当我尝试在minikube集群内部使用它时,我的数据库会以某种方式清除。这是我的文件 FROM alpine:latest RUN apk update && apk upgrade -a -U RUN apk add mysql mysql-client openrc supervisor RUN c

吃。我创建了我的服务、部署和持久卷声明,这样我的mysql sholud就可以在minikube中工作,但它不能。我不明白为什么minikube外部的docker容器工作得很好,但当我尝试在minikube集群内部使用它时,我的数据库会以某种方式清除。这是我的文件

FROM alpine:latest
RUN apk update && apk upgrade -a -U
RUN apk add mysql mysql-client openrc supervisor
RUN chown -R mysql:mysql /var/lib/mysql/
COPY ./my.cnf /etc/
COPY ./secure_config.sh /root
RUN rc default
RUN /etc/init.d/mariadb setup
RUN /etc/init.d/mariadb start
RUN chmod 755 /root/secure_config.sh
RUN /root/secure_config.sh
RUN sed -i "s|.*bind-address\s*=.*|bind-address=0.0.0.0|g" /etc/my.cnf
RUN sed -i "s|.*bind-address\s*=.*|bind-address=0.0.0.0|g" /etc/my.cnf.d/mariadb-server.cnf
RUN sed -i "s|.*skip-networking.*|skip-networking|g" /etc/my.cnf
RUN sed -i "s|.*skip-networking.*|skip-networking|g" /etc/my.cnf.d/mariadb-server.cnf
COPY ./wpdb.sh .
COPY ./sql_launch.sh .
RUN chmod 755 /wpdb.sh
RUN chmod 755 /sql_launch.sh
COPY ./supervisord.conf /etc/
EXPOSE 3306
CMD /sql_launch.sh
wpdb.sh

mysql -e "CREATE DATABASE wordpress;"
mysql -e "CREATE USER 'admin'@'localhost' IDENTIFIED BY 'admin';"
mysql -e "CREATE USER 'lchantel'@'localhost' IDENTIFIED BY 'lchantel';"
mysql -e "CREATE USER 'pstein'@'localhost' IDENTIFIED BY 'pstein'"
mysql -e "CREATE USER 'admins_mom'@'localhost' IDENTIFIED BY 'admins_mom'"
mysql -e "DELETE FROM mysql.user WHERE user = '';"
mysql -e "SET PASSWORD FOR 'admins_mom'@'localhost' = PASSWORD('123456');"
mysql -e "SET PASSWORD FOR 'admin'@'localhost' = PASSWORD('123456');"
mysql -e "SET PASSWORD FOR 'pstein'@'localhost' = PASSWORD('123456');"
mysql -e "SET PASSWORD FOR 'lchantel'@'localhost' = PASSWORD('123456');"
mysql -e "GRANT ALL PRIVILEGES ON wordpress.* TO 'admin'@'localhost' IDENTIFIED BY 'admin';"
mysql -e "FLUSH PRIVILEGES;"
sql_launch.sh

#!bin/sh

rc default
chmod 777 /wpdb.sh && /wpdb.sh
rc-service mariadb stop
/usr/bin/supervisord -c /etc/supervisord.conf
这是我在容器中的mysql输出

MariaDB [(none)]> SELECT user FROM mysql.user
    -> ;
+-------------+
| User        |
+-------------+
| admin       |
| admins_mom  |
| lchantel    |
| mariadb.sys |
| mysql       |
| pstein      |
| root        |
+-------------+
7 rows in set (0.006 sec)
MariaDB [(none)]>
这是我在minikube吊舱内的输出

# rc-status
Runlevel: default
 mariadb                                                                                                                                                                      [  stopped  ]
Dynamic Runlevel: hotplugged
Dynamic Runlevel: needed/wanted
Dynamic Runlevel: manual
/ # rc-service mariadb start
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/blkio/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpu/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpu,cpuacct/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpuacct/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/cpuset/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/devices/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/freezer/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/hugetlb/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/memory/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/net_cls/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/net_cls,net_prio/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/net_prio/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/perf_event/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/pids/tasks: Read-only file system
/lib/rc/sh/openrc-run.sh: line 100: can't create /sys/fs/cgroup/systemd/tasks: Read-only file system
 * Datadir '/var/lib/mysql/' is empty or invalid.
 * Run '/etc/init.d/mariadb setup' to create new database.
 * ERROR: mariadb failed to start

所以我猜问题出在部署的mountPath部分的yaml文件中。有yaml文件

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-mysql
spec:
  capacity:
    storage: 500Mi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/home/lchantel/pv_proj/"

---

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pv-claim-mysql
  labels:
    app: mysql
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

谷歌帮不上忙,根本不知道我该做什么,该从哪里开始。

好吧,我下一步解决了我的问题

  • 我完全重新制作了我的mysql Dockerfile。alpine wiki建议配置mariadb的方式很复杂,而且不起作用
    VOLUME/var/lib/mysql/
    命令对于在目录中持久化数据非常有用
  • 我决定将.sh转换为mysql脚本。而且,就我使用Wordpress数据库而言,没有理由在mysql数据库中创建多个用户。创建一个管理员就足够了。这是我的文件
  • 和sql脚本

    CREATE DATABASE wordpress;
    DELETE FROM mysql.user WHERE user = '';
    GRANT ALL PRIVILEGES ON wordpress.* TO 'admin'@'%' IDENTIFIED BY 'admin';
    SET PASSWORD FOR 'admin'@'%' = PASSWORD('admin');
    FLUSH PRIVILEGES;
    
  • 当您同时运行2个或更多服务(不包括supervisord)时,Superviror服务是有用的。因此,在myslq设置中使用脚本并将其作为守护进程启动就足够了:
  • yaml文件中有一些小更改。我们创建的admin是mysql脚本,所以不需要在yaml文件中创建它
  • my.cnf配置文件中有一些更改

  • 集群中每个节点上的
    /home/lchantel/pv_proj/
    中是否都有初始化数据?它是如何到达那里的?无论pod运行在哪个节点上,该主机目录中的内容都将隐藏映像中
    /var/lib/mysql
    中的内容。(如果数据目录恰好为空,则标准Docker Hub数据库映像将初始化新数据库。)@David Maze感谢您的回复。在/home/lchantel/pv_项目上,根本没有数据。实际上我认为,pvpvc部署链接包含/var/lib/mysql目录到我的主机目录/home/lchantel/pv proj。所以,实际的行为与我上面描述的完全相反,“我猜问题出在mountPath部分的yaml文件中”-当您不安装PV时,它工作吗?
    /var/lib/mysql
    中是否有烘焙到容器中的文件?@Matt实际上是的,它可以工作。我刚刚检查过它…我想我可以尝试下一个解决方案:不使用/var/lib/mysql/directory,而是使用新的-/mnt/mysql data/作为挂载卷,之后我只需将数据复制到该目录,并更改默认的mysql目录和套接字以进一步处理。但我明天就试试。
    FROM alpine:latest
    RUN apk update && apk upgrade -a -U
    RUN apk add mysql mysql-client openrc supervisor
    COPY ./mariadb-server.cnf /etc/my.cnf
    RUN chmod 755 /etc/my.cnf 
    RUN mkdir /sql_data
    COPY ./wpdb.sql /sql_data
    COPY ./launch.sh /
    RUN chmod 755 ./launch.sh
    RUN chown -R mysql:mysql /sql_data
    VOLUME /var/lib/mysql/
    RUN mkdir -p /run/mysqld/
    EXPOSE 3306
    CMD /launch.sh 
    
    CREATE DATABASE wordpress;
    DELETE FROM mysql.user WHERE user = '';
    GRANT ALL PRIVILEGES ON wordpress.* TO 'admin'@'%' IDENTIFIED BY 'admin';
    SET PASSWORD FOR 'admin'@'%' = PASSWORD('admin');
    FLUSH PRIVILEGES;
    
    #!/bin/sh
    
    mysql_install_db --skip-test-db --user=mysql --datadir=/var/lib/mysql
    mysqld --user=mysql --datadir=/var/lib/mysql --init-file=/sql_data/wpdb.sql
    
    apiVersion: v1
    kind: Service
    metadata:
      name: mysql-service
      labels:
        app: mysql
    spec:
      type: ClusterIP
      selector:
        app: mysql
      ports:
        - name: mysql
          port: 3306
          targetPort: 3306
          protocol: TCP
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pv-claim-mysql
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 500Mi
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql
      labels:
        app: mysql
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: mysql
        spec:
          restartPolicy: Always
          containers:
            - name: mysql
              image: mysql:latest
              ports:
                - containerPort: 3306
                  name: mysql
              volumeMounts:
                - name: mysqldb-storage
                  mountPath: "/var/lib/mysql/"
              imagePullPolicy: Never
          volumes:
            - name: mysqldb-storage
              persistentVolumeClaim:
                claimName: pv-claim-mysql
    
    #
    # These groups are read by MariaDB server.
    # Use it for options that only the server (but not clients) should see
    # this is read by the standalone daemon and embedded servers
    [server]
    
    # this is only for the mysqld standalone daemon
    [mysqld]
    user=root
    port=3306
    datadir=/var/lib/mysql
    tmpdir=/tmp
    skip-networking=false
    socket=/run/mysqld/mysqld.sock
    wait_timeout = 600
    max_allowed_packet = 64M
    # Galera-related settings
    #[galera]
    # Mandatory settings
    #wsrep_on=ON
    #wsrep_provider=
    #wsrep_cluster_address=
    #binlog_format=row
    #default_storage_engine=InnoDB
    #innodb_autoinc_lock_mode=2
    #
    # Allow server to accept connections on all interfaces.
    #
    bind-address=0.0.0.0
    #
    # Optional setting
    #wsrep_slave_threads=1
    #innodb_flush_log_at_trx_commit=0
    # Disabling symbolic links is recommended to prevent assorted security risks
    symbolic-links=0
    
    # this is only for embedded server
    [embedded]