k8s 单节点开发环境用hostPath配置mysql的持久化存储
开发和运维人员在进行开发或测试部署的时候,用单节点部署比较方便, 因为最小的多节点部署也需要三台电脑.
容器的Pod在物理机关机或者重启后,单节点的问题就是数据会消失,需要持久化存储的支持.
PV支持多种存储驱动方式, 开销最小效率最高的无异于本地的hostPath方式. 网上大多数单节点部署资料都是用的NFS,麻烦又低效.
登录kubernetes dashboard, 找到Deployments, 找到mysql,编辑对应的YAML.(这里假定你已经安装过了mysql)
在spec项目下,添加一些内容
spec:
replicas: 1
selector:
matchLabels:
k8s-app: aliyun-mysql
template:
metadata:
name: aliyun-mysql
creationTimestamp: null
labels:
k8s-app: aliyun-mysql
spec:
volumes: # 从这里添加五行,包括本行
- name: mysql-storage
hostPath:
path: /k8data/mysql # 这里是你打算保存mysql配置文件和库的本地路径, 注意提前建好,并用chmod命令给好权限.
type: ''
containers:
- name: aliyun-mysql
image: mysql:8.0.23
env:
- name: MYSQL_ROOT_PASSWORD
value: ****** # 这里是你的root密码
resources: {}
volumeMounts: # 从这里添加三行,包括本行.
- name: mysql-storage
mountPath: /var/lib/mysql # mount的路径,是mysql的配置文件和默认库的位置.
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
imagePullPolicy: IfNotPresent
securityContext:
privileged: false
restartPolicy: Always
terminationGracePeriodSeconds: 30
dnsPolicy: ClusterFirst
securityContext: {}
schedulerName: default-scheduler
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 25%
maxSurge: 25%
revisionHistoryLimit: 10
progressDeadlineSeconds: 600
然后找到 Services,找到Mysql的Services
spec:
ports:
- name: tcp-3306-3306-5dl8t
protocol: TCP
port: 3306
targetPort: 3306
nodePort: 31747 # 注意,这个是外网访问端口.
selector:
k8s-app: aliyun-mysql
clusterIP: 10.10.2.196
clusterIPs:
- 10.10.2.196
type: NodePort # 将此处的类型改为NodePort
sessionAffinity: None
externalTrafficPolicy: Cluster
点更新,对应的Pod和Services会重启,稍后就可以了.