
IDC에 Docker-compose로 배포되어있던 NextJS를 사내 IDC에 구축된 K8S Cluster로 이관하는 업무를 맡아서 작업하고 이에 대한 내용을 기록한 내용입니다.
마땅한 정책이 없어 우선은 각 네임스페이스 별로 시크릿을 생성하여 사용하기로하여 생성하였습니다. (도커 레지스트리에서 pull 하기위한 계정정보)
apiVersion: v1
kind: ConfigMap
metadata:
name: next-prod-env
namespace: next-prod
data:
NEXTAUTH_URL: https://www.next.com
...생략...
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
...생략...
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
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
...생략...
...생략...
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]
...생략...