部署mysql服务
k8s中切换到jtest命名空间
kubectl config set-context --current --namespace jtest
配置configmap
my.cnf
[mysqld]
server_id = 1
wait_timeout=180
interactive_timeout=180
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
log_bin = /var/log/mysql/mysql-bin.log
expire-logs-days = 3
max-binlog-size = 1G
binlog-format=ROW
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
创建mysql-cm
kubectl create configmap mysql-cm --from-file my.cnf
配置pvc
mysql-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mysql-nas-csi-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: nfs-storage
resources:
requests:
storage: 30Gi
创建pvc
kubectl apply -f mysql-pvc.yaml
部署deployment和service
mysql.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
clusterIP: None
ports:
- port: 3306
name: mysql-port
selector:
app: mysql
#---
#apiVersion: v1
#kind: Service
#metadata:
# name: mysql-external
#spec:
# ports:
# - port: 3306
# nodePort: 30306
# name: mysql-port
# selector:
# app: mysql
# type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
serviceName: mysql
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
#affinity:
# nodeAffinity:
# requiredDuringSchedulingIgnoredDuringExecution:
# nodeSelectorTerms:
# - matchExpressions:
# - key: node_env
# operator: In
# values:
# - jtest
containers:
#- image: registry-vpc.cn-shenzhen.aliyuncs.com/wy_spc/mysql:5.6
- image: mysql:5.6
name: mysql
resources:
requests:
cpu: 500m
memory: 1Gi
limits:
cpu: 1000m
memory: 2Gi
env:
# Use secret in real usage
- name: MYSQL_ROOT_PASSWORD
value: mysql884928
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
- name: mysqld-conf
mountPath: /etc/mysql/mysql.conf.d/my.cnf
subPath: my.cnf
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-nas-csi-pvc
- name: mysqld-conf
configMap:
name: mysql-cm
创建deployment和service
kubectl apply -f mysql.yaml
部署失败。mysql的pod总是OOMKilled。
参考: https://github.com/docker-library/mysql/issues/873
参考: https://github.com/containerd/containerd/issues/6707
有两个可能,
- 那台linux主机cgroup 版本的问题,
- 那台linux主机
LimitNOFILE=INFINITY
的问题(某些版本,某些操作系统下会有问题)
调整了下LimitNOFILE,倒是跑起来了。
sudo nano /lib/systemd/system/containerd.service
LimitNOFILE=INFINITY --> LimitNOFILE=1048576
docker stop <db>
docker rm <db>
sudo systemctl daemon-reload
sudo systemctl restart containerd
docker-compose up -d
补充tips:
关于5.6及以下版本mysql镜像的dockerfile信息:
https://github.com/docker-library/mysql/issues/705
https://github.com/docker-library/mysql/blob/3362baccb4352bcf0022014f67c1ec7e6808b8c5/5.6/Dockerfile
https://github.com/docker-library/mysql/blob/3362baccb4352bcf0022014f67c1ec7e6808b8c5/5.6/docker-entrypoint.sh
发表回复