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
-
官方配置文件部署mysql容器组
kubectl create -f https://k8s.io/examples/application/wordpress/mysql-deployment.yaml
-
附官方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
-
官方配置文件部署wordpress容器组
kubectl create -f https://k8s.io/examples/application/wordpress/wordpress-deployment.yaml
-
附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