1 2 3 4 5 6 $ kubectl version --short Client Version: v1.21.3 Server Version: v1.21.2 $ kubectl get node -o wide NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME minikube Ready control-plane,master 4d v1.21.2 192.168.49.2 <none> Ubuntu 20.04.2 LTS 5.10.47-linuxkit docker://20.10.7
编写以下三个yaml文件:mysql-deployment.yaml, wordpress-deployment.yaml, kustomization.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 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 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 apiVersion: v1 kind: Service metadata: name: wordpress labels: app: wordpress spec: ports: - port: 80 selector: app: wordpress tier: frontend type: LoadBalancer --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: wp-pv-claim labels: app: wordpress spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi --- apiVersion: apps/v1 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
1 2 3 4 5 6 7 8 secretGenerator: - name: mysql-pass literals: - password=123 resources: - mysql-deployment.yaml - wordpress-deployment.yaml
Apply and Verify:
1 2 3 4 5 6 7 8 9 10 $ kubectl apply -k ./ secret/mysql-pass-5kd6m6b97h created service/wordpress created service/wordpress-mysql created persistentvolumeclaim/mysql-pv-claim created persistentvolumeclaim/wp-pv-claim created deployment.apps/wordpress created deployment.apps/wordpress-mysql created $ minikube service wordpress --url
Cleaning up:
1 2 3 4 5 6 7 8 $ kubectl delete -k ./ secret "mysql-pass-5kd6m6b97h" deleted service "wordpress" deleted service "wordpress-mysql" deleted persistentvolumeclaim "mysql-pv-claim" deleted persistentvolumeclaim "wp-pv-claim" deleted deployment.apps "wordpress" deleted deployment.apps "wordpress-mysql" deleted
1 2 3 4 5 6 7 8 9 10 11 12 $ brew install helm $ helm version --short v3.6.3+gd506314 $ helm repo add bitnami https://charts.bitnami.com/bitnami $ helm search repo bitnami NAME CHART VERSION APP VERSION DESCRIPTION …… bitnami/wordpress 12.1.0 5.8.0 Web publishing platform for building blogs and ... $ kubectl create namespace wordpress-release $ kubectl -n wordpress-release get all No resources found in wordpress-release namespace. $ helm -n wordpress-release install wordpress bitnami/wordpress
1 2 打开minikube tunnel $ minikube tunnel
1 2 3 4 5 $ kubectl get svc --namespace wordpress-release -w wordpress $ export SERVICE_IP=$(kubectl get svc --namespace wordpress-release wordpress --template "{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}" ) $ echo "WordPress URL: http://$SERVICE_IP /" $ echo "WordPress Admin URL: http://$SERVICE_IP /admin"

Uninstalling the Chart
1 2 3 4 5 $ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-release default 1 2021-08-24 20:33:51.916101 +0800 CST deployed wordpress-12.1.0 5.8.0 $ helm delete my-release
References:
https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/
https://github.com/helm/charts/tree/master/stable/wordpress
Kubernetes helm charts 介绍 + 实例部署wordpress