ArgoCD를 이용해 배포해보자~
kr-central-1
vm접근용 키페어
access-key
github 작업 환경
1
kubectl get nodes 되도록 준비
kubectl get nodes
NAME STATUS ROLES AGE VERSION
host-10-0-0-153 Ready <none> 4d1h v1.26.6
host-10-0-1-199 Ready <none> 4d1h v1.26.6
2
Container Registry 생성
비공개
hands-on
태그 덮어쓰기 = 가능
이미지 스캔 = 자동
1
docker pull kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1
2
이미지 올리기 위해 인증
docker login {프로젝트 이름}.kr-central-1.kcr.dev \
--username {사용자 액세스 키 ID} \
--password {사용자 액세스 보안 키}
# example) 프로젝트 이름 = "kc-handson"
# docker login kc-handson.kr-central-1.kcr.dev \
# --username imaccesskey \
# --password imaccesssecretkey
docker login kakao-infraeng-dev-pz.kr-central-1.kcr.dev --username 7b361d40 --password DQsFuLQzxlaXX0xLRcz-vJDbN4V6x9DBVBmt1dg
Login Succeeded
3
docker tag \
kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1 \
{프로젝트 이름}.kr-central-1.kcr.dev/hands-on/kep-library:v1
docker push {프로젝트 이름}.kr-central-1.kcr.dev/hands-on/kep-library:v1
# example) 프로젝트 이름 = "kc-handson"
# docker tag \
# kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1 \
# kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1
#
# docker push kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1
docker tag kicset.kr-central-1.kcr.dev/hands-on/kep-library:v1 kakao-infraeng-dev-pz.kr-central-1.kcr.dev/hands-on/kep-library:v1
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
docker push kakao-infraeng-dev-pz.kr-central-1.kcr.dev/hands-on/kep-library:v1
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Getting image source signatures
Copying blob 4e2bc7291a61 done |
Copying blob f1b5933fe4b5 done |
Copying blob 790d9e260cb2 done |
Copying blob ceaf9e1ebef5 done |
Copying blob 9b9b7f3d56a0 done |
Copying config ced899cd86 done |
Writing manifest to image destination
[root@host-10-0-3-182 ~]#
4
콘솔에서 확인
컨테이너 레지스트리에서 확인
4
쿠버네티스 클러스터에서 비공개 컨테이너 레지스트리를 사용하기 위해서는 컨테이너 레지스트리와 Secret 정보가 필요합니다.
아래 정보를 확인하여 ‘handson-cr’ 이름의 시크릿 및 컨테이너 레지스트리 정보를 추가합니다.
# 네임 스페이스를 만든다.
kubectl create namespace kep-library
kubectl create -n kep-library secret docker-registry handson-cr \
--docker-server={프로젝트 이름}.kr-central-1.kcr.dev \
--docker-username={사용자 액세스 키 ID} \
--docker-password={사용자 액세스 보안 키} \
--docker-email={사용자 이메일}
# example) 프로젝트 이름 = kc-handson
# kubectl create secret docker-registry handson-cr -n kep-library \
# --docker-server=kc-handson.kr-central-1.kcr.dev \
# --docker-username=imaccesskey \
# --docker-password=imaccesssecretkey \
# --docker-email=imawesome@awesomegroup.com
kubectl create secret docker-registry handson-cr -n kep-library --docker-server=kakao-infraeng-dev-pz.kr-central-1.kcr.dev --docker-username=7b3651d40 --docker-password=DQsF6QLI-Bmt1dg --docker-email=topasvga@naver.com
1
kc-hands-on
공개
리포지토리를 생성
Add a README file(README 파일 추가)를 선택합니다.
2
Add file
service.yaml
파일을 아래 데이터로 작성하여 추가합니다.
네임스페이스 kep-library와 로드밸런서 타입의 서비스를 생성합니다.
apiVersion: v1
kind: Namespace
metadata:
name: kep-library
---
apiVersion: v1
kind: Service
metadata:
name: kep-library
spec:
type: LoadBalancer
ports:
- port: 80
targetPort: 8080
selector:
app: kep-library
3
deployment.yaml
‘handson-cr’ 이름으로 생성한 시크릿을 설정
apiVersion: apps/v1
kind: Deployment
metadata:
name: kep-library
spec:
replicas: 2
revisionHistoryLimit: 3
selector:
matchLabels:
app: kep-library
template:
metadata:
labels:
app: kep-library
spec:
containers:
# example) kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1
- image: {프로젝트 이름}.kr-central-1.kcr.dev/{리포지토리 이름}/kep-library:{이미지 태그}
name: kep-library
ports:
- containerPort: 8080
imagePullSecrets:
- name: handson-cr
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kep-library
spec:
replicas: 2
revisionHistoryLimit: 3
selector:
matchLabels:
app: kep-library
template:
metadata:
labels:
app: kep-library
spec:
containers:
# example) kc-handson.kr-central-1.kcr.dev/hands-on/kep-library:v1
- image: kakao-infraeng-dev-pz.kr-central-1.kcr.dev/hands-on/kep-library:v1
name: kep-library
ports:
- containerPort: 8080
imagePullSecrets:
- name: handson-cr
작성한 파일을 확인
1
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/release-2.8/manifests/install.yaml
2
Github 리포지토리 주소를 작성하여 ArgoCD 프로젝트를 배포
cat <<EOF | kubectl apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kep-library
namespace: argocd
spec:
project: default
source:
repoURL: {GitHub 리포지토리 URL}
targetRevision: HEAD
path: ./
destination:
server: https://kubernetes.default.svc
namespace: kep-library
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
EOF
cat <<EOF | kubectl apply -f -
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: kep-library
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/topasvga/kc-hands-on
targetRevision: HEAD
path: ./
destination:
server: https://kubernetes.default.svc
namespace: kep-library
syncPolicy:
automated:
prune: true
selfHeal: true
allowEmpty: false
syncOptions:
- CreateNamespace=true
EOF
application.argoproj.io/kep-library created
repoURL: https://github.com/argoproj/argocd-example-apps.git
https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/
1
argoCD 관리 페이지를 포트 포워딩
kubectl port-forward svc/argocd-server -n argocd 8080:443&
2
8080 포트로 접속
open http://localhost:8080
3
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
# 기본 계정
# ID: admin
# PW: {출력 결과}
4
argoCD 웹페이지 접속해 확인한다.
5
콘솔에서 Load Balancer 서비스에 접속합니다. 생성된 로드밸런서에 공인 IP를 부여
사이트 접속
# 참고 자료
https://docs.kakaocloud.com/tutorial/dev-ops/gitops/argoCD-publishing
https://brunch.co.kr/@topasvga/3651
감사합니다.