部署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


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注