Kubernetes - Wordpress + MySQL 연동

FromCloud·2023년 6월 22일
0

Kubernetes & Docker

목록 보기
12/12

같은 노드에서 컨테이너 실행


---
apiVersion: v1
kind: Pod
metadata:
  name: word-rep
  namespace: 1team
  labels:
    run: myword
spec:
  containers:
  - name: word
    image: wordpress:5.6
    imagePullPolicy: IfNotPresent
    env:
    - name: WORDPRESS_DB_HOST
      value: word-rep
    - name: WORDPRESS_DB_NAME
      value: wordpress
    - name: WORDPRESS_DB_USER
      value: root
    - name: WORDPRESS_DB_PASSWORD
      value: It12345!
    ports:
    - containerPort: 80
  - name: mysql
    image: mysql:5.7
    imagePullPolicy: IfNotPresent
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: It12345!
    - name: MYSQL_DATABASE
      value: wordpress
    - name: MYSQL_ROOT_HOST
      value: '%'
    ports:
    - containerPort: 3306





kubectl get svc -n 1team

이것은 한 노드에다가 연동을 진행 한것이다 도커에서도 wordpress, Mysql을 실행하기 위해서 환경변수를 주었던 기억이 있다 쿠버네티스도 마찬가지이다

env라는 환경변수 밑에 namevalue를 올바르게 넣어주면된다

만약 다른 노드에 배치가 되어있다면 WORDPRESS_DB_HOST에 데이터베이스의 IP를 적어줘야하지만 현재는 같은 노드에 있기 때문에 생성된 컨테이너의 이름을 넣어줘도 실행이 된다

하지만 만약 서버를 구축할때 wordpress 와 mysql을 같이 구축한다는 것은 아주 무서운 일이니 이렇게 생성하는 것은 최대한 지양을 해야한다

kubectl apply -f word_sql.yml 명령어를 입력하여 실행을 한다

kubectl get pod -n 1team --show-labels 설정된 라벨을 expose할때 옵션으로 사용하기에 편하게 하기 위해서 미리 확인을 한다

kubectl expose po word-rep -n 1team --type=NodePort -l run=myword
-> 1team에 있는 word-rep 이라는 컨테이너에 run=myword 라는 라벨을 가지고 있는 아이를 NodePort 를 통해서 외부로 통신하기 위해서 서비스 해준다

kubectl get svc -n 1team 로 확인을 하면 1team에 있는 서비스를 출력해주고 거기에 포트번호가 적혀있는 것을 확인 할 수 있다

다른 노드에서 컨테이너 실행

#mysql
---
apiVersion: v1
kind: Pod
metadata:
  name: mysql
  labels:
    app: mysql
spec:
  nodeName: node2
  containers:
  - name: mysql
    image: mysql:5.7
    imagePullPolicy: IfNotPresent
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: It12345!
    - name: MYSQL_DATABASE
      value: wordpress
    - name: MYSQL_ROOT_HOST
      value: '%'
   ports:
   - containerPort: 3306


#word
---
apiVersion: v1
kind: Pod
metadata:
  name: wordpress
  labels:
    app: word
spec:
  nodeName: node1
  containers:
  - name: wordpress
    image: wordpress:5.6
    imagePullPolicy: IfNotPresent
    env:
    - name: WORDPRESS_DB_HOST
      value: 10.36.0.1
    - name: WORDPRESS_DB_NAME
      value: wordpress
    - name: WORDPRESS_DB_USER
      value: root
    - name: WOREPRESS_DB_PASSWORD
      value: It12345!
    ports:
    - containerPort: 80

다른 노드에서 실행을 한다면 먼저 mysql의 IP주소를 알아야한다
그러기 위해선 mysql을 먼저 실행을 하고 wordpress를 실행하는 순서가 되어야 한다

kubectl get po -o wide를 이용하여 한번에 IP를 확인한 후에 mysql IP를 적어준다 두개다 잘 실행되고 있는 모습이다

같은 노드에서 실행하는 것과 크게 다를 것은 없지만 차이점이 있다면 매니페스트파일에 nodeName을 추가해준것 그리고 WORDPRESS_DB_HOST에 mysql IP 주소를 입력해준것

mysql과 wordpress를 실행시켜주고 외부에서 확인을 하기 위해선 wordpress를 expose 해주어야한다

kubectl expose po wordpress --type=NodePort -l app=word 역시나 동일하게 NodePort를 이용하여 외부로 통신 접속을 해보면

정상적으로 웹사이트가 잘 나오는 모습을 확인 할 수 있다

profile
매일 발전하는 Cloud Engineer

0개의 댓글