Amazon Web Service (AWS)/EKS

EKS CI/CD 구축 (git, docker, argocd) - 1 환경 구성

Ssemi-Column 2022. 8. 28. 22:28
728x90

ArgoCD 구축 (https://www.eksworkshop.com/intermediate/290_argocd/install/)

1. ArgoCD 를 위한 네임스페이스 생성

$ kubectl create namespace argocd

.2. ArgoCD namespace에 해당 yaml 파일을 적용 (Deployment.yaml)

$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v2.4.7/manifests/install.yaml

3. ArgoCD Service를 LoadBalancer로 변경하여 외부 접속이 가능하게 함

$ kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

4. 확인

4-1 pod 정보 확인

$ kubectl get pods -n argocd

namespace argocd에 있는 모든 pod 정보를 보여준다

4-2 외부접속을 가능하게 하는 service 정보 확인

$ kubectl get service -n argocd

namespace argocd에 있는 모든 service 정보를 보여준다.

TYPE의 ClusterIP는 각 노드들 끼리만 통신할 수 있는 내부 IP 이고 외부 접속을 가능하게 하려면 TYPE을 NodePort, LoadBalancer로 변경하면 된다.

4-2-1 LoadBalancer로 설정된 argocd-server의 서비스 내용을 상세하게 확인한다.

kubectl get service -n argocd argocd-server -o yaml

apiVersion: v1
kind: Service					//yaml 종류 : deployment, cluster, service, pods 등 타입으로 나뉜다.
metadata:
  annotations:
    kubectl.kubernetes.io/last-applied-configuration: |
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"labels":{"app.kubernetes.io/component":"server","app.kubernetes.io/name":"argocd-server","app.kubernetes.io/part-of":"argocd"},"name":"argocd-server","namespace":"argocd"},"spec":{"ports":[{"name":"http","port":80,"protocol":"TCP","targetPort":8080},{"name":"https","port":443,"protocol":"TCP","targetPort":8080}],"selector":{"app.kubernetes.io/name":"argocd-server"}}}
  creationTimestamp: "2022-08-29T14:33:11Z"
  finalizers:
  - service.kubernetes.io/load-balancer-cleanup
  labels:
    app.kubernetes.io/component: server
    app.kubernetes.io/name: argocd-server
    app.kubernetes.io/part-of: argocd
  name: argocd-server
  namespace: argocd					// 네임스페이스
  resourceVersion: "14054"
  uid: f7dd5a7f-469f-4d8f-9ca5-d215be8603ec
spec:
  allocateLoadBalancerNodePorts: true
  clusterIP: 10.100.219.97
  clusterIPs:
  - 10.100.219.97
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - name: http
    nodePort: 30028
    port: 80
    protocol: TCP
    targetPort: 8080
  - name: https
    nodePort: 30881
    port: 443
    protocol: TCP
    targetPort: 8080
  selector:
    app.kubernetes.io/name: argocd-server
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - hostname: af7dd5a7f469f4d8f9ca5d215be8603e-1085680841.ap-northeast-2.elb.amazonaws.com

 

4-3 Argocd console 접속

af7dd5a7f469f4d8f9ca5d215be8603e-1085680841.ap-northeast-2.elb.amazonaws.com


Jenkins 구축

1. Jenkins 내부에 docker가 설치된 컨테이너 이미지를 다운

$ docker pull kadircana/jenkinswithdocker

2. Jenkins Deployment.yaml 파일 작성

$ vi jenkins_deployment.yaml

2-1 Deployment.yaml 작성

apiVersion: apps/v1
kind: Deployment	# yaml 파일 종류 cluster, service, deployment, pods 등이 있다
metadata:
  name: jenkins
spec:
  replicas: 1		# pods에 생성할 갯수 
  selector:
    matchLabels:
      app: jenkins
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: kadircana/jenkinswithdocker	# 사용할 컨테이너 이미지

2-2 jenkins namespace 생성 후 deployment 파일 적용

$ kubectl create namespace jenkins
$ kubectl apply -f jenkins_deployment.yaml -n jenkins

2-3 확인

kubectl get pods -n jenkins

3. 외부 접속을 위한 Service 설정

$ kubectl expose -n jenkins deployment jenkins --port=80 --target-port=8080 --type=LoadBalancer

3-1 서비스 확인

$ kubectl get service -n jenkins jenkins -o yaml

3-2 접속 확인

4 Jenkins 내부 접속

$ kubectl exec -it -n jenkins jenkins-6cf6fffdcd-nhsl2 /bin/bash

4-1 git ,docker 설치 여부 확인

$ git
$ docker

4-2 Jenkins 비밀번호 확인

$ cat /var/jenkins_home/secrets/initialAdminPassword

728x90
반응형
LIST