K8S Cluster CICD 배포 (1/3)

Hyor·2024년 9월 9일
post-thumbnail

개요

IDC에 Docker-compose로 배포되어있던 NextJS를 사내 IDC에 구축된 K8S Cluster로 이관하는 업무를 맡아서 작업하고 이에 대한 내용을 기록한 내용입니다.

F/E K8S 구성

Secret 생성

마땅한 정책이 없어 우선은 각 네임스페이스 별로 시크릿을 생성하여 사용하기로하여 생성하였습니다. (도커 레지스트리에서 pull 하기위한 계정정보)

Config Map 생성(FE에서 사용하는 환경변수용)

apiVersion: v1
kind: ConfigMap
metadata:
    name: next-prod-env
    namespace: next-prod
data:
    NEXTAUTH_URL: https://www.next.com
...생략...

Deployment 생성

apiVersion: apps/v1
kind: Deployment
metadata:
    name: next-web-prod
    namespace: next-prod
spec:
    ...생략...
    selector:
        matchLabels:
            app: next-web-prod
    template:
        metadata:
            labels:
                app: next-web-prod
        spec:
            containers:
                - name: next-web-prod
                  image: ...생략...
                  ports:
                      - containerPort: 3000
                  envFrom:
                      - configMapRef:
                            name: next-prod-env
...생략...

Service 생성

kind: Service
apiVersion: v1
metadata:
    name: next-prod-service
    namespace: next-prod
spec:
    selector:
        app: next-web-prod
    ports:
        - protocol: TCP
          port: 80
          targetPort: 3000

Ingress 생성

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
    name: next-prod-ingress
    namespace: next-prod
    annotations:
        ...생략...
spec:
    ingressClassName: nginx
    tls:
        - hosts:
              - www.next.com
          ...생략...
    rules:
        - host: www.next.com
          http:
              paths:
                  - path: /
                    pathType: Prefix
                    backend:
                        service:
                            name: next-prod-service
                            port:
                                number: 80
...생략...

gitlab-ci 구성

...생략...

build:
    ...생략...
    stage: build
    image:
        name: docker.evidnet.co.kr/platform-images/kaniko:curlv1
        entrypoint: ['']
    script:
        - /kaniko/executor
          --context "${CI_PROJECT_DIR}"
          --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
          --destination [image name]

 ...생략...

deploy:
    ...생략...
    stage: deploy
    image: bitnami/kubectl:latest
    script:
        - kubectl set image deployment/[delpoyment name] [delpoyment name]=[image name] -n [namespace]
        - kubectl annotate deployment [delpoyment name] kubernetes.io/change-cause="version change to [hash]" --overwrite=true -n [namespace]

...생략...

느낌점

  • 쿠버네티스 스터디를 하고 처음으로 맡는 관련업무였는데 완벽하지는 못해도 완료하여 뿌듯하면서도 아직은 좀 더 개선할 수 있는 여지가 있어서 추후에 좀 더 연구하고 싶어졌다. 시간이 된다면 최적화 등을 찾아보는 시간을 가지면 좋을것 같다.
profile
개발 노트

0개의 댓글