microk8s - Docker 이미지 배포

Murphy·2023년 3월 8일
0

microk8s

목록 보기
2/2

microk8s에 docker 이미지를 배포하고 접근하는 내용에 대해서 이야기 하고자 한다. 사용된 docker 이미지는 Docker Hub에 공개되어 있는 http-echo 이미지 이다. 나중에 private registry를 이용한 개인이 빌드한 이미지를 배포를 진행하려고 하는데 Warm-up으로 시도해 보았다.

Deployment 생성하기

Public Registry

Docker Hub를 public registry라고 부른다. 로그인 하지 않아도 pull 요청은 가능 할 것 같은데 이미 계정을 가지고 있어 그냥 로그인 해 두었다. 로그인이 필요한 경우 아래와 같이 명령어를 입력하면 usernamepassword를 입력하라고 나온다. push의 경우 로그인을 해야 사용 할 수 있다.

> docker login

준비

배포를 위해서 YAML 파일을 하나 작성해야 한다. 먼저 http-echo의 설명을 보면 다음과 같이 사용하라고 안내 되어 있다.

> docker run -p 5678:5678 hashicorp/http-echo -text="hello world"

5678 포트를 통해 기본적으로 요청을 받고, 응답에 사용할 문자열을 -text=XXXXX 형식으로 제공해야 한다. 이 두 부분의 아래 설정의 argscontainerPort에서 확인 할 수 있다.

http-echo.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: http-echo-deployment
  labels:
    app: http-echo
spec:
  selector:
    matchLabels:
      app: http-echo
  template:
    metadata:
      labels:
        app: http-echo
    spec:
      containers:
      - name: http-echo
        image: hashicorp/http-echo
        args: ["-text=hello-world"]
        ports:
        - containerPort: 5678

생성하기

YAML을 기반으로 Deployment를 생성하기 위해서 다음의 명령어를 수행한다.

> microk8s kubectl apply -f http-echo.yaml
deployment.apps/http-echo-deployment created

실행 결과는 다음과 같이 명령어로 확인 할 수 있다. DeploymentPOD가 생성 되었다.

> microk8s kubectl get deployments
NAME                   READY   UP-TO-DATE   AVAILABLE   AGE
http-echo-deployment   1/1     1            1           69s

> microk8s kubectl get pods
NAME                                    READY   STATUS    RESTARTS   AGE
http-echo-deployment-64c676cb4c-4br6h   1/1     Running   0          107s

Local/Remote에서 접근하기

Deployment가 생성되어 배포는 완료되었다. 하지만 외부에서 http-echo에 접급할 방법이 아직 없다. 이를 위해서 외부에서 접근 가능하도록 설정을 추가해야 한다.

Service 생성

kubectl expose를 통해 service를 생성하고 외부에서 deployment에 접근 할 수 있다. service의 이름은 --name으로 지정할 수 있으며 --type 우선 참고자료를 따라 진행했다.

> microk8s kubectl expose deployment http-echo-deployment --type=NodePort --name=http-echo-service
service/http-echo-service exposed

생성된 service를 아래와 같이 확인 가능하다.

> microk8s kubectl get services
NAME                TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes          ClusterIP   10.152.183.1     <none>        443/TCP          5d23h
http-echo-service   NodePort    10.152.183.145   <none>        5678:32463/TCP   3m34s

확인하기

위에서 생성된 service를 통해서 http-echo에 접근해보자. microk8s kubectl get services를 통해서 http-echo-service는 32463 포트에 연결 되어 있음을 확인 할 수 있다. 또한 Dashboard를 통해서 위 설정 모두 확인 가능하다.

Local

curl를 통해서 요청을 보내면 지정한 응답이 오는 것을 확인 할 수 있다.

> curl http://localhost:32463
hello-world
Remote

microk8s가 설치된 PC가 아닌 다른 PC에서도 접속이 가능하다. 아래 응답은 Widows가 설치된 PC에서 curl을 통해 요청을 보낸 경우이다.

> curl 192.168.1.75:32463


StatusCode        : 200
StatusDescription : OK
Content           : hello-world

RawContent        : HTTP/1.1 200 OK
                    X-App-Name: http-echo
                    X-App-Version: 0.2.3
                    Content-Length: 12
                    Content-Type: text/plain; charset=utf-8
                    Date: Wed, 08 Mar 2023 10:36:40 GMT

                    hello-world

Forms             : {}
Headers           : {[X-App-Name, http-echo], [X-App-Version, 0.2.3], [Content-Length, 12], [Content-Type, text/plain; charset=utf-8]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 12

References

profile
Anything that can go wrong will go wrong.

0개의 댓글