12. 쿠버네티스 설치 및 배포

데일리·2024년 10월 17일
0
post-thumbnail

지난 글에 이어서 이번에는 로컬이 아닌 ip를 할당해 쿠버네티스를 배포해보록 하자

저번에는 local에 포트를 할당하여 연결했지만 이번에는 클러스터 ip를 할당하고 그 ip로 연결하는 방식을 통해 배포 해보도록 하고 특히 내부에서 nginx가 아닌 docker에서 이미지를 할당하고 그 이미지를 풀받아서 사용하는 방식으로 배포 해보는 점을 추가했다.

1. 도커 이미지 만들기

우선 이미지 서버를 만들기 위해 간단한 hello world를 response하는 웹 코드를 만들고 해당 코드를 도커 이미지로 만들기 위한 dockerFile 파일을 하나 만들어야 한다.

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80)
# Use an official Python runtime as a parent image
FROM python:3.9-slim

# Set the working directory in the container
WORKDIR /app

# Copy the current directory contents into the container
COPY . /app

# Install any needed packages specified in requirements.txt
RUN pip install flask

# Make port 80 available to the world outside this container
EXPOSE 80

# Define environment variable
ENV NAME World

# Run app.py when the container launches
CMD ["python", "app.py"]

위와 같은 코드를 만들고 이미지를 만들기 위해서는 아래 명령어로 빌드를 해야한다.

docker build -t <your-dockerhub-username>/myapp:latest .


여기서 주의 해야할 점은 mac m1을 사용하는 사람은 위 명령어로 하면 deploy할 때 에러가 뜬다 그래서 아래와 같은 명령어를 입력해야 한다.

 docker buildx build \
--platform linux/amd64,linux/arm64,linux/arm/v7 \
-t hello-test \
--push .

자세한 내용은 아래 포스팅을 참고해야한다... 이걸 까먹고 있어서 잠시 또 삽질을 해버렸다는.....

그렇게 이미지 빌드가 잘됬나 확인을 해보기 위해서는 docker hub에 들어가서 내가 빌드한 이미지가 잘있는지 확인해보면된다.

2. deployment 생성

그러면 이제 빌드한 이미지를 풀받아 deployment를 생성해보자

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: <your-dockerhub-username>/myapp:latest
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: NodePort 

위와 같이 deployment 코드를 만들어주고 해당 코드를 적용해주어야 한다.

kubectl apply -f myapp-deployment.yaml

그렇게 적용을 해주었으면 서비스와 deployment, pods들이 생겨난 것을 볼 수 있다.

해당 코드를 보면 pod 생성 코드가 없는데 왜 pods이 생겼나 의문이 들 수 있다.

이유는 deployment의 replica 설정에서 볼 수 있는데 해당 설정이 최소 pod을 유지 해주는 설정이기 때문에 2라고 설정한 이상 pod은 2개가 유지되도록 설정한 것이다. 즉 pod이 하나가 삭제되면 다시 2개로 유지하기 위해 재생성된다는 의미이다.

이렇게 생성된 pod이 running상태로 돌아가고 있다면 이를 접속하기 위해서는 [node-ip]:[node-port] 방식으로 접근하면된다.

node ip를 보기 위한 명령어 
kubectl get nodes -o wide

node port를 보기 위한 명령어
kubectl get svc

위와 같이 명령어를 통해 ip와 포트를 알아냈다면 curl 명령어로 접근해보면 hello world가 잘 뜨는 것을 볼 수 있다~

확실히 이와 같은 경험을 하면서 회사에서 사용하는 배포가 이와 비슷하지만 이를 git action 및 다른 azure 및 젠킨스와 같은 서비스를 통해 자동화시켜 놓은것 뿐이라는 것을 알 수 있었다. 이렇게 배포까지 해보니 다음에는 git action과 자동화를 해보고 싶다는 생각이 드는데... 다음에는 이 주제로 찾아뵙겠습니다

profile
하루에 한편 씩 읽기 좋은 테크 로그

0개의 댓글