k8s一键安装mysql8单机版

k8s一键安装mysql8单机版

前置条件

已经搭建好kubernetes1.25.4集群

Kubernetes 1.25.4版本安装_V胡桃夹子的博客-CSDN博客

kubeasz安装kubernetes1.25.5_V胡桃夹子的博客-CSDN博客

kubernetes1.25.4机器安装好了nfs服务

CentOS8搭建nfs服务_V胡桃夹子的博客-CSDN博客

本文介绍的mysql8单节点部署,采用nfs存储,自定义k8s namespacee,创建pv/pvc/configmap来部署的

创建mysql.yaml

复制下面脚本执行生成mysql.yaml部署文件

cat > mysql.yaml<---
# namespace
apiVersion: v1    # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: Namespace   # k8s资源类型,Namespace资源
metadata:         # 资源的元数据语句块,是针对kind对应资源的全局属性
  name: develop   # 声明工作空间名称
  labels:         # 标签
    name: develop # 设置namespace的label标签
---
# pv
apiVersion: v1                          # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: PersistentVolume                  # k8s资源类型,PersistentVolume资源
metadata:                               # 资源的元数据语句块,是针对kind对应资源的全局属性
  namespace: develop                    # 指定工作空间
  name: mysql-nfspv-volume              # 自定义pv名字,PersistentVolume下全局唯一
  labels:                               # 标签
    app: mysql                          # 设置pv的label标签
spec:                                   # 规格语句块
  capacity:                             # 存储能力,用于定义PV的存储容量
    storage: 2Gi                        # PV的具体存储空间大小,Mi表示1024进制
  accessModes:                          # 访问能力,指定访问模式
    - ReadWriteMany                     # 用于定义资源的访问方式 (这里用的是单节点可读可写)
  storageClassName: nfs                 # 使用了NFS网络文件系统作为存储卷
  persistentVolumeReclaimPolicy: Retain # pv回收策略,当声明被释放,pv将保留(不清理和删除)
  nfs:                                  # 指定使用NFS存储驱动
    server: 10.104.10.202               # 指定NFS服务器IP地址
    path: /nfs/mysql                    # 指定NFS共享目录的位置,且需提前在该目录中创建mysql目录
---
# pvc
apiVersion: v1              # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: PersistentVolumeClaim # k8s资源类型,PersistentVolumeClaim资源
metadata:                   # 资源的元数据语句块,是针对kind对应资源的全局属性
  namespace: develop        # 指定工作空间
  name: mysql-nfspvc-mysql  # pvc的名字,PersistentVolumeClaim下全局唯一
spec:                       # 规格语句块
  accessModes:              # 访问能力,指定访问模式
    - ReadWriteMany         # 用于定义资源的访问方式 (单个节点  这里用的是单节点可读可写)
  resources:                # 访问模式下的资源语句块
    requests:               # 请求语句块
      storage: 2Gi          # 请求存储空间,PVC允许申请的大小
  storageClassName: nfs     # 使用了NFS网络文件系统作为存储卷
  selector:
    matchLabels:
      app: mysql            # 根据Label选择对应PV
---
# configmap
apiVersion: v1        # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: ConfigMap       # 表明是Kubernetes ConfigMap
metadata:             # 资源的元数据语句块,是针对kind对应资源的全局属性
  namespace: develop  # 指定工作空间
  name: mysql8-config # 当前ConfigMap名称
data:
  # my.cnf代表着mysql8的配置文件名称
  my.cnf: |
    [mysql]
    # mysql客户端默认字符集
    default-character-set=utf8
    [mysqld]
    # 数据库文件位置
    datadir=/var/lib/mysql
    # 允许最大连接数
    max_connections=1000
    # innodb的dml操作的行级锁的等待时间
    innodb_lock_wait_timeout=500
    # 设置mysql服务端默认字符集
    character-set-server=utf8mb4
    # 默认创建新数据的新建排序规则
    collation-server=utf8mb4_general_ci
    # 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    # 缓存大小
    sort_buffer_size=256MB
    # 大小写敏感配置项0为敏感,1为不敏感
    lower_case_table_names=1
    # 选择正8区
    default-time-zone='+8:00'
---
# Service
apiVersion: v1       # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: Service        # 表明是Kubernetes Service
metadata:            # 资源的元数据语句块,是针对kind对应资源的全局属性
  namespace: develop # 指定工作空间
  name: mysql8       # Service的名称,Service下全局唯一
