Kubernetes 에서 MySQL 구성하기

snooby·2022년 8월 24일
2

🐳 Docker & K8S

목록 보기
33/51
post-thumbnail

모든 작업은 mysql 네임스페이스에서 진행하겠습니다.

1. PV & PVC 생성

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 

2. MySQL Root 패스워드 저장

mysql root 패스워드를 mysql-password 라는 secret object 에 저장한다.

kubectl create secret generic mysql-password --from-literal='password=admin' --namespace="mysql"

3. MySQL Pod 배포

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 

3. MySQL 서비스 생성

앞에서 생성한 MySQL 컨테이너를 노출하기 위해 서비스를 생성하고 뒤에서 생성할 Wordpress 컨테이너가 접근할 수 있도록 설정한다.

4. Wordpress Pod 배포

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 

5. Wordpress 서비스 배포

Node IP 와 Node Port 를 통해 접근할 수 있도록 Wordpress 서비스를 접근하게끔 합니다.

6. Wordpress 웹 접속 및 설정

Wordpress 가 기동된 Pod 의 노드 IP 와 Wordpress 서비스의 Node Port 로 웹 브라우저를 통해 접속한다.

Source Git

profile
데이터를 가치있게 다루고 싶은 개발자 🐥

0개의 댓글