方法一:nodePort + haproxy 外网访问 WordPress
1. 创建 StorageClass、Namespace 和 pvc 资源
1.1 创建 StorageClass
- 创建命令
$ kubectl create -f sc.yaml
$ kubectl get sc
NAME PROVISIONER AGE
wordpress-sc-001 cds/nas 30m
- sc.yaml 内容如下
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: wordpress-sc-001
provisioner: cds/nas
parameters:
archiveOnDelete: "false"
server: "164.52.43.137" # 替换为集群配置的存储NAS云盘ip地址
path: "/nfsshare/wordpress" # 目录可自行修改为 /nfssahre/<dirName>
vers: "4.0"
mode: "777"
reclaimPolicy: "Delete"
1.2 创建Namespace 和 pvc
- 创建命令
$ kubectl create -f wordpress-storageclass-pvc.yaml
- wordpress-storageclass-pvc.yaml 内容如下
apiVersion: v1
kind: Namespace
metadata:
name: wordpress
labels:
app: wordpress
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pv-claim
namespace: wordpress
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: wordpress-sc-001
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: wp-pv-claim
namespace: wordpress
labels:
app: wordpress
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: wordpress-sc-001
2. 部署MySQL容器组
- 创建一个Secret变量存放MySQL密码
$ kubectl create secret generic mysql-pass --from-literal=password=<YOUR_PASSWORD> -n <NAMESPACE>
$ kubectl get secret -n wordpress
NAME TYPE DATA AGE
default-token-5k6fs kubernetes.io/service-account-token 3 43m
mysql-pass Opaque 1 41m
- 部署MySQL容器
$ kubectl create -f mysql-deployment.yaml
- mysql-deployment.yaml 内容如下
apiVersion: v1
kind: Service
metadata:
name: wordpress-mysql
namespace: wordpress
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
namespace: wordpress
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
- 检查MySQL部署情况
$ kubectl get deployment -n wordpress
NAME READY UP-TO-DATE AVAILABLE AGE
wordpress-mysql 1/1 1 1 39m
$ kubectl get pods -n wordpress
NAME READY STATUS RESTARTS AGE
wordpress-mysql-5b697dbbfc-5rwrl 1/1 Running 0 39m
3. 部署WordPress容器组
- 部署命令
$ kubectl create -f wordpress-deployment.yaml
- wordpress-deployment.yaml 内容如下
apiVersion: v1
kind: Service
metadata:
name: wordpress
namespace: wordpress
labels:
app: wordpress
spec:
type: NodePort # 设置 NodePort 方式访问 Wordpress
ports:
- port: 80
targetPort: 80
nodePort: 30080 # 设置映射端口为 30080
selector:
app: wordpress
tier: frontend
---
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
name: wordpress
namespace: wordpress
labels:
app: wordpress
spec:
selector:
matchLabels:
app: wordpress
tier: frontend
strategy:
type: Recreate
template:
metadata