k8s部署mariadb,secret+nfs+pv+pvc
k8s部署mariadb,secret+nfs+pv+pvc
·
k8s部署mariadb
此部署包括使用Secrets作为密码加密,使用nfs作为数据持久化,
如果不想使用Secrets作为密码加密,也可以使用其他方式或者直接明文
如果不想使用nfs作为持久化,可以使用其他持久化方式或者不进行数据持久化
部署步骤
1. 对明文密码使用base64加密(不使用Secret可以跳过)
# 明文密码为 my-mariadb-pw
$ echo -n my-mariadb-pw | base64
# 返回结果,密文密码
bXktbWFyaWFkYi1wdw==
2. 编写mariadb-secret.yaml(不使用Secret可以跳过)
apiVersion: v1
data:
# 密文密码,key可以随意写,建议和环境变量写一致
MARIADB_ROOT_PASSWORD: bXktbWFyaWFkYi1wdw==
kind: Secret
metadata:
name: mariadb-secret
# 命名空间,没有可以不写
namespace: hello-world
3. 配置nfs共享目录,为了持久化数据(不持久化数据可以跳过)
# 安装nfs
$ yum install -y nfs-utils
# 开启服务
$ systemctl start rpcbind
$ systemctl start nfs
# 配置共享目录,这里共享/opt/volumn/mariadb/
vim /etc/exports
# 添加一下内容
/opt/volumn/mariadb/ *(rw,no_root_squash,insecure)
# 使配置生效
$ exportfs -av
# 查看共享目录
$ showmount -e
4. 编写mariadb-pv.yaml(不持久化数据可以跳过)
apiVersion: v1
kind: PersistentVolume
metadata:
name: mariadb-pv
namespace: hello-world
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteMany
nfs:
# server是nfs服务器,path是共享的目录
server: 120.xxx.xxx.xxx
path: "/opt/volumn/mariadb/"
5. 编写mariadb-pvc.yaml(不持久化数据可以跳过)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-pvc
namespace: hello-world
spec:
# 和pv保持一致
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
# 和pv保持一致
storage: 2G
# pv的名字
volumeName: mariadb-pv
6. 编写mariadb-service-deployment.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: mariadb-service
name: mariabd-service
# 命名空间,没有可以不写
namespace: hello-world
spec:
ports:
# nodePort是对外暴露的端口
- nodePort: 30011
port: 3306
protocol: TCP
targetPort: 3306
selector:
# 此处应为pod的label,谢谢‘冰冻的绿豆汤’指正
app: mariadb-pod
# NodePort类型可以对外暴露端口
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: mariadb-deploy
name: mariadb-deploy
namespace: hello-world
spec:
replicas: 1
selector:
matchLabels:
app: mariadb-pod
template:
metadata:
labels:
app: mariadb-pod
namespace: hello-world
spec:
containers:
# 镜像名
- image: mariadb:10.8.3
name: mariadb
env:
# 密码,配置为Secret的
- name: MARIADB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mariadb-secret
key: MARIADB_ROOT_PASSWORD
# 密码,明文的 -- 不建议
# - name: MARIADB_ROOT_PASSWORD
# value: my-mariadb-pw
ports:
- containerPort: 3306
resources: {}
volumeMounts:
# 挂载,容器中的目录
- name: mariadb-data
mountPath: "/var/lib/mysql/"
readOnly: false
volumes:
# 挂载,pvc
- name: mariadb-data
persistentVolumeClaim:
# pvc名称
claimName: mariadb-pvc
readOnly: false
7. 执行yaml
# 不使用Secret不用执行
$ kubectl apply -f mariadb-secret.yaml
# 不持久化数据不用执行
$ kubectl apply -f mariadb-pv.yaml
# 不持久化数据不用执行
$ kubectl apply -f mariadb-pvc.yaml
# 此项必须执行
$ kubectl apply -f mariadb-service-deployment.yaml
8. 连接数据库nodeIp+nodePort进行访问,用户为root,密码为my-mariadb-pw
如有问题请联系
更多推荐
已为社区贡献1条内容
所有评论(0)