此部署包括使用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

如有问题请联系

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