使用 kubernetes poststart 执行 mysql 命令

Execute mysql command with kubernetes poststart

我正在尝试从 mysql 容器获取日志。我必须设置变量:

"SET GLOBAL general_log= 1"

我正在尝试使用 kubernetes poststart 设置变量,但它不起作用。这是我的配置:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: mysql
  replicas: 1
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - image: mysql:5.7
        name: mysql
        env:
        - name: MYSQL_ROOT_PASSWORD
          valueFrom:
            secretKeyRef:
              name: mysql-secret
              key: password
        lifecycle:
          postStart:
            exec:
              command: ["/bin/bash", "-c","/etc/init.d/mysql start", "mysql -p${MYSQL_ROOT_PASSWORD} <<< 'SET GLOBAL general_log= 1;'" ]
 
        ports:
        - containerPort: 3306
          name: mysql
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql  #The path used to mount the hostPath share inside the pod.
   
  - name: log-mysql
    image: alpine
    args: [/bin/sh, -c, "tail -n+1 -f /tmp/logs/mysql-0.log"] 
    volumeMounts:
    - name: mysql-persistent-storage
      mountPath: /tmp/logs
  
  volumes:                    
  - name: mysql-persistent-storage
    persistentVolumeClaim:
      claimName: mysql-pvclaim
  
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
spec:
  ports:
  - port: 3306
  selector:
    app: mysql

我在应用此配置时没有出现任何错误,但 general_log 变量的值保持关闭状态且未打开。

PS:当我连接到我的 pod 并手动输入时

mysql -p${MYSQL_ROOT_PASSWORD} <<< 'SET GLOBAL general_log= 1;'

变量的值开启。我不明白为什么它不能使用 Poststart。

我能帮忙吗? 谢谢

命令执行得太早,就在容器创建之后和 mysqld 准备好接受命令之前。

您可以使用不同的方法来实现您的目标:

  • 提供容器命令并使用“--general-log=1”
  • 使用设置和卷创建自定义 custom.cnf 文件并将其安装到 /etc/mysql/conf.d