CD 작업은
- CI 에 의한 Docker Image 변경 시 Argo CD (auto sync : apply yaml to kubernetes)
- k8s configuration file 변경시 K8s configuration manager (yaml file push ) -> argo cd (auto sync : apply yaml to kubernetes)
- Sync Policy
✓ Auto Sync : 주기별 동기화 체크 후 불 일치시 반영
✓ Manual Sync : 주기별 동기화 체크
- Argo CD 배치
✓ 개발/운영이 분리된 경우
▷ 개발 환경에 만 Argo CD 구성
개발 Argo CD에서 원격으로 운영 환경에 반영 (Auto Sync or Manual Sync)
▷ 개발 / 운영 환경 별로 Argo CD 구성
✓ 개발/운영이 통합된 경우
▷ 하나의 Argo CD 구성, 개발/운영 환경운 K8s의 Namespace로 분리
- Jenkins Docker images rebuild 시 배포
- Argo CD follows the GitOps model of deployment, where desired configuration changes are first pushed to Git, and the cluster state then syncs to the desired state in git.
- 즉 Argo CD는 Kubernetes manifest 변경을 체크하지만, manifest에서 참조하고 있는 Docker image 변경을 체크 하지 않음
- Jenkins pipeline에서 Docker image 빌드 후 Kubernetes manifest (Image tag 정보)를 변경하고 push 하면 Argo CD에서 인지 할 수 있음
Kustomize
쿠버네티스 manifest 를 보다 쉽게 변경할 수 있게..
ArgoCD
gitlab 에 config 파일을 올려서, 배포될 수 있게 함
이때 config 에 담긴 배포 이미지는 nexus 링크겠지
지금 해야할 작업
0. nexus 에 테스트 이미지 올리기
1. argoCD 에 띄울 config 파일 만들기
2. config 파일을 gitlab 에 올리기 & gitlab 과 argoCD 연결하기
3. jenkins pipeline 을 이용해서 백엔드 CI작업을 통해 docker image 가 변경 -> 이 변경을 하면서 k8s manifest 의 image tag 를 변경하고, 다시 gitlab 에 push 하면 argoCD 가 인식
0. nexus 에 테스트 이미지 올리기
1) nexus docker login
- docker login 넥서스ip -u 유저이름 -p 비밀번호
- https://www.leafcats.com/200 : 트러블 슈팅
- docker tag <LOCAL_IMAGE_NAME> <NEXUS_URL>/<REPOSITORY_NAME>/<IMAGE_NAME>:<TAG>
- docker push <NEXUS_URL>/<REPOSITORY_NAME>/<IMAGE_NAME>:<TAG>
음 잘 올라감
1. argoCD 에 띄울 config 파일 만들기
namespace : develop
image : backend 1
image : backend 2
image : backend 3
그냥 각각 replicaset 2개씩 deployment 3개 띄우면 될듯
pv 는 하나 해서 공유하기
경로만 다르게 ㄱㄱ
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-back1
labels:
app: app-back1
spec:
replicas: 2
selector:
matchLabels:
app: app-back1
template:
metadata:
labels:
app: app-back1
spec:
containers:
- name: app-back1
image: IP:32349/<image>:<tag>
imagePullPolicy: Always
ports:
- containerPort: 8080
imagePullSecrets:
- name: nexus
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-back2
labels:
app: app-back2
spec:
replicas: 2
selector:
matchLabels:
app: app-back2
template:
metadata:
labels:
app: app-back2
spec:
containers:
- name: app-back2
image: 이미지이름
ports:
- containerPort: 8080
imagePullSecrets:
- name: 시크릿 이름
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-back3
labels:
app: app-back3
spec:
replicas: 2
selector:
matchLabels:
app: app-back3
template:
metadata:
labels:
app: app-back3
spec:
containers:
- name: app-back3
image: 이미지이름
ports:
- containerPort: 8080
imagePullSecrets:
- name: 시크릿 이름
# app1-service.yaml
apiVersion: v1
kind: Service
metadata:
name: app1-service
spec:
selector:
app: app1
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP
---
# app2-service.yaml
apiVersion: v1
kind: Service
metadata:
name: app2-service
spec:
selector:
app: app2
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP
---
# app3-service.yaml
apiVersion: v1
kind: Service
metadata:
name: app3-service
spec:
selector:
app: app3
ports:
- protocol: TCP
port: 8080
targetPort: 8080
type: ClusterIP
# ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: your-domain.com
http:
paths:
- path: /app1
pathType: Prefix
backend:
service:
name: app1-service
port:
number: 8080
- path: /app2
pathType: Prefix
backend:
service:
name: app2-service
port:
number: 8080
- path: /app3
pathType: Prefix
backend:
service:
name: app3-service
port:
number: 8080
시크릿 생성해야되네..
kubectl create secret docker-registry nexus -ndev \
--docker-server=넥서스 ip \
--docker-username=admin \
--docker-password=비번
시크릿 생성이 제대로 안되는건지
nexus push / pull IP 의 혼동이 좀 있는 것 같다..
시크릿 생성시 docker-server 의 ip 와, docker image pull 받는 ip 를 제대로 맞춰야 해결될듯.
시크릿 설정을 저렇게 하는지도 다시 찾아보기
이걸 해결해야 제대로 뭘 좀 할텐데..
-> 찾아본 결과 팀원의 단순 실수였다고..
이 블로그를 참고해서 kustomize 구조로도 파일들을 설정해줬다.
kustomize 설치 )
curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash
도움받은 블로그
1. https://cwal.tistory.com/23?category=951157
2. manifest 파일을 gitlab 에 올리기 & gitlab 과 argoCD 연결하기
gitlab 은 github 과 비슷하지만 다르게..
private 으로 만들어져있기에 ssh key gen 을 통해만들어진 pub 키를 등록해줘야한다.
그리고, gitlab에서 볼 수 있는 clone 용 dns 는 클러스터 내부에 띄워진 서비스 도메인이기 때문에,
ingress 도메인으로 Push 를 해줘야한다.
중간 트러블 발생)
container devops 가 파드 각각 (레플리카셋도 1임)띄워져있어서
여러 사람이 접속하면 502 가 발생함.....
이건 뭐 레플리카셋을 늘려도 되는지....
노드가 자꾸 죽는다 개복치야 뭐야
2.1)
argoCD 에 레포 add 하기 (안돼..왜안되지?)
아마 위와 같은 문제일것같다. ( gitlab이 private 으로 되어있는경우)
근데 그렇다면 이를 어떻게 연결하느냐..
url 을 ingress 로 하고, personal access token or ssh key 로 입력을 해도 연결이안된다.
이유를 알 것같다.
도메인이 http 로 시작해서 그런 것 같다. ㅜㅜ
생각해보니 예전 프로젝트에서 아르고 담당했던 분이 인증서가 없어서..추가하고있던 기억이 이제야 떠올랐다.
인증서를 발급받아야 한다.
2.2) 인증서 발급받기
도메인 발급 -> 내 도메인 한국을 이용함
ssl 인증서 -> lets encrypt 이용함
txt 레코드에 등록하고 몇분 좀 기다려줘야댐
# cd /etc/letsencrypt/archive
에서 확인
root@ip-172-31-48-170:/etc/letsencrypt/archive/clpaas.kro.kr# ls
cert1.pem chain1.pem fullchain1.pem privkey1.pem
어..여기에는 루트인증서가 없어서 ...
공식문서를 보니 이렇게 해줘야한다고..
일단 CA 파일 다운해봄
curl -o ISRG_Root_X1.crt https://letsencrypt.org/certs/isrgrootx1.pem
그 후 pem 키 연결해서 키체인 만들었음
104 cat chain1.pem >> full_chain.crt
105 cat cert1.pem >> full_chain.crt
106 cat ISRG_Root_X1.crt >> full_chain.crt
그 후 등록해줌
cert pem > private pem >위에서 만든 full chain 순임
근데 ? 안됨
오류남
원인을 ? 알수없음
그래서 ACM 에 등록해봄
근데? 됨
뭐지? 왤까?
진짜 모르겠음
여튼 그래서 ACM 인증서를 받아서 등록할 셈이다.
기다리다 지쳐서 다음편에이어서 올리겠다.
해야할것 )
- kustomize 로 label 다 app -> dev 로 변경 ( app label 은 option 노드만 쓰게 하려고)
- jenkins pipeline 을 이용해서 백엔드 CI작업을 통해 docker image 가 변경 -> 이 변경을 하면서 k8s manifest 의 image tag 를 변경하고, 다시 gitlab 에 push 하면 argoCD 가 인식
https://jennifersoft.com/ko/blog/kubernetes/2023-08-30-jennifer-kubernetes-3/
https://devocean.sk.com/blog/techBoardDetail.do?ID=164784
https://sosoeasy.tistory.com/667
'☁️2024 > Cloud' 카테고리의 다른 글
[KT Cloud] K2P Standard Container DevOps 이해 및 응용 #4 (2) | 2024.10.04 |
---|---|
[KT Cloud] K2P Standard Container Devops 이해 및 응용 #3 (2) | 2024.09.29 |
[KT Cloud] K2P Standard Container Devops 이해 및 응용 #1 (0) | 2024.08.23 |
CKA 응시 후기 ( 과연 결과는 ?! ) (0) | 2024.05.17 |
CKA 대비 따배씨 공부 정리 (0) | 2024.04.25 |