【K8s教程】示例:使用 Persistent Volumes 部署 WordPress 和 MySQL
參考:https://kubernetes.io/zh/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/
警告:deployment 在生產場景中並不適合,它使用單例項 WordPress 和 MySQL Pods。考慮使用 WordPress Helm Chart 在生產場景中部署 WordPress。
https://github.com/bitnami/charts/tree/master/bitnami/wordpress
建立 PersistentVolumeClaims 和 PersistentVolumes
警告:
在本地群集中,預設的 StorageClass 使用hostPath供應器。 hostPath卷僅適用於開發和測試。使用 hostPath 卷,您的資料位於 Pod 排程到的節點上的/tmp中,並且不會在節點之間移動。如果 Pod 死亡並被排程到群集中的另一個節點,或者該節點重新啟動,則資料將丟失。
建立 kustomization.yaml
建立 Secret 生成器
A Secret 是儲存諸如密碼或金鑰之類的敏感資料的物件。從 1.14 開始,kubectl支援使用 kustomization 檔案管理 Kubernetes 物件。您可以通過kustomization.yaml中的生成器建立一個 Secret。
通過以下命令在kustomization.yaml中新增一個 Secret 生成器。您需要用您要使用的密碼替換YOUR_PASSWORD。
cat <<EOF >./kustomization.yaml secretGenerator: - name: mysql-pass literals: - password=YOUR_PASSWORD EOF
補充 MySQL 和 WordPress 的資源配置
以下 manifest 檔案描述了單例項 MySQL 部署。MySQL 容器將 PersistentVolume 掛載在/var/lib/mysql。 MYSQL_ROOT_PASSWORD環境變數設定來自 Secret 的資料庫密碼。
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
以下 manifest 檔案描述了單例項 WordPress 部署。WordPress 容器將網站資料檔案位於/var/www/html的 PersistentVolume。WORDPRESS_DB_HOST環境變數集上面定義的 MySQL Service 的名稱,WordPress 將通過 Service 訪問資料庫。WORDPRESS_DB_PASSWORD環境變數設定從 Secret kustomize 生成的資料庫密碼。
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
補充到 kustomization.yaml 檔案。
cat <<EOF >>./kustomization.yaml
resources:
- mysql-deployment.yaml
- wordpress-deployment.yaml
EOF
應用
kustomization.yaml包含用於部署 WordPress 網站的所有資源以及 MySQL 資料庫。您可以通過以下方式應用目錄
kubectl apply -k ./
清理現場
執行一下命令刪除您的 Secret,Deployments,Services and PersistentVolumeClaims:
kubectl delete -k ./
作者:Varden
出處:http://www.cnblogs.com/varden/
本文內容如有雷同,請聯絡作者!
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。