丝袜av在线观看|日本美女三级片在线播放|性欧美一区二区三区|小骚热免费国产视频|黑人va在线观看|女同国产91视频|五月丁香色播Av|国产凸凹视频一区二区|伊人电影久久99|国产成人无码一区二区观看

Kubernetes 實(shí)戰(zhàn),部署 WordPress 和 MySQL 集群

來(lái)自:素雅營(yíng)銷研究院

頭像 方知筆記
2025年07月04日 06:40

前言

在云原生時(shí)代,Kubernetes (k8s) 已成為容器編排的事實(shí)標(biāo)準(zhǔn)。本文將詳細(xì)介紹如何在 Kubernetes 集群上部署 WordPress 和 MySQL,構(gòu)建一個(gè)高可用、可擴(kuò)展的內(nèi)容管理系統(tǒng)。

環(huán)境準(zhǔn)備

在開(kāi)始部署前,請(qǐng)確保已具備以下條件:

  1. 可用的 Kubernetes 集群(Minikube、kubeadm 或云服務(wù)商提供的集群)
  2. kubectl 命令行工具已配置并能夠訪問(wèn)集群
  3. 基本的 Kubernetes 概念知識(shí)(Pod、Deployment、Service、PV/PVC 等)

部署 MySQL 數(shù)據(jù)庫(kù)

1. 創(chuàng)建 MySQL 密碼 Secret

我們需要安全地存儲(chǔ) MySQL 的 root 密碼:

# mysql-secret.yaml
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret
type: Opaque
data:
password: $(echo -n "yourpassword" | base64) # 替換為你的密碼

應(yīng)用配置:

kubectl apply -f mysql-secret.yaml

2. 創(chuàng)建 MySQL Deployment

# mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.7
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
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

3. 創(chuàng)建 MySQL 持久化存儲(chǔ)

# mysql-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mysql-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

4. 創(chuàng)建 MySQL Service

# mysql-service.yaml
apiVersion: v1
kind: Service
metadata:
name: mysql
spec:
ports:
- port: 3306
selector:
app: mysql
clusterIP: None

應(yīng)用所有 MySQL 配置:

kubectl apply -f mysql-pv.yaml
kubectl apply -f mysql-deployment.yaml
kubectl apply -f mysql-service.yaml

部署 WordPress

1. 創(chuàng)建 WordPress Deployment

# wordpress-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress
spec:
selector:
matchLabels:
app: wordpress
strategy:
type: Recreate
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress:latest
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: mysql
- name: WORDPRESS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-pv-claim

2. 創(chuàng)建 WordPress 持久化存儲(chǔ)

# wordpress-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: wordpress-pv-volume
labels:
type: local
spec:
storageClassName: manual
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/wordpress"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wordpress-pv-claim
spec:
storageClassName: manual
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

3. 創(chuàng)建 WordPress Service

# wordpress-service.yaml
apiVersion: v1
kind: Service
metadata:
name: wordpress
spec:
ports:
- port: 80
selector:
app: wordpress
type: LoadBalancer

應(yīng)用所有 WordPress 配置:

kubectl apply -f wordpress-pv.yaml
kubectl apply -f wordpress-deployment.yaml
kubectl apply -f wordpress-service.yaml

驗(yàn)證部署

  1. 檢查 Pod 狀態(tài):
kubectl get pods
  1. 獲取 WordPress 訪問(wèn)地址:
kubectl get services wordpress

如果使用 Minikube,可以通過(guò)以下命令獲取訪問(wèn) URL:

minikube service wordpress --url

高級(jí)配置選項(xiàng)

1. 使用 Ingress 暴露服務(wù)

# wordpress-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: wordpress-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: wordpress.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: wordpress
port:
number: 80

2. 配置 Horizontal Pod Autoscaler

# wordpress-hpa.yaml
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: wordpress-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: wordpress
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50

故障排查

  1. 查看 Pod 日志:
kubectl logs <wordpress-pod-name>
  1. 檢查 PersistentVolume 狀態(tài):
kubectl get pv
kubectl get pvc
  1. 進(jìn)入 Pod 進(jìn)行調(diào)試:
kubectl exec -it <pod-name> -- /bin/bash

總結(jié)

通過(guò) Kubernetes 部署 WordPress 和 MySQL 提供了以下優(yōu)勢(shì):

  • 高可用性:通過(guò) ReplicaSet 確保應(yīng)用始終運(yùn)行
  • 可擴(kuò)展性:輕松擴(kuò)展 WordPress 實(shí)例數(shù)量
  • 持久化存儲(chǔ):確保數(shù)據(jù)不會(huì)因容器重啟而丟失
  • 服務(wù)發(fā)現(xiàn):Kubernetes DNS 自動(dòng)解析服務(wù)名稱

這種部署方式適合生產(chǎn)環(huán)境使用,可以根據(jù)實(shí)際需求進(jìn)一步優(yōu)化配置,如添加監(jiān)控、日志收集和安全策略等。