spec:
  type: NodePort     # 配置为NodePort,外部可以访问,不指定则默认为ClusterIP,只能集群内部访问
  ports:
  - port: 3306       # Service 提供的服务端口,即容器间服务调用的端口
    targetPort: 3306 # 容器暴露的端口,与Dockerfile暴露端口保持一致
    nodePort: 3306   # 外部访问的端口,默认30000-32767之间,除非有修改默认端口区间
  selector:
    app: mysql8      # 标签
---
# Deployment
apiVersion: apps/v1                      # 版本要符合kubectl apiVersion规定,v1是稳定版本
kind: Deployment                         # 表明是Kubernetes Deployment
metadata:                                # 资源的元数据语句块,是针对kind对应资源的全局属性
  namespace: develop                     # 指定工作空间
  name: mysql8                           # Deployment的名称,Deployment下全局唯一
  labels:                                # 标签
    app: mysql8                          # 标识Pod,在Service中的selector指定匹配label为app:mysql8
spec:
  replicas: 1                            # Pod 副本的期待数量
  selector:
    matchLabels:
      app: mysql8                        # 必须匹配 spec.template.metadata.labels
  template:                              # 根据此模版创建Pod的副本
    metadata:
      name: mysql8
      labels:
        app: mysql8                      # 必须配置 spec.selector.matchLabels
    spec:
      containers:                        # Pod中包含的容器
      - name: mysql8                     # 容器的名称
        # 容器对应的Docker Image,即镜像名
        image: docker.io/library/mysql:8.0.31 
        # Always:总是拉取;IfNotPresent:默认值,本地有则不拉取;Never:只用本地镜像,从不拉取;
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306            # 容器应用监听的端口号
        env:                             # 定义环境变量
        - name: MYSQL_ROOT_PASSWORD      # mysql初始化密码变量
          value: "123456"                # 配置Mysql Root用户默认密码
        livenessProbe:                   # 判断容器是否正常运行,如果失败则杀掉容器(不是pod),再根据重启策略是否重启容器
          initialDelaySeconds: 30        # 初始化延迟时间
          periodSeconds: 10              # 探测周期间隔时间
          timeoutSeconds: 5              # 单次探测超时时间
          successThreshold: 1            # 探测失败到成功的重试次数
          failureThreshold: 3            # 探测成功到失败的重试次数
          exec:
            # 在容器中执行此命令,如果命令返回状态码为0,则认为探测成功
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        # 判断容器是否能进入ready状态,探针失败则进入noready状态,并从service的endpoints中剔除此容器
        readinessProbe:
          initialDelaySeconds: 10        # 初始化延迟时间
          periodSeconds: 10              # 探测周期间隔时间
          timeoutSeconds: 5              # 单次探测超时时间
          successThreshold: 1            # 探测失败到成功的重试次数
          failureThreshold: 3            # 探测成功到失败的重试次数
          exec:
            # 在容器中执行此命令,如果命令返回状态码为0,则认为探测成功
            command: ["mysqladmin", "-uroot", "-p${MYSQL_ROOT_PASSWORD}", "ping"]
        volumeMounts:
        - name: mysql-data               # 自定义名字,名字须与volumes.name一致
          mountPath: /var/lib/mysql      # 容器内目录
        - name: mysql-config
          # mysql的配置文件my.cnf
          mountPath: /etc/mysql/conf.d/my.cnf 
          subPath: my.cnf
        - name: localtime
          readOnly: true
          mountPath: /etc/localtime
      volumes:
      - name: mysql-data                 # 自定义名字,名字须与volumeMounts.name一致
        persistentVolumeClaim:
          claimName: mysql-nfspvc-mysql  # 引用的pvc
      - name: mysql-config
        configMap:
          name: mysql8-config            # 引用的ConfigMap名称
      - name: localtime
        hostPath:
          type: File
          path: /etc/localtime           # 宿主机挂载目录
EOF

部署

注意一个细节,上面mysql.yaml存储是基于nfs,其中mysql数据存储目录为/nfs/mysql,一定要注意/nfs目录下有创建mysql文件夹

一键部署命令:

kubectl apply -f mysql.yaml

一键回收命令:

kubectl delete -f mysql.yaml

引用 Reference

Kubernetes 1.25.4版本安装
kubeasz安装kubernetes1.25.5
CentOS8搭建nfs服务
k8s一键安装redis单机版
k8s一键安装mysql8单机版
Docker制作springboot运行应用镜像
k8s部署springboot应用
zookeeper集群安装
Nginx日志切割
Elasticsearch单机版本安装
Elasticsearch集群安装
springboot集成prometheus+grafana
安装Docker及学习
RabbitMQ集群安装

你可能感兴趣的:(k8s,kubernetes,mysql,kubernetes,mysql)