k8s官方案例:部署WordPress+MySql个人博客

k8s官方案例:部署WordPress+MySql个人博客

步骤:

  • 创建PersistentVolumeClaims(PVC)和PersistentVolume(PV)
  • 创建Secret(注入MySql密码等)
  • 部署MySQL容器组(Deployment)
  • 部署WordPress容器组(Deployment)

创建PersistentVolumeClaims(PVC)和PersistentVolume(PV)

MySQL和WordPress都使用持久存储(PV)来存储数据。这里我们使用基于rook-ceph项目提供的RBD块存储(存储池),为MySQL和WordPress动态创建PV。rook-ceph部署上篇博客。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: mywordpress
   # StorageClass的名字,pvc调用时填的名字
provisioner: ceph.rook.io/block
parameters:
  pool: replicapool
  # Specify the namespace of the rook cluster from which to create volumes.
  # If not specified, it will use `rook` as the default namespace of the cluster.
  # This is also the namespace where the cluster will be
  clusterNamespace: rook-ceph
  # Specify the filesystem type of the volume. If not specified, it will use `ext4`.
  fstype: xfs
# 设置回收策略默认为:Retain
reclaimPolicy: Retain
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mysql-pv-claim
  labels:
    app: wordpress
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 20Gi
  storageClassName: mywordpress

创建资源对象

kubectl apply -f mywordpress-storageclass-pvc.yaml

指定一个Secret变量存放MySQL密码

Secrets用于存放敏感密码等数据,跟ConfigMap的配置方式极其相似。

kubectl create secret generic mysql-pass --from-literal=password=YOUR_PASSWORD

部署MySQL

  1. 官方配置文件部署mysql容器组

    kubectl create -f https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
    
  2. 附官方yaml清单文件:

    apiVersion: v1
    kind: Service
    metadata:
      name: wordpress-mysql
      labels:
        app: wordpress
    spec:
      ports:
        - port: 3306
      selector:
        app: wordpress
        tier: mysql
      clusterIP: None
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
      labels:
        app: wordpress
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: wordpress-mysql
      labels:
        app: wordpress
    spec:
      selector:
        matchLabels:
          app: wordpress
          tier: mysql
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: wordpress
            tier: mysql
        spec:
          containers:
          - image: mysql:5.6
            name: mysql
            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
    

部署WordPress

  1. 官方配置文件部署wordpress容器组

    kubectl create -f https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
    
  2. 附g官方yanl清单文件

    apiVersion: v1
    kind: Service
    metadata:
      name: wordpress
      labels:
        app: wordpress
    spec:
      type: NodePort
      ports:
        - port: 80
          nodePort: 8090
      selector:
        app: wordpress
        tier: frontend
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: wp-pv-claim
      labels:
        app: wordpress
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
    ---
    apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
    kind: Deployment
    metadata:
      name: wordpress
      labels:
        app: wordpress
    spec:
      selector:
        matchLabels:
          app: wordpress
          tier: frontend
      strategy:
        type: Recreate
      template:
        metadata:
          labels:
            app: wordpress
            tier: frontend
        spec:
          containers:
          - image: wordpress:4.8-apache
            name: wordpress
            env:
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql
            - name: WORDPRESS_DB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-pass
                  key: password
            ports:
            - containerPort: 80
              name: wordpress
            volumeMounts:
            - name: wordpress-persistent-storage
              mountPath: /var/www/html
          volumes:
          - name: wordpress-persistent-storage
            persistentVolumeClaim:
              claimName: wp-pv-claim
    

    浏览器访问http://node_ip:8090

猜你喜欢

转载自blog.csdn.net/weixin_42973226/article/details/86501693