매직코드
article thumbnail

쿠버네티스 안내서와 패스트캠퍼스 강의를 보고 작성한 포스팅입니다.

 

배포를 위한 yaml 파일 구조 확인

쿠바네티스를 컨테이너를 등록하고 관리하기 위해 pod이라는 오브젝트를 사용한다.

컨테이너 < pod < replica set < deployment 순으로 구성되어있음을 기억하면서 컨테이너 배포를 위한 pod을 생성해보자

 

 

apiVersion: v1			# 쿠바네티스 리소스의 api 버전
kind: Pod				# 쿠바네티스 리소스 이름 (내가 만들고자 하는것)
metadata:				# name, namespace, labels, annotations 등을 포함
  name: hello
  labels:
    app: hello
spec:					# 가장 중요 리소스의 설정 정보 입력
  containers:			# 컨테이너에 대한 정보를 입력하겠다
  - name: con_name		# 컨데이너 이름
    image: busybox		# 컨테이너의 이미지
    args:				# 해당 image의 entrypoint의 args로 입력하고 싶은것

yaml파일에 입력하는 정보는 위와 같은 방식으로 크게 apiVersion, kind, metadata, spec으로 구성되어있다.

그 내부에는 상황에 맞게 원하는 내용을 넣으면 되는데 아직 그정도 수준이 되지 않아서 다른 사람들이 만들어둔 코드를 가져와서 실습을 진행해보았다.

 

실습을 진행하기에 앞서 앞으로 쿠바네티스를 사용할 폴더를 먼저 만들어주고 터미널에서 그 위치로 이동해주면 좋다.

나는 바탕화면에 kube라는 폴더를 만들어두었다.

cd 뒤에 본인이 이동하고자 하는 위치 경로를 입력하면 된다.

# 디렉토리 이동
cd Desktop/kube

 


워드프레스 배포하기

아래 접혀있는 4가지의 yaml파일은 --- 를 이용해 하나의 파일로 저장할 수 있다.

첨부한 파일을 kube 실습을 진행할 폴더에 다운로드 받으면 된다.

wordpress-k8s.yml
0.00MB

 

<<접힌글은 아래 더보기를 클릭해서 열어보세요>>

더보기

아직 코드를 다 이해하지는 못했지만 해석이 가능한 부분만 설명해봤다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: mysql
  template:
    metadata:
      labels:
        app: wordpress
        tier: mysql
    spec:
      containers:
        - image: mariadb:10.7
          name: mysql
          env:
            - name: MYSQL_ROOT_PASSWORD
              value: password
          ports:
            - containerPort: 3306
              name: mysql

Deployment 생성 이름은 wordpress-mysql, 컨데이터 포트번호 3306 사용한다.

 

apiVersion: v1
kind: Service
metadata:
  name: wordpress-mysql
  labels:
    app: wordpress
spec:
  ports:
    - port: 3306
  selector:
    app: wordpress
    tier: mysql

Service 생성 서비스는 노드 내부에서 서로 다른 deployment에 접속할 수 있도록 한다.

Cluster IP를 가지고 있다. wordpress와 mysql 컨테이너를 서로 연결할 수 있도록 하는 것 같다.

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  selector:
    matchLabels:
      app: wordpress
      tier: frontend
  template:
    metadata:
      labels:
        app: wordpress
        tier: frontend
    spec:
      containers:
        - image: wordpress:5.5.3-apache
          name: wordpress
          env:
            - name: WORDPRESS_DB_HOST
              value: wordpress-mysql
            - name: WORDPRESS_DB_PASSWORD
              value: password
          ports:
            - containerPort: 80
              name: wordpress

워드프레스를 위한 deployment 생성

 

apiVersion: v1
kind: Service
metadata:
  name: wordpress
  labels:
    app: wordpress
spec:
  type: NodePort
  ports:
    - port: 80
  selector:
    app: wordpress
    tier: frontend

<< 접힌글은 위에 더보기를 클릭해서 열어보세요>>

 

보통은 파일을 다운받지 않고 직접 만들거나 url로 배포하는데 일단 둘 다 할 줄 알아야하기 때문에 두가지 코드 모두 적어봤다.

나는 다운로드 받은 파일을 적용하는 방법으로 쭉 실습한다.

# yaml 파일 적용
kubectl apply -f wordpress-k8s.yml

# (심화) url로 워드프레스 배포하기
kubectl apply -f https://subicura.com/k8s/code/guide/index/wordpress-k8s.yml

# 실행 결과 확인
kubectl get all

실행하면 위와 같은 사진이 나오는데, pod들이 잘 running중인지 확인한다.

너무 빠르게 결과를 확인하면 아직 ContainerCreating 상태로 나오기도 한다.

그리고 할당된 포트번호를 확인해본다. 나는 31387번으로 자동 할당되었다.

 

 

 

 

# 배포한 워드프레스로 접속하기
# docker를 사용하지 않는 경우
minikube ip

# docker를 사용하는 경우
minikube service wordpress

도커를 사용하는 경우에는 ip로 직접 들어가는 것이 아니라 deployment에 접근할 수 있는 service 이름을 통해서 접근할 수 있다.

이렇게 접근할 수 있는 이유는 yaml파일에 wordpress 접근을 위한 service를 생성하는 코드가 있기 때문이다.

이런 화면이 나왔다면 쿠바네티스를 이용한 어플리케이션 배포에 성공한것이다.

실습이 끝났다면 마무리가 중요하다.

 

# 터미널 명령어 창으로 돌아오기 맥북기준 command+c가 아니라 ctrl+c

# 워드프레스 리소스 제거
kubectl delete -f wordpress-k8s.yml

# url로 배포한경우 리소스 제거
kubectl delete -f https://subicura.com/k8s/code/guide/index/wordpress-k8s.yml

# minikube 종료
minikube stop

# 도커에서 minikube 삭제
minikube delete

도커 기반으로 minikube를 이용한다면 중단하는 stop 이외에 더이상 minikube를 실행할 일이 없고 실습이 끝났다면 공간 확보를 위해 minikube delete 명령어로 도커에 있는 미니큐브를 삭제해주면 된다. 나중에 다시 실습할 때에는 minikube start로 다시 도커에 미니큐브가 자동 연결되니 걱정하지 않아도 된다.

 

 

 

profile

매직코드

@개발법사

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!