모든 작업은 mysql 네임스페이스에서 진행하겠습니다.
Wordpress 와 MySQL 이 각각 다른 PVC 를 사용하도록 생성한다.
# wordpress
kind: PersistentVolume
apiVersion: v1
metadata:
namespace: mysql
name: pv0001
labels:
type: local
spec:
capacity:
storage: 25Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/data001/pv0001"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: mysql
name: mysql-volumeclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
---
# mysql
kind: PersistentVolume
apiVersion: v1
metadata:
namespace: mysql
name: pv0002
labels:
type: local
spec:
capacity:
storage: 25Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/data001/pv0002"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: mysql
name: wordpress-volumeclaim
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
kubectl apply -f pv.yaml
mysql root 패스워드를 mysql-password 라는 secret object 에 저장한다.
kubectl create secret generic mysql-password --from-literal='password=admin' --namespace="mysql"
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: mysql
name: mysql
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- image: mysql:5.6
name: mysql
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-password
key: password
- name: MYSQL_DATABASE # 구성할 database명
value: k8sdb
- name: MYSQL_USER # database에 권한이 있는 user
value: k8suser
- name: MYSQL_ROOT_HOST # 접근 호스트
value: '%'
- name: MYSQL_PASSWORD # database에 권한이 있는 user의 패스워드
value: admin
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-persistent-storage
persistentVolumeClaim:
claimName: mysql-volumeclaim
앞에서 생성한 MySQL 컨테이너를 노출하기 위해 서비스를 생성하고 뒤에서 생성할 Wordpress 컨테이너가 접근할 수 있도록 설정한다.
wordpress pod 배포 파일에는 MySQL 접근이 가능한 정보가 포함되어야 한다.
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: mysql
name: wordpress
labels:
app: wordpress
spec:
replicas: 1
selector:
matchLabels:
app: wordpress
template:
metadata:
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
env:
- name: WORDPRESS_DB_HOST
value: mysql:3306
- name: WORDPRESS_DB_NAME
value: k8sdb
- name: WORDPRESS_DB_USER
value: k8suser
- name: WORDPRESS_DB_PASSWORD
value: admin
ports:
- containerPort: 80
name: wordpress
volumeMounts:
- name: wordpress-persistent-storage
mountPath: /var/www/html
volumes:
- name: wordpress-persistent-storage
persistentVolumeClaim:
claimName: wordpress-volumeclaim
Node IP 와 Node Port 를 통해 접근할 수 있도록 Wordpress 서비스를 접근하게끔 합니다.
Wordpress 가 기동된 Pod 의 노드 IP 와 Wordpress 서비스의 Node Port 로 웹 브라우저를 통해 접속한다.
Source Git