본문 바로가기

백앤드/Kubernetes

[Kubernetes] GitLab Container Registry와 연동

반응형

GitLab CI/CD를 설정하여 코드 커밋과 동시에 배포 될 수 있도록 설정하는 포스팅을 올린적이 있습니다.

[GitLab] GitLab에서 CI/CD 설정하기 - 서버 설정편 #1 (tistory.com)

 

[GitLab] GitLab에서 CI/CD 설정하기 - 서버 설정편 #1

[GitLab] GitLab에서 CI/CD 설정하기 - 서버 설정편 #1 GitLab과 GitHub의 설정은 거의 비슷하다고 보면 됩니다. 각 사이트마다 매뉴얼이 있어서 매뉴얼 보면되고, 이 블로그이서는 GitLab을 기준으로 소개하

dev-box.tistory.com

 

사실 CI/CD를 완성하면서 GitLab Container Registry를 생성을 먼저하고, 그 다음 단계가 이 포스팅 주제인 GitLab Container Registry와 연동하는 부분입니다.

 

하지만... 지금 안적으면 연동하는 방법을 까먹을 것 같기 때문에, 어쩔 수 없이 먼저 작성을 하게 되었습니다.

이 후에 다시 짬내서 GitLab Container Registry 생성하는 포스팅도 작성해보겠습니다.

 

1. Deploy Token 생성

쿠버네티스에서 서비스를 생성하고, 어플리케이션을 배포하기 전에 GitLab 에서 Deploy Token 을 먼저 생성해야합니다.

GitLab 좌측에 있는 메뉴에서 Settings > Repository 로 화면을 이동합니다. 

 

그러면 아래 사진처럼 모두 접혀있는 상태로 큰 카테고리들이 보이게 됩니다. 여기서 Deploy Tokens 를 Expand를 해서 확장해서 배포 토큰을 생성하도록 하겠습니다.

 

위 사진처럼 입력을 하도록 합니다. 항목 하나씩 자세하게 설명해보면...

 

1-1. New Token Info

Name : 배포 토큰의 이름을 지정하는 것으로 반드시 입력해야합니다. 이후 쿠버네티스에서 시크릿키를 생성할 때 사용됩니다.

Expiration date : 배포 토큰의 유효기간을 입력할 수 있습니다. 입력하지 않으면 유효기간은 무제한으로 설정되어 토큰이 생성됩니다.

Username : 지금 생성하는 배포 토큰을 사용하는 계정 또는 유저이름을 입력합니다. 입력하지 않는 경우에는 랜덤으로 생성됩니다. 이 값은 쿠버네티스에서 시크릿 키를 생성할 때 사용됩니다.

 

1-2. Scopes

쿠버네티스에서 Registry 에 접근할 수 있는 권한을 설정하는데, 쿠버네티스에서 임의로 수정하게 되면 문제가 발생할 수 있어서 우선 이 포스팅에서는 읽기 권한만 부여하였습니다.

 

1-3. 생성 완료

생성이 완료되면 이렇게 나타나게 됩니다. 아래에 있는 해시값처럼 표현된 값은 2. Kubernetes Secret Token 을 생성할 때 사용될 비밀번호입니다. 이 비밀번호는 지금 별도로 저장해두지 않으면 이후에는 다시 확인이 불가능하며 절대 찾을 수 없습니다.

 

2. Kubernetes Secret Token 생성

kubectl create secret \
docker-registry {시크릿 키 이름} \
--docker-server=https://registry.gitlab.com \
--docker-username=wisenut \
--docker-password={Deploy Token 생성 후 발급된 비밀번호} -n darkdata

 

3. Kubernetes Deploy yaml 파일 생성

이번엔 OS 로 접속해서 파일을 생성하고 배포를 하는 단계입니다.

 

kind: Deployment
apiVersion: apps/v1
metadata:
  name: darkdata-frontend
  namespace: darkdata
  labels:
    app: darkdata-frontend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: darkdata-frontend
  template:
    metadata:
      labels:
        app: darkdata-frontend
    spec:
      containers:
      - name: darkdata-frontend
        image: {Container Registry 주소}:{태그명}
        imagePullPolicy: Always
      imagePullSecrets:
      - name: darkdata-frontend

