k8s部署mysql(使用local pv)

1.创建对应名称空间,这里使用db-system
kubectl create namespace db-system

2.设置使用的StorageClass(StorageClass.yaml)

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: local-storage
  namespace: db-system
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain

3.设置pv(mysql-pv.yaml)
使用的是local pv,挂接的目录是 /opt/mysql/data
亲和性自行定夺吧。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mysql-pv
  namespace: db-system
  labels:
    type: local
spec:
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  storageClassName: local-storage
  local:
    path: "/opt/mysql/data"
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - key:  kubernetes.io/arch
          operator: In
          values:
          - amd64

4.设置pvc(mysql-pvc.yaml)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pvc
  namespace: db-system
  labels:
    app: mysql-pvc
spec:
  accessModes:
  - ReadWriteOnce #此处需要和pv对应才能匹配
  resources:
    requests:
      storage: 2Gi
  storageClassName: local-storage#此处需要和StorageClass.yaml匹配

5.部署Deployment(mysql-deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-deploy
  labels:
     app: mysql-deploy
  namespace: db-system
spec:
  replicas: 1 #根据自己实际决定份数
  selector:
    matchLabels:
      app: mysql-pod
  template:
    metadata:
      labels: 
        app: mysql-pod #注意这个名字,svc里面需要用到
    spec:
      terminationGracePeriodSeconds: 10
      containers:
        - name: mysql
          image: mysql:8.0.20
          imagePullPolicy: IfNotPresent
          env:
          - name: MYSQL_ROOT_PASSWORD
            value: mysql12345678
          ports:
            - containerPort: 3306
          volumeMounts:
            - name: mysql-persistent-storage
              mountPath: "/var/lib/mysql" #不需要修改,映射到镜像内部目录
      volumes:
        - name: mysql-persistent-storage
          persistentVolumeClaim:
            claimName: mysql-pvc #对应到pvc的名字
  1. mysql-svc.yaml:
apiVersion: v1
kind: Service
metadata:
  name: mysql-svc
  namespace: db-system
  labels: 
    name: mysql-svc
spec:
  type: NodePort
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
    nodePort: 32306
  selector:
    app: mysql-pod #这里名字要和Deployment 对应

7.应用配置
kubectl create -f StorageClass.yaml
kubectl create -f mysql-pv.yaml
kubectl create -f mysql-pvc.yaml
kubectl create -f mysql-deploy.yaml
kubectl create -f mysql-svc.yaml

8.设置node节点防火墙
sudo iptables -I INPUT -p tcp --dport 32306 -j ACCEPT
sudo iptables-save

看需要,是否持久化
sudo apt-get install iptables-persistent
sudo netfilter-persistent save
sudo netfilter-persistent reload

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是在 Kubernetes 中部署 MySQL 的一些基本步骤: 1. 创建一个 Kubernetes Secret,用于存储 MySQL 的 root 密码。可以使用以下命令创建: ``` kubectl create secret generic mysql-pass --from-literal=password=<password> ``` 其中 `<password>` 为你要设置的 MySQL root 密码。 2. 创建一个 PersistentVolumeClaim,用于存储 MySQL 数据。可以使用以下 YAML 文件创建: ``` apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pv-claim spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi ``` 这里设置了一个 20GB 的存储空间,可以根据实际需求进行修改。 3. 创建一个 Deployment,用于部署 MySQL。可以使用以下 YAML 文件创建: ``` apiVersion: apps/v1 kind: Deployment metadata: name: mysql-deployment spec: selector: matchLabels: app: mysql strategy: type: Recreate template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:5.7 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-pass key: password ports: - containerPort: 3306 name: mysql volumeMounts: - name: mysql-persistent-storage mountPath: /var/lib/mysql volumes: - name: mysql-persistent-storage persistentVolumeClaim: claimName: mysql-pv-claim ``` 这里使用MySQL 5.7 镜像,设置了 MySQL 的 root 密码,并将数据存储在前面创建的 PersistentVolumeClaim 中。 4. 创建一个 Service,用于访问 MySQL。可以使用以下 YAML 文件创建: ``` apiVersion: v1 kind: Service metadata: name: mysql-service spec: selector: app: mysql ports: - name: mysql port: 3306 targetPort: 3306 clusterIP: None ``` 这里创建了一个 ClusterIP 类型的 Service,用于在 Kubernetes 集群内部访问 MySQL。 完成上述步骤后,即可在 Kubernetes 中部署 MySQL

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值