於kubernets (k8s) 裝 wordpress,並將資料庫及相關檔案持久化(放實體路徑),
以下為執行的步驟
1.設定DB的環境變數
1) vi mydb_env
MYSQL_ROOT_PASSWORD=Redhat1!
TZ="Asia/Taipei"
2) 設定configmaps
kubectl create cm mydb-env –from-env-file=mydb_env
3) 查看configmaps設定結果
kubectl describe cm mydb-env
2.設定DB密碼-secret
1) 設定secret
kubectl create secret generic mydb-pwd –from-literal=MYSQL_ROOT_PASSWORD=Redhat1!
2) 查看secret
kubectl describe secret mydb-pwd
3.建mydb deployment未指定DB密碼,故啟動失敗
kubectl create deployment mydb --image=mariadb --port 3306
4.設定環境變數
1) 將deployment mydb設定檔存成檔案
kubectl get deployments mydb -o yaml > deployment_mydb.yaml
2) 設定環境變數
vi deployment_mydb.yaml
containers:
- image: mariadb
imagePullPolicy: Always
name: mariadb
ports:
- containerPort: 3306
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: mydb-pwd
- name: TZ
valueFrom:
configMapKeyRef:
key: TZ
name: mydb-env
3) 重建deployment
kubectl delete deployment mydb
kubectl apply -f deployment_mydb.yaml
註: 可直接由 kubectl edit deployments mydb 做編輯
5.將資料庫放在host server
1) 於host server建 /data/db (mkdir /data/db)
2) 設定hostPath: /data/db
vi deployment_mydb.yaml
containers:
- args:
- --character-set-server=utf8mb4
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
key: MYSQL_ROOT_PASSWORD
name: mydb-pwd
- name: TZ
valueFrom:
configMapKeyRef:
key: TZ
name: mydb-env
image: mariadb
imagePullPolicy: Always
name: mariadb
ports:
- containerPort: 3306
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/lib/mysql
name: mydb-data
volumes:
- name: mydb-data
hostPath:
path: /data/db
type: Directory
4) 重建deployment
kubectl delete deployment mydb
kubectl apply -f deployment_mydb.yaml
6.進入pod內操作並建立database wp
kubectl exec -it pod/mydb-5b9dbbbf54-6k8wl — bash
create database wp;
7.設定mydb service (不一定要做此項)
1) kubectl expose deployment mydb –port=3306
2) kubectl get svc => 預設為ClusterIP
3) kubectl edit svc mydb => 將type由ClusterIP改為NodePort
8.設定wordpress環境變數
1) vi wordpress_env
WORDPRESS_DB_NAME=wp
WORDPRESS_DB_USER=root
WORDPRESS_DB_HOST=mydb
WORDPRESS_DB_PASSWORD=Redhat1!
ServerName=localhost
2) 設定configmaps
kubectl create cm wordpress-env –from-env-file=wordpress_env
kubectl get cm wordpress-env
kubectl describe configmaps wordpress-env
9.建立wordpress application
1) 建myweb deployment
kubectl create deployment myweb --image=wordpress
2) 設定環境變數
containers:
- image: wordpress
imagePullPolicy: Always
name: wordpress
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
env:
- name: WORDPRESS_DB_NAME
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_NAME
name: wordpress-env
- name: WORDPRESS_DB_USER
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_USER
name: wordpress-env
- name: WORDPRESS_DB_PASSWORD
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_PASSWORD
name: wordpress-env
- name: ServerName
valueFrom:
configMapKeyRef:
key: ServerName
name: wordpress-env
- name: WORDPRESS_DB_HOST
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_HOST
name: wordpress-env
10.將檔案建在host server
1) 於host server建 /data/wordpress (mkdir /data/wordpress)
2) 設定hostPath: /data/wordpress
kubectl edit deployment myweb
containers:
- env:
- name: WORDPRESS_DB_NAME
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_NAME
name: wordpress-env
- name: WORDPRESS_DB_USER
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_USER
name: wordpress-env
- name: WORDPRESS_DB_PASSWORD
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_PASSWORD
name: wordpress-env
- name: ServerName
valueFrom:
configMapKeyRef:
key: ServerName
name: wordpress-env
- name: WORDPRESS_DB_HOST
valueFrom:
configMapKeyRef:
key: WORDPRESS_DB_HOST
name: wordpress-env
image: wordpress
imagePullPolicy: Always
name: wordpress
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/www/html
name: myweb-data
volumes:
- name: myweb-data
hostPath:
path: /data/wordpress
type: Directory
11.建wordpress service
kubectl expose deployment myweb –port=80
kubectl get svc => 預設為ClusterIP
kubectl edit svc myweb => 將type由ClusterIP改為NodePort












