使用 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
我正在尝试从 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