[kubernetes]-k8s运行mysql8.0

导语:因为自己写的项目想放到k8s里跑,并且项目用的数据库是mysql8 所以要先试一试k8s部署mysql8

创建pv和pvc文件 mysql-storage.yaml


---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql
  namespace: devops
  labels:
    app: mysql             #设置 pv 的 label 标签
spec:
  capacity:
    storage: 20Gi
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy: Delete
  nfs:
    server: 192.168.1.171
    path: /srv/devops

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql
  namespace: devops
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 20Gi
  selector:
    matchLabels:
      app: mysql           #根据 Label 选择对应 PV

创建configmap文件 mysql-config.yaml

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: mysql-config
  namespace: devops
  labels:
    app: mysql
data:
  my.cnf: |-
    [client]
    default-character-set=utf8mb4
    [mysql]
    default-character-set=utf8mb4
    [mysqld]
    max_connections = 2000
    secure_file_priv=/var/lib/mysql
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

创建部署yaml文件 mysql-deploy.yaml

apiVersion: extensions/v1beta1                  #apiserver的版本
kind: Deployment                                      #副本控制器deployment,管理pod和RS
metadata:
  namespace: devops
  name: mysql                                            #deployment的名称,全局唯一
spec:
  replicas: 1                                                #Pod副本期待数量
  selector:
    matchLabels:                                         #定义RS的标签
      app: mysql                                          #符合目标的Pod拥有此标签
  strategy:                                                  #定义升级的策略
    type: RollingUpdate                               #滚动升级,逐步替换的策略
  template:                                                #根据此模板创建Pod的副本(实例)
    metadata:
      labels:
        app: mysql                                        #Pod副本的标签,对应RS的Selector
    spec:
      containers:                                          #Pod里容器的定义部分
      - name: mysql                                     #容器的名称
        image: mysql:8.0.19                           #容器对应的docker镜像
        volumeMounts:                                #容器内挂载点的定义部分
        - name: time-zone                            #容器内挂载点名称
          mountPath: /etc/localtime              #容器内挂载点路径,可以是文件或目录
        - name: mysql-data
          mountPath: /var/lib/mysql               #容器内mysql的数据目录
        - name: config
          mountPath: /etc/mysql/conf.d/my.cnf               #容器内mysql的数据目录

        ports:
        - containerPort: 3306                         #容器暴露的端口号
        env:                                                   #写入到容器内的环境容量
        - name: MYSQL_ROOT_PASSWORD   #定义了一个mysql的root密码的变量
          value: "123456"
# health check

# health check
      volumes:                                             #本地需要挂载到容器里的数据卷定义部分
      - name: time-zone                              #数据卷名称,需要与容器内挂载点名称一致
        hostPath:
          path: /etc/localtime                        #挂载到容器里的路径,将localtime文件挂载到容器里,可让容器使用本地的时区
      - name: mysql-data
        persistentVolumeClaim:
          claimName: mysql
      - name: config
        configMap:
          name: mysql-config

如果需要可以加入健康检查的配置

# health check
        resources:
          limits:
            cpu: 2000m
            memory: 512Mi
          requests:
            cpu: 2000m
            memory: 512Mi
        livenessProbe:
          initialDelaySeconds: 30
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        readinessProbe:
          initialDelaySeconds: 10
          periodSeconds: 10
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 3
          exec:
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]

# health check

创建svc文件 mysql-svc.yaml

---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: devops
  labels:
    app: mysql
spec:
  type: NodePort
  ports:
    - name: tcp
      port: 3306
      nodePort: 30336
  selector:
    app: mysql

创建pod

我都是创建在namespace devops下的 如果想创建在别的namespace下 后面加上-n namespace的名称即可

kubectl aaply -f mysql-config.yaml
kubectl aaply -f mysql-storage.yaml
kubectl aaply -f mysql-deploy.yaml
kubectl aaply -f mysql-svc.yaml
# 查看容器的name
kubectl get pods -n devops
# 进入容器
kubectl exec -it $podname /bin/bash -n devops

创建一个test库 测试故障之后pod数据是否会持久化

删除旧pod 等新的pod被拉起

查看创建的test库 在新pod中也是存在的

测试工具navicat连接

使用虚拟机测试连接 发现低版本的mysql 5.7连接会报错

ERROR 2026 (HY000): SSL connection error: unknown error number

用8.0版本连接就不会有问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷来辣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值