k8s一键安装mysql8单机版
1.前置条件
已经搭建好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来部署的
2.创建mysql.yaml
复制下面脚本执行生成mysql.yaml部署文件
cat > mysql.yaml<<EOF
---
# 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.labelstemplate: # 根据此模版创建Pod的副本metadata:name: mysql8labels:app: mysql8 # 必须配置 spec.selector.matchLabelsspec:containers: # Pod中包含的容器- name: mysql8 # 容器的名称# 容器对应的Docker Image,即镜像名image: docker.io/library/mysql:8.0.31 # Always:总是拉取;IfNotPresent:默认值,本地有则不拉取;Never:只用本地镜像,从不拉取;imagePullPolicy: IfNotPresentports:- 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.cnfmountPath: /etc/mysql/conf.d/my.cnf subPath: my.cnf- name: localtimereadOnly: truemountPath: /etc/localtimevolumes:- name: mysql-data # 自定义名字,名字须与volumeMounts.name一致persistentVolumeClaim:claimName: mysql-nfspvc-mysql # 引用的pvc- name: mysql-configconfigMap:name: mysql8-config # 引用的ConfigMap名称- name: localtimehostPath:type: Filepath: /etc/localtime # 宿主机挂载目录
EOF
3.部署
注意一个细节,上面mysql.yaml存储是基于nfs,其中mysql数据存储目录为/nfs/mysql,一定要注意/nfs目录下有创建mysql文件夹
一键部署命令:
kubectl apply -f mysql.yaml
一键回收命令:
kubectl delete -f mysql.yaml
4. k8s相关学习
Kubernetes 1.25.4版本安装_V胡桃夹子的CSDN博客
kubeasz安装kubernetes1.25.5_V胡桃夹子的CSDN博客
CentOS8搭建nfs服务_V胡桃夹子的CSDN博客
k8s一键安装redis单机版_V胡桃夹子的CSDN博客
Docker制作springboot运行应用镜像_V胡桃夹子的CSDN博客
k8s部署springboot应用_V胡桃夹子的CSDN博客