Wordpress
ReplicaSet: 2
NFS 스토리지 연결(Static Provision)
Service: LoadBalancer
MySQL
Pod
hostPath 스토리지 연결
Service: ClusterIP
---
apiVersion: v1
kind: Service #wordpress와 연결하는 service. clusterip로 내부연결.
metadata:
name: mysql
labels:
app: mysql
spec:
type: ClusterIP #타입을 지정하지 않으면 clusterip지만 명시해놓기 위해 기록함.
selector:
app: mysql
ports:
- protocol: TCP
port: 3306
---
apiVersion: v1
kind: PersistentVolumeClaim #pvc. pv에 연결하여 mysql의 DB로 사용.
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: mysql-pv
---
apiVersion: v1
kind: PersistentVolume #pv. 실제적인 스토리지.
metadata:
name: mysql-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
hostPath: #hostpath.로컬볼륨을 퍼시스턴트 볼륨으로 생성하여 사용
path: /test #제대로 생성되는 확인하기 위해 디렉토리를 지정하여 생성
type: DirectoryOrCreate #디렉토리가 없으면 생성하는 옵션
---
apiVersion: v1
kind: Pod #pod. deploy가 배포하기 위해 편하기는 하지만 기초를 다지기 위해 pod로 배포.
metadata:
name: mysql
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: P@ssw0rd
- name: MYSQL_DATABASE
value: wpdb
- name: MYSQL_USER
value: wpuser
- name: MYSQL_ROOT_HOST
value: '%'
- name: MYSQL_PASSWORD
value: P@ssw0rd
ports:
- containerPort: 3306
protocol: TCP
volumeMounts:
- name: mysql-volume
mountPath: /var/lib/mysql #마운트되는 지점을 지정
volumes:
- name: mysql-volume
persistentVolumeClaim: #pvc 연결 지정.
claimName: mysql-pvc
---
apiVersion: v1
kind: Service #외부에 연결되도록 하는 LoadBalancer 서비스.
metadata:
name: wordpress
labels:
app: wordpress
spec:
type: LoadBalancer #로드밸런서
selector:
app: wordpress
ports:
- protocol: TCP
port: 80
---
apiVersion: apps/v1
kind: ReplicaSet #레플리카셋을 이용하여 2개 pod생성.
metadata:
name: wordpress
labels:
app: wordpress
spec:
replicas: 2
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: wpdb
- name: WORDPRESS_DB_USER
value: wpuser
- name: WORDPRESS_DB_PASSWORD
value: P@ssw0rd
volumeMounts:
- mountPath: /var/www/html
name: wordpress-pv
ports:
- protocol: TCP
containerPort: 80
volumes:
- name: wordpress-pv
persistentVolumeClaim:
claimName: wordpress-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim #pvc
metadata:
name: wordpress-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
volumeName: wordpress-pv
---
apiVersion: v1
kind: PersistentVolume #pv. nfs파일시스템 설정하여 볼륨 마운트.
metadata:
name: wordpress-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
nfs:
server: 192.168.201.11
path: /nfs-volume
사전에 window powershell로 vagrant를 설치하여 virtual box에 vm구성하여 쿠버네티스 실습환경을 조성하였다. 마스터 노드인 k8s-m1 노드에 nfs파일시스템 생성함.
ansible all -i kubespray/inventory/mycluster/inventory.ini -m apt -a 'name=nfs-common state=present' -b
kubernetes 내부에서 yaml 파일 실행
kubectl apply -f mysql.yaml kubectl apply -f word2.yaml watch -n1 -d kubectl get all -o wide watch -n1 -d kubectl get pv,pvc
이후
크롬 창을 열어 loadbalancer가 생성한 외부 ip 주소로 접속하여 wordpress 창 실행 성공.