모든 개발환경 구축이 끝이 났습니다.

이제 실제로 앱을 만들어 배포해 보도록 하겠습니다.



DashBoard 이용하여 앱 배포하기


포스팅의 촛점은 Production 환경에 맞추어져 있습니다.

private Registry 에 이미지를 올리고, 그것을 통해서 Deployment 한다는 가정으로 진행하겠습니다. :)




초간단 앱 만들고, 배포하기




먼저 초 간단 앱을 만들어서 배포해 봅시다. :)

nodejs 를 통해서 Hello World! 를 출력하는 앱을 만들겠습니다.



var os = require('http');
var handler = function(req, res) {
        res.writeHead(200);
        res.end('Hello World!');
}

var www = http.createServer(handler);
www.listen(8080);

을 server.js 라는 이름으로 저장합니다.

localhost:8080 으로 접속하면 "Hello World!"를 출력해주는 간단한 앱이 완성되었습니다.


배포를 위해서 Dockerfile 을 만들어 줍니다.

파일 이름을 Dockerfile 로 저장합니다. (다른 이름으로 해도 됩니다. 그러면 이후 build 시에 -f 플래그를 이용해서 파일명을 지정해 주어야 합니다.)



FROM node:carbon
EXPOSE 8080
COPY server.js .
CMD node server.js

이제 현재 폴더에는 두개의 파일이 있습니다.

앱 파일인 server.js 와 이미지 빌드를 위한 Dockerfile 파일입니다.



아래처럼 빌드를 합니다.


$ docker build -t registry.crystalcube.com/admin/testapp:v1 .


보시면 아시겠지만 registry.crystalcube.com/admin/testapp:v1 에서 : 앞부분에는 빌드할 이미지 이름입니다.

뒤에 따라오는 v1 은 TAG 명입니다.

private registry 를 사용한다면, 그곳에서 허용하는 규칙에 맞게 이름을 정하셔야 합니다.



만약 이미 빌드한 앱에 대해서 이미지:태그명을 변경하려면 아래처럼 하시면 됩니다.


$ docker tag {기존 이미지:태그} {새로운 이미지:태그}



이제 배포를 위해서 private registry 에 로그인을 합니다.

$ docker login registry.crystalcube.com


뒤에 따라오는 registry.crystalcube.com 에 사용하시는 registry 주소를 적어주시면 됩니다.

로그인을 성공적으로 마친 뒤에, 다음과 같이 배포하시면 됩니다.


$ docker push registry.crystalcube.com/admin/testapp:v1







Kubernetes 에 Docker Registry 를 위한 Secret 생성하기



프로젝트 관리차원(분리)에서 네임스페이스를 만들겠습니다.


$ kubectl create namespace {my-namespace}



이제 Kubernetes 에서 private registry 에 있는 이미지를 Pull 할 수 있도록, secret 을 만들어 주어야 합니다.

아래처럼 생성할 수 있습니다.


$ kubectl create secret docker-registry {NAME} --docker-server=registry.crystalcube.com --docker-username={ID} --docker-password={PASSWORD} --docker-email={EMAIL} -n {NAMESPACE}



{NAME} 에는 임의의 이름으로 정해주시면 됩니다.

{NAMESPACE} 에는 secret 을 저장/사용할 namespace 를 지정해 주면 됩니다.


생성이 완료되면 아래처럼 확인 할 수 있습니다.


kubectl get secret -n {my-namespace}

NAME                  TYPE                                  DATA      AGE

default-token-9w9vz   kubernetes.io/service-account-token   3         1h

crystalcube-secret    kubernetes.io/dockerconfigjson        1         35m






DashBoard 에서 앱 Deployment 하기



이제 모든 준비가 완료되었습니다.


Deployment 는 NODE 들에게 Docker 를 생성하도록 하는 과정이라고 보시면 됩니다. 말 그대로 배포과정입니다.

일반적으로 yaml 파일을 작성하여 Deployment 를 하는데, 저는 Dashboard 를 사용해서 해 보도록 하겠습니다.


추가적으로 말씀드리자면, 현재 버전의 Dashboard 에서는 디테일한 설정을 할 수 없습니다.

Deployment 이외에 Service 나 Ingress 등과 관련된 기능은 일부만 지원하거나 미지원 합니다.


어쨌든~

https://{apiserver-ip}:{port}/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

Dashboard 에 접속하여, 토큰을 가지고 로그인을 합니다.


우측 상단에 "+생성" 이라는 버튼을 누르고, 아래처럼 필드를 채워줍니다.




컨테이너 이미지에는 앞서 push 한 이미지의 주소를,

파드의 수는 원하는 pod 의 갯수를,

서비스에는 외부와 연결할 포트 번호를 넣어줍니다.


그리고 private registry 사용시 중요한 부분이 나옵니다.

네임 스페이스를 앞서 secret 을 추가했던 것으로 선택합니다.

그리고나서 그 밑에 '이미지 풀 시크릿' 을 눌러보면, 앞서 만들었던 secret 이 보입니다.

그것을 반드시 선택해 주어야 합니다.


하단에 배포 버튼을 누르면 끝이 납니다. :)




워크로드를 살펴보면, 정상적으로 Deployment 가 진행되는 것을 볼 수 있습니다.