参考文件 https://kubernetes.io/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/
今天将会透过 kustomize 来布署 WordPress 以及 MySQL
由於这边是使用 local 的 minikube
所以对於 PersistentVolumeCliams 将会使用 hostPath 这种 StorageClass
1 建立 PersistentVolumClaims 与 PersistentVolume
2 建立 kustomization.yaml 里面设定下面几个资源:
3 利用 kustomization.yaml 布署整个环境
4 清除布署
MySQL 跟 WordPress 都需要 PersistentVolume 来储存资料
而这两个的 PersistentVolumeClaim 都会在各自的 Deployment 档案来宣告
关於 PersistentVolume 这边是透过 StorageClass 来处理
如同之前章节 day12 Persisting Data in K8s with Volumes 所描述
StorageClass 就是由 k8s Administrator 预先定义好的 Storage 配置方式, 当 Deployment 发出 PersistentVolumeClaim, k8s cluster 就会自动配置 PersistentVolume 给 PersistentVolumeClaim 元件让 Deployment 使用
而在 local cluster 预设是使用 hostPath 的 StorageClass
使用 hostPath 这种 StorageClass, k8s cluster 会把资料存放在 Pod 所在结点的 /tmp 资料夹, 而当 Pod 死掉在其他结点启动或是结点重启都会让资料消失
因此 hostPath 只适合用来测试环境
首先设定 secretGenerator 来建立 Secret
这个 Secret 会用在 MySQL 跟 WordPress 的 Deployment 内 如下:
secretGenerator:
- name: mysql-pass
literals:
- password=mypassword
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
设定一个内部 Service 给 mysql-wordpress
设定 PersistentVolumeClaim 给名称为 mysql-pv-claim 并且设定容量为 20Gi
建立一个 Depylotment
名称设定为 mysql-wordpress
设定 Deployment 使用 mysql-pv-claim 并且挂载在 /var/lib/mysql
设定 Deployment 使用 image: mysql:5.6
设定 Deployment 从 Secret mysql-pass 带入 password 值到环境变数 MYSQL_ROOT_PASSWORD
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
设定一个外部 Service 给 wordpress
设定 PersistentVolumeClaim 给名称为 wp-pv-claim 并且设定容量为 20Gi
建立一个 Depylotment
名称设定为 wordpress
设定 Deployment 使用 wp-pv-claim 并且挂载在 /var/www/html
设定 Deployment 使用 image: wordpress:4.8-apache
设定 Deployment 从 Secret mysql-pass 带入 password 值到环境变数 WORDPRESS_DB_PASSWORD
设定 Deployment Container 环境变数 WORDPRESS_DB_HOST = wordpress-mysql
新增 mysql-deployment.yaml 与 wordpress-deployment.yaml 到 kustomization.yaml 如下
secretGenerator:
- name: mysql-pass
literals:
- password=mypassword
resources:
- mysql-deployment.yaml
- wordpress-deployment.yaml
在与 kustomization.yaml 同一个资料夹下
利用以下指令做布署:
kubectl apply -k ./
透过以下指令验证 Secret 布署
kubectl get secrets
透过以下指令验证 PersistentVolumeCliam 布署
kubectl get pvc
透过以下指令验证 Pod 布署
kubectl get pod
透过以下指令验证 wordpress 对外的 Service 布署
kubectl get services wordpress
因为是 minikube 所以需要透过以下指令把 wordpress Service attach 到一个对外 IP
minikube service wordpress --url
透过这个对外 IP 我们就可以使用浏览器连线到 WordPress 了
透过 kustomization.yaml 可以使用以下指令清除所有布署
kubectl delete -k ./
<<: [从0到1] C#小乳牛 练成基础程序逻辑 Day 22 - 泛型集合 List<T>
权责划分 续VoK整合登入 当使用者登入系统後,无论是因为使用者权责亦或是为了系统安全,通常会建立适...
说到学习资源,最容易学习的方式就是从母语开始 中文文章 Jerry Hong 的部落格 Jerry ...
前言 Laravel有帮你做好会员登入系统的模组,如果有需要的话,可以快速生成。 但详细的运作细节我...
到今天最大的困难,好像变成了想主题要写什麽。 来介绍一下做出一个元件後,基本上可以衍伸的思考可能会有...
通常一个活动,最後登场的都是主角吧?理应如此,笔者记得有一年的金马奖颁奖典礼,主办单位不知道哪根筋打...