OS에 접속하여 경로는 어디에 생성해도 상관없습니다. 유지보수하려면 경로 관리 이쁘게 잘하셔야겠죠 :)

이 포스팅에서는 deploy-darkdata-frontend.yaml 로 생성하였습니다.

 

주요 부분만 설명을 하면 ...

metadata.name : 배포할 컨테이너의 이름을 지정합니다.

metadata.namespace : 서비스 공간을 의미하며, 하나의 네임스페이스에 여러개의 컨테이너 레지스트리가 배포될 수 있습니다.

metadata.labels.app : 배포할 컨테이너의 어플리케이션이 지정될 이름입니다.

spec.selector.matchLabels.app : 배포할 컨테이너의 어플리케이션 이름을 검색하는 이름...? (개념 정리가 덜 됬어요..)

spec.template.metadata.labels.app : 배포할 컨테이너의 묶음 템플릿 이름을 지정합니다.

spec.template.spec.containers.name : 배포할 컨테이너의 이름을 지정합니다.

spec.template.spec.containers.image : 배포할 컨테이너의 레지스트리 URL을 지정합니다.

spec.template.spec.containers.imagePullPolicy: Always | IfNotPresent | Never

spec.template.spec.containers.imagePullSecrets.name : Kubernetis Secret Token 생성할 때, 지정한 시크릿 키 이름을 입력해야합니다.

 

kubectl create -f deploy-darkdata-frontend.yaml

이렇게 입력이 완료된 yaml 파일을 배포를 하는 명령어를 실행합니다.

 

4. Kubernetes Service yaml 파일 생성

이번엔 배포 설정파일에 이어서, 서비스를 생성하는 단계입니다.

apiVersion: v1
kind: Service
metadata:
  namespace: darkdata
  name: darkdata-frontend
  labels:
    app: darkdata-frontend
spec:
  type: NodePort
  ports:
  - port: 3000
    targetPort: 3000
    nodePort: 31112
    protocol: TCP
  selector:
    app: darkdata-frontend

OS에 접속하여 경로는 어디에 생성해도 상관없습니다. 유지보수하려면 경로 관리 이쁘게 잘하셔야겠죠 :)

이 포스팅에서는 service-darkdata-frontend.yaml 로 생성하였습니다.

 

주요 부분만 설명을 하면 ...

 

metadata.name : 배포할 컨테이너의 이름을 지정합니다.

metadata.namespace : 서비스 공간을 의미하며, 하나의 네임스페이스에 여러개의 컨테이너 레지스트리가 배포될 수 있습니다.

metadata.labels.app : 배포할 컨테이너의 어플리케이션이 지정될 이름입니다.

spec.selector : 3. Kubernetes Deploy yaml 에서 지정했던 컨테이너 이름을 찾아 이 설정을 합니다.

spec.type : NodePort = 포트포워딩을 설정합니다.

spec.ports.port : Kubernetis Service 에 접근할 수 있는 포트를 지정합니다.

spec.ports.targetPort : 실제 어플리케이션에 접근할 수 있는 포트를 입력합니다.

spec.ports.nodePort : 완전 독립된 외부에서 접속할 수 있는 포트를 지정합니다.

spec.ports.protocol : 접속할 때 사용할 프로토콜을 입력합니다. 대부분 TCP를 사용합니다.

 

kubectl create -f deploy-darkdata-frontend.yaml

이렇게 입력이 완료된 yaml 파일을 배포를 하는 명령어를 실행합니다.

 

이렇게까지 입력을 모두 마치면 빌드 작업이 완료되고 어플리케이션이 실행이 완료가 되었을 때, http://localhost:31112 를 접속해보면 정상적으로 접속이 되는 것을 확인할 수 있습니다.

반응형

'백앤드 > Kubernetes' 카테고리의 다른 글

[Kubernetes] 설치하고, 실행하고, 종료하기  (0) 2023.04.14