Kubernetes wordpress&mysql deploy

leliko·2021년 5월 2일
0

클라우드 엔지니어

목록 보기
51/53

kubernetes에 wordpress와 mysql을 배포하는 미니 프로젝트.

  • 조건
Wordpress
ReplicaSet: 2
NFS 스토리지 연결(Static Provision)
Service: LoadBalancer
MySQL
Pod
hostPath 스토리지 연결
Service: ClusterIP
  • mysql.yaml
---
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

nfs 볼륨 생성.

NFS 스토리지 서버: k8s-m1
sudo apt update
sudo apt install nfs-kernel-server
sudo vi /etc/exports
/nfs-volume *(rw,sync,no_subtree_check)
sudo mkdir /nfs-volume
sudo chmod -R 777 /nfs-volume
sudo exportfs -arv

사전에 window powershell로 vagrant를 설치하여 virtual box에 vm구성하여 쿠버네티스 실습환경을 조성하였다. 마스터 노드인 k8s-m1 노드에 nfs파일시스템 생성함.

NFS 클라이언트: w1, w2, w3에 배포하는 앤서블

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 창 실행 성공.

profile
클라우드 엔지니어 지망자

0개의 댓글