主要用于pod的数据持久化使用,下面先介绍本地文件夹挂载方式,集群推荐使用
NFS进行文件挂载
一、本地文件夹挂载方式
PV和PVC两者需要相互绑定才可以,
matchExpressions.values指定了在哪个节点生效使用 创建PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv
spec:
capacity:
storage: 1Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage
local:
path: /home/data/mysql
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- minikube
创建PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-storage
volumeName: mysql-pv
resources:
requests:
storage: 1Gi
创建StorageClass
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
mysql使用pvc
mysql的其他配置使用了ConfigMap进行统一管理,可以理解为就是配置文件
apiVersion: v1
kind: Service
metadata:
name: mysql-service
spec:
type: NodePort
ports:
- name: mysqlport
protocol: TCP
port: 3306
targetPort: 3306
nodePort: 30106
selector:
app: mysql-app
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql-app
labels:
app: mysql-app
spec:
selector:
matchLabels:
app: mysql-app
template:
metadata:
labels:
app: mysql-app
spec:
containers:
- name: mysql
image: mysql:5.7
imagePullPolicy: IfNotPresent
args:
- --default_authentication_plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- containerPort: 3306
name: dbport
env:
- name: MYSQL_ROOT_PASSWORD
value: root@123
volumeMounts:
- name: mysql-pvc
mountPath: /var/lib/mysql
- name: mysql-config
mountPath: /etc/mysql/conf.d/
volumes:
- name: mysql-pvc
persistentVolumeClaim:
claimName: mysql-pvc
- name: mysql-config
configMap:
name: mysql-config
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mysql-config
data:
mysqld.cnf: |
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
bind-address = 0.0.0.0
symbolic-links=0
max_connections=1000
default_storage_engine=innodb
skip_external_locking
lower_case_table_names=1
skip_host_cache
skip_name_resolve
character_set_server=utf8
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
到此就可以使用 30106这个端口进行访问
mysql了,但是为了方便管理建议使用ingress进行端口转发
二、使用NFS网络文件系统进行文件挂载
创建NFS
创建PV
创建PVC
pod使用PVC