WordPress 是眾所周知的最受歡迎的博客工具之一。 它使用關係數據庫存儲內容:文章、涉及的元數據,而 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 存儲資產數據。
本教程將向您展示在 Linode 上的 Kubernetes 上使用 MySQL 數據庫安裝 WordPress 站點的單個副本的方法。
在 Linode 上設置 Kubernetes 集群
本節將介紹在 Kubernetes 上設置 Kubernetes 的所有步驟 linode.com. 首先,讓我們在 Linode 上註冊一個帳戶,然後登錄到 Linode Dashboard。 轉到 Kubernetes 子菜單,然後單擊右上角的“添加集群”按鈕並填寫字段:集群標籤,選擇合適的區域並選擇 Kubernetes 版本。
然後,讓我們為您的 Kubernetes 集群添加節點池。 在本教程中,我們將設置具有“專用 4GB”計劃的 1 節點集群,節點具有 4 GB RAM、2 個 CPU 和 80 GB 存儲。

最後,單擊“創建集群”以配置 Kubernetes 集群。

等待幾分鐘,Kubernetes 集群配置成功。 讓我們將 Kubeconfig 文件下載到您的本地機器,以便您可以方便地與集群交互。

在您的本地機器上,在 Home 目錄中創建一個名為 .kube 的文件夾,並將下載的文件移動到該文件夾中:
$ mkdir ~/.kube
$ mv wordpress-kubeconfig.yaml .kube/config
此外,您必須安裝 kubectl 工具:
$ curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
$ chmod +x kubectl
$ sudo mv kubectl /usr/local/bin
現在,您可以通過運行以下命令來獲取 Kubernetes 集群的信息:
$ kubectl get node
NAME STATUS ROLES AGE VERSION
lke11043-13758-5f73eca05dae Ready 5m v1.18.8
創建 PersistentVolume 和 PersistentVolumeClaim
WordPress 和 MySQL 都需要 PersistentVolume (PV) 來存儲數據。 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 獨立於應用程序 Pod 的生命週期。 當您重新啟動、重新安排或刪除 Pod 時,PV 和 PVC 仍會保留並保留數據。
首先,提供一個 PersistentVolume (PV),它將被 PersistentVolumeClaim (PVC) 聲明。 創建名為的清單文件 pvc-mysql-wp.yaml
如下:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
使用命令 kubectl apply 創建 PV:
$ kubectl apply -f pvc-mysql-wp.yaml
persistentvolumeclaim/mysql-pv-claim created
persistentvolumeclaim/wp-pv-claim created
驗證在創建 PVC 後是否自動配置了 PV:
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-658d8d2da7a241bd 20Gi RWO Retain Bound default/wp-pv-claim linode-block-storage-retain 5m
pvc-ca93cd86df0d49c8 20Gi RWO Retain Bound default/mysql-pv-claim linode-block-storage-retain 5m1s
為 MySQL 數據庫創建密碼
Kubernetes 使用 Secret 來存儲敏感數據,例如密碼或私鑰。
讓我們創建一個文件 secret.yaml
使用您最喜歡的編輯器,如下所示:
apiVersion: v1
kind: Secret
metadata:
name: mysql-pass
type: Opaque
data:
password: yourpassword
應用清單:
$ kubectl apply -f secret.yaml
secret/mysql-pass created
驗證密鑰是否已成功創建:
$ kubectl get secret
NAME TYPE DATA AGE
default-token-gcgp4 kubernetes.io/service-account-token 3 7h52m
mysql-pass Opaque 1 2m33s
部署 MySQL
您可以使用以下清單文件來創建 MySQL 的單實例部署。 PersistentVolume 將掛載在 /var/lib/mysql。
讓我們創建文件 mysql-deployment.yaml
:
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
labels:
app: wordpress
spec:
ports:
- port: 3306
selector:
app: wordpress
tier: mysql
clusterIP: None
---
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
然後,應用上述清單:
$ kubectl apply -f mysql-deployment.yaml
service/wordpress-mysql unchanged
deployment.apps/wordpress-mysql created
驗證 MySQL pod 是否已成功部署:
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
wordpress-mysql-57464b4779-vtjrf 1/1 Running 0 3m33s
部署 WordPress
您可以使用以下清單在 Kubernetes 集群上部署 WordPress。 WordPress 容器使用的 PersistentVolume 將掛載在 /var/www/html。
服務 wordpress 具有 LoadBalancer 類型,以便從集群外部訪問。
讓我們創建文件 wordpress-deployment.yaml
:
apiVersion: v1
kind: Service
metadata:
name: wordpress
labels:
app: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
tier: frontend
type: LoadBalancer
---
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
現在,讓我們運行以下命令來部署 WordPress:
$ kubectl apply -f wordpress-deployment.yaml
service/wordpress created
deployment.apps/wordpress created
驗證 WordPress 是否已啟動並正在運行:
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
wordpress-6857459697-wmgn9 1/1 Running 0 3m34s
wordpress-mysql-57464b4779-vtjrf 1/1 Running 0 32m
驗證所有服務是否正在運行:
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.128.0.1 443/TCP 12h
wordpress LoadBalancer 10.128.108.139 172.104.37.236 80:30567/TCP 5s
wordpress-mysql ClusterIP None 3306/TCP 29m
現在您可以通過服務 wordpress 的 EXTERAL-IP 訪問 WordPress 頁面。 讓我們複製它並粘貼到您的網絡瀏覽器:

結論
WordPress 是一個非常強大的博客工具,適用於任何內容創建者和開發者。 本教程完成了在 Linode 上創建 Kubernetes 集群並在其上設置 WordPress 頁面的所有步驟。
感謝您的閱讀,請在下面的評論部分留下您的建議。