1.问题内容
2.问题表现
在使用k8s或docker启动MySQL5.7容器时,容器占用的内存会不断增长,直至系统杀死进程



3.启动命令
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
protocol: TCP
env:
- name: MYSQL_ROOT_PASSWORD
value: "password" # 将密码设置为 password
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
volumes:
- name: mysql-data
hostPath:
path: /opt/data # 主机上的存储路径
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
nodePort: 30306 # 将端口号映射至 30306
type: NodePortdocker run -d --name mysql57 \
-v /opt/data/:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=password \
mysql:5.72.解决方案
1.升级版本
MySQL9.1.0运行正常
MySQL8.0.27运行正常
2.添加ulimit限制
docker run -d --name mysql \
-p 3306:3306 \
--ulimit nofile=262144:262144 \
--restart on-failure \
-e MYSQL_ROOT_PASSWORD=password \
mysql:5.73.使用podman启动容器
podman run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123.com --name mysql docker.io/library/mysql:5.73.不可行方案
为容器添加内存限制
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: mysql
replicas: 1
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
protocol: TCP
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"
volumeMounts:
- name: mysql-data
mountPath: /var/lib/mysql
resources:
limits:
memory: "4G" #限制内存为4G
volumes:
- name: mysql-data
hostPath:
path: /opt/data
---
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
targetPort: 3306
nodePort: 30306
type: NodePort