<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Do it, it will be better</title>
    <link>https://bravesunfish.tistory.com/</link>
    <description>개복치 중에 제일 용감한 개복치!</description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 07:39:23 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>용감한 개복치</managingEditor>
    <image>
      <title>Do it, it will be better</title>
      <url>https://tistory1.daumcdn.net/tistory/4669485/attach/95d79d9f56104fe5abe9aa8d202ad115</url>
      <link>https://bravesunfish.tistory.com</link>
    </image>
    <item>
      <title>[AWS]AWS Certified Solutions Architect - Associate 후기</title>
      <link>https://bravesunfish.tistory.com/88</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;캡처.PNG&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0a5SW/btsKoQkQH56/sGfEhLtImB5mdHVKPa6u50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0a5SW/btsKoQkQH56/sGfEhLtImB5mdHVKPa6u50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0a5SW/btsKoQkQH56/sGfEhLtImB5mdHVKPa6u50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0a5SW%2FbtsKoQkQH56%2FsGfEhLtImB5mdHVKPa6u50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;814&quot; height=&quot;822&quot; data-filename=&quot;캡처.PNG&quot; data-origin-width=&quot;814&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합격 후기 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이틀 정도 덤프 문제 200개 가량 풀고 들어갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평소 관련된 일을 하다가 시험을 치러가면 쓰던 서비스에 대해서는 대충 읽고 끼워 맞추기가 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 안써보던 서비스들의 경우 정말 모르니 덤프 문제집에서 내가 들어보지 못했다 + 덤프에서 반복적으로 등장한다 - 하는 서비스들 위주로 문제 + 4지 선다의 답변들 눈에 익히고 들어가는 방법이 가장 효율적이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제 은행식이어서 가능한 방법인 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;환율 낮을 때 신청하면 좀 더 싸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;50% 할인 바우처 너무너무너무 중요하다. 이거 시험 너무 비싸ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이쪽 직군의 자격증들 다 너무 비싸다...CKA, AWS 등등..&lt;/p&gt;</description>
      <category>자격증 및 시험</category>
      <category>AWS</category>
      <category>saa</category>
      <category>자격증</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/88</guid>
      <comments>https://bravesunfish.tistory.com/88#entry88comment</comments>
      <pubDate>Wed, 30 Oct 2024 03:43:42 +0900</pubDate>
    </item>
    <item>
      <title>[k8s]파드 스케일링(1)</title>
      <link>https://bravesunfish.tistory.com/87</link>
      <description>&lt;h1&gt;목표&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits&quot;&gt;https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안정적인 서비스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안정적인-의 기준 세우기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정밀한 스케일링을 위한 모니터링 + 실험 추가 필요&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;자원관리&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;resource&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;limits : &lt;b&gt;pod가 실행될때 사용할수 있는 최대 cpu, memory&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Limit을 pod가 넘기면 cpu는 throttling이 걸리고, memory는 pod가 종료(oom)
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;oom이 자주 일어나는 서비스들의 노드 여분 리소스를 확인하면서 기존 설정된 memory limit에 대한 검토 필요&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;실제 노드의 여분 리소스와 상관없이 limit 값으로 결정되기 때문에 아이디어스의 데브옵스팀은 cpu limit을 해제하는 방식 채택하기도 함 &amp;rarr; 단, 이 때는 노드 리소스가 넉넉하거나 유연해야 안정성 확보 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;requests : &lt;b&gt;pod가 실행되는데 최소한으로 필요한 cpu, memory&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파드를 넣을 노드를 결정 할 때 기준. 단, 실제 실행 될 때 limit 값을 사용하기 때문에 노드의 할당가능한 리소스보다 리밋의 합이 클 때 overcommit 상태가 됨 &amp;rarr; 장애!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;namespace resource&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;limitrange :
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네임스페이스에서 파드 하나의 리소스 limit, request 구성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;resourcequota :
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;네임스페이스별 총 리소스 사용을 제한하는 제약 조건을 제공&lt;/li&gt;
&lt;li&gt;유형별로 네임스페이스에서 만드는 오브젝트, 컴퓨팅 리소스양 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상태확인&lt;/p&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;kubectl describe node
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;allocatable : 데몬 같은거 제외하고 pod에 할당 할 수 있는 총 용량&lt;/li&gt;
&lt;li&gt;각 파드 별로 리퀘스트, 리밋 기준 얼마나 사용하고 있는지 볼 수 있음.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;kubectl top node
kubectl top pod
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cpu, memory 만 알아보기&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;QoS&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/&quot;&gt;https://kubernetes.io/docs/concepts/workloads/pods/pod-qos/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Quality of Service&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파드의 우선순위. 노드에 메모리 자원이 부족해지면 어떤걸 먼저 아웃시키는가 에 대한 클래스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Kubelet에 기본적으로 노드 가용 메모리가 100mi 이하일 때 memory pressure가 발생하도록 설정되어있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;memory pressure 발생하면,&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 노드에서 실행 중인 모든 파드에 대해 우선순위를 매겨 가장 낮은 순서부터 다른 노드로 쫓아냄.&lt;/li&gt;
&lt;li&gt;해당 노드에선 새로운 파드를 할당 받지 않음.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종류&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BestEffort : resources 항목을 아예 사용하지 않을 경우. limit, request 둘 다 x &amp;rarr; 노드의 모든 자원 사용할 수도 있고, 전혀 사용하지 못할 수 도 있음&lt;/li&gt;
&lt;li&gt;Burstable : Request의 지정된 만큼 리소스를 보장받고 상황에 따라서는 limit까지 사용 가능&lt;/li&gt;
&lt;li&gt;Guaranteed : limit == request 일때. 자원 사용을 무조건 보장받음&lt;/li&gt;
&lt;li&gt;우선순위 : Guaranteed &amp;gt; Burstable &amp;gt; BestEffort&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h1&gt;스케일 인/아웃 테스트&lt;/h1&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;kubectl 명령어 공식문서&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#autoscale&quot;&gt;https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#autoscale&lt;/a&gt;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;적용하기&lt;/h3&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-test-service
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deploy-test-service
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;version : 2부터 다양한 메트릭 참조 가능, 1은 cpu만 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cpu utilization : request의 cpu 값이 기준&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-test-service
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deploy-test-service
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Pods
      pods:
        metric:
          name: http_requests
        target:
          type: AverageValue
          averageValue: &quot;100&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http_requests : 각 Pod의 평균 요청 수가 100이 될 때마다 스케일 인/아웃이 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단, 이를 위해서는 메트릭 서버가 http_requests 메트릭을 수집하고 있어야함.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;수집 중인 메트릭&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get --raw &quot;/apis/metrics.k8s.io/v1beta1&quot; | jq
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;kind&quot;: &quot;APIResourceList&quot;,
  &quot;apiVersion&quot;: &quot;v1&quot;,
  &quot;groupVersion&quot;: &quot;metrics.k8s.io/v1beta1&quot;,
  &quot;resources&quot;: [
    {
      &quot;name&quot;: &quot;nodes&quot;,
      &quot;singularName&quot;: &quot;&quot;,
      &quot;namespaced&quot;: false,
      &quot;kind&quot;: &quot;NodeMetrics&quot;,
      &quot;verbs&quot;: [
        &quot;get&quot;,
        &quot;list&quot;
      ]
    },
    {
      &quot;name&quot;: &quot;pods&quot;,
      &quot;singularName&quot;: &quot;&quot;,
      &quot;namespaced&quot;: true,
      &quot;kind&quot;: &quot;PodMetrics&quot;,
      &quot;verbs&quot;: [
        &quot;get&quot;,
        &quot;list&quot;
      ]
    }
  ]
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요약 : 리소스 메트릭만 수집중, 어플리케이션 래벨의 커스텀 메트릭 x&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;NodeMetrics&lt;/b&gt; (nodes):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;클러스터의 각 노드(node)에 대한 메트릭을 수집합니다.&lt;/li&gt;
&lt;li&gt;메트릭 종류: 노드 수준의 메트릭 (CPU, 메모리 사용량 등)&lt;/li&gt;
&lt;li&gt;메트릭 접근 방법: get, list&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;PodMetrics&lt;/b&gt; (pods):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 네임스페이스(namespace) 내의 파드(pod)에 대한 메트릭을 수집합니다.&lt;/li&gt;
&lt;li&gt;메트릭 종류: 파드 수준의 메트릭 (CPU, 메모리 사용량 등)&lt;/li&gt;
&lt;li&gt;메트릭 접근 방법: get, list&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;cpu 부하주기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어 :&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c &quot;while sleep 0.01; do wget -q -O- http://&amp;lt;deployment 서비스 이름&amp;gt;:&amp;lt;파드 포트&amp;gt;; done&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트값 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cpu utilization 10&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케일 아웃 까지 시간 : 부하 들어가고 1분이내&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스케일 인 까지 시간 : 부하 주는 것 멈추고 2분 이내&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HPA 확인&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;kubectl get hpa -w
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고문서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale/&quot;&gt;https://kubernetes.io/ko/docs/tasks/run-application/horizontal-pod-autoscale/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://no-easy-dev.tistory.com/entry/쿠버네티스-Pod-자원관리-QoS&quot;&gt;https://no-easy-dev.tistory.com/entry/쿠버네티스-Pod-자원관리-QoS&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@hsshin0602/쿠버네티스-auto-scaling&quot;&gt;https://velog.io/@hsshin0602/쿠버네티스-auto-scaling&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra &amp;amp; DevOps/k8s(EKS)</category>
      <category>EKS</category>
      <category>HA</category>
      <category>k8s</category>
      <category>POD</category>
      <category>resource</category>
      <category>scaling</category>
      <category>운영</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/87</guid>
      <comments>https://bravesunfish.tistory.com/87#entry87comment</comments>
      <pubDate>Wed, 30 Oct 2024 03:24:30 +0900</pubDate>
    </item>
    <item>
      <title>[Network]4계층 TCP &amp;amp; UDP</title>
      <link>https://bravesunfish.tistory.com/86</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Transport 계층&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OSI 7 계층 분류에서 엔드 투 엔드 유저들이 신뢰성 잇는 데이터를 주고 받을 수 있도록 함.&lt;/li&gt;
&lt;li&gt;그위 세션, 프레젠테이션, 어플리케이션 레벨이 데이터 전달의 걱정을 안하게 해줌
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;어플리케이션 프로세스 사이의 논리적 통신 제공 -&amp;gt; 데이터를 어떻게 전송할까 결정&lt;/li&gt;
&lt;li&gt;host(라우터) 간의 논리적 통신을 제공한다? -&amp;gt; 네트워크 계층&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TCP&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OSI 7 계층 중 4층, 전송 계층&lt;/li&gt;
&lt;li&gt;연결 지향적, 신뢰성, 데이터 전송 보장
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;udp 보다 속도 느림&lt;/li&gt;
&lt;li&gt;point to point&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;웹, 이메일, 파일 전송 등에 사용&lt;/li&gt;
&lt;li&gt;흐름 제어, 혼잡 제어&lt;/li&gt;
&lt;li&gt;&lt;b&gt;3-way handshaking 으로 연결, 4-way handshaking&lt;/b&gt; 으로 해제 -&amp;gt; tcp 헤더 필드 값 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3-way handshaking&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP 의 접속 설정&lt;/li&gt;
&lt;li&gt;네트워크 연결을 설정&lt;/li&gt;
&lt;li&gt;양쪽의 준비를 보장하고 검증&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;과정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;SYN: 클라이언트 &amp;rarr; 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;클라이언트가 syn segment 서버로 보냄&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;서버는 수신&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;SYN+ACK: 서버 &amp;rarr; 클라이언트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버가 클라이언트에게 ack segment, 동시에 syn segment 보냄&lt;/li&gt;
&lt;li&gt;클라이언트가 ack segment 받으면 ESTAB 상태&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ACK: 클라이언트 &amp;rarr; 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;클라이언트가 서버에게 ack segment 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;서버도 ack segment 받으면 ESTAB 상태 &lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4-way handshaking&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;TCP 의 접속 해제&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;과정&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;FIN: 클라이언트 &amp;rarr; 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;클라이언트가 서버에게 fin segment 보냄&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ACK: 서버 &amp;rarr; 클라이언트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;서버는 fin 받고, 확인 ack 를 클라이언트에게 보냄&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;데이터를 모두 전송 후 통신 끝날때 까지 대기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;FIN: 서버 &amp;rarr; 클라이언트&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;서버가 데이터 모두 보내고 연결 종료에 합의하는 fin 패킷 클라이언트에게 전송&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span&gt;ACK: 클라이언트 &amp;rarr; 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;fin 을 받은 클라이언트가 응답으로 서버에게 ack 전송&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;time_wait 상태로 의도치 않은 에러로 연결이 데드락 빠지는 것을방지&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;이후 종료&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;차이&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;fin, 서버가 보낼 데이터가 남았는가를 검증하는 단계&lt;/li&gt;
&lt;li&gt;단, fin 이후에 유실 및 지연된 데이터가 도착 할 수 있으므로 time_wait 단계가 추가됨&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;L4 스위치 ( 근데 이제, NLB 이해를 곁들인... )&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;얘가 가상화 된게 AWS NLB&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;로드밸런싱을 처리하는 장비 -&amp;gt; 외부에서 들어오는 모든 요청은 바로 서버로 가지않고 여기서 로드밸런싱함&lt;/li&gt;
&lt;li&gt;TCP/UDP 프로토콜의 헤더를 분석 -&amp;gt; 3-way handshaking과 4-way handshaking를 실시&lt;/li&gt;
&lt;li&gt;IP, port, 세션 정보 필요&lt;/li&gt;
&lt;li&gt;L4 스위치를 기준으로 내외부 망이 나뉨
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;내부 망의 서버가 각자 가지고 있던 공인 IP 사라지고 모든 요청을 L4스위치로 가져가기 때문에 얘만 공인 IP를 가지게 됨 -&amp;gt; NLB가 고정 IP 를 갖는 과정&lt;/li&gt;
&lt;li&gt;외부에서 내부 서버로 직접 접속할 방도 X -&amp;gt; 장비 자체를 대상으로 공격이 수행되거나 중간 방화벽 리소스 소비하는 방식으로 서비스 중단 일으킴&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;UDP&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;OSI 7 계층 중 4층, 전송 계층&lt;/li&gt;
&lt;li&gt;비연결형, 신뢰성 낮음
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tcp 보다 빠름&lt;/li&gt;
&lt;li&gt;데이터 그램 방식으로 패킷 교환&lt;/li&gt;
&lt;li&gt;전송 순서, 수신여부 확인 x&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;헤더에 checksum 필드로 최소한의 오류 검출&lt;/li&gt;
&lt;li&gt;1:n 의 스트리밍 서비스에 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;</description>
      <category>CS/네트워크</category>
      <category>AWS</category>
      <category>L4</category>
      <category>network</category>
      <category>NLB</category>
      <category>네트워크</category>
      <category>프로토콜</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/86</guid>
      <comments>https://bravesunfish.tistory.com/86#entry86comment</comments>
      <pubDate>Wed, 30 Oct 2024 03:13:24 +0900</pubDate>
    </item>
    <item>
      <title>[OS] 개념: 프로세스, 스레드, 데드락</title>
      <link>https://bravesunfish.tistory.com/85</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고자료&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://wikidocs.net/232213&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wikidocs.net/232213&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1730217658099&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;07-5 교착상태의 탐지와 회복&quot; data-og-description=&quot;[TOC] 교착상태 탐지와 회복은 교착상태를 관리하는 또 다른 중요한 접근 방식입니다. 이 방법은 교착상태를 미리 예방하거나 회피하는 대신, 교착상태가 발생하였을 때 이를 탐지&amp;hellip;&quot; data-og-host=&quot;wikidocs.net&quot; data-og-source-url=&quot;https://wikidocs.net/232213&quot; data-og-url=&quot;https://wikidocs.net/232213&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g7tv5/hyXpAQeTwo/S5F6SdxuNW3xNFIPkbLft0/img.png?width=277&amp;amp;height=360&amp;amp;face=0_0_277_360&quot;&gt;&lt;a href=&quot;https://wikidocs.net/232213&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wikidocs.net/232213&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g7tv5/hyXpAQeTwo/S5F6SdxuNW3xNFIPkbLft0/img.png?width=277&amp;amp;height=360&amp;amp;face=0_0_277_360');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;07-5 교착상태의 탐지와 회복&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[TOC] 교착상태 탐지와 회복은 교착상태를 관리하는 또 다른 중요한 접근 방식입니다. 이 방법은 교착상태를 미리 예방하거나 회피하는 대신, 교착상태가 발생하였을 때 이를 탐지&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wikidocs.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로세스&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;독립된 실행 단위 -&amp;gt; 최소 1개의 스레드 가짐&lt;/li&gt;
&lt;li&gt;독립된 메모리 공간 -&amp;gt; 코드 데이터 스택 힙&lt;/li&gt;
&lt;li&gt;자원 소유 및 관리 -&amp;gt; 서로 다른 프로세스의 자원에 접근 x, 하고싶으면 IPC 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;멀티프로세스&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;안정성 높음&lt;/li&gt;
&lt;li&gt;프로세스 간 영향 없음 &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;단점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자원 소모가 큼&lt;/li&gt;
&lt;li&gt;컨텍스트 스위칭 비용 높음 -&amp;gt; 캐시 메모리 초기화 등 무거운 작업 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;스레드&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CyP7L/btsKpe6BdAZ/s1lAF0eeiacHkV8a0DzP0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CyP7L/btsKpe6BdAZ/s1lAF0eeiacHkV8a0DzP0K/img.png&quot; data-alt=&quot;출처 : https://hongcoding.tistory.com/138#:~:text=%EC%8A%A4%EB%A0%88%EB%93%9C%EB%9E%80%2C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EB%82%B4%EC%97%90%EC%84%9C,%EC%9D%B4%EC%9A%A9%ED%95%98%EB%8A%94%20%EC%8B%A4%ED%96%89%EC%9D%98%20%EB%8B%A8%EC%9C%84%20%EC%9D%B4%EB%8B%A4.&amp;amp;amp;text=%EC%8A%A4%EB%A0%88%EB%93%9C%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%EA%B3%B5%EC%9C%A0,%EC%84%9C%EB%A1%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC%20%EA%B3%B5%EC%9C%A0%ED%95%9C%EB%8B%A4.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CyP7L/btsKpe6BdAZ/s1lAF0eeiacHkV8a0DzP0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCyP7L%2FbtsKpe6BdAZ%2Fs1lAF0eeiacHkV8a0DzP0K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;679&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;679&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://hongcoding.tistory.com/138#:~:text=%EC%8A%A4%EB%A0%88%EB%93%9C%EB%9E%80%2C%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EB%82%B4%EC%97%90%EC%84%9C,%EC%9D%B4%EC%9A%A9%ED%95%98%EB%8A%94%20%EC%8B%A4%ED%96%89%EC%9D%98%20%EB%8B%A8%EC%9C%84%20%EC%9D%B4%EB%8B%A4.&amp;amp;text=%EC%8A%A4%EB%A0%88%EB%93%9C%EB%8A%94%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20%EA%B3%B5%EC%9C%A0,%EC%84%9C%EB%A1%9C%20%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%A5%BC%20%EA%B3%B5%EC%9C%A0%ED%95%9C%EB%8B%A4.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스 내 실행 단위&lt;/li&gt;
&lt;li&gt;프로세스가 할당받은 자원 공유&lt;/li&gt;
&lt;li&gt;독립된 스택만 할당 -&amp;gt; 그림에서 처럼 스택만 각각 할당 받고 나머지는 공유중&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;멀티스레드&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;장점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자원 공유로 효율적 -&amp;gt; 프로세스 생성 X, 시스템 콜 감소&lt;/li&gt;
&lt;li&gt;컨텍스트 스위칭 비용, 통신 속도 낮음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;단점&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;동기화 이슈 -&amp;gt; &lt;b&gt;데드락&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;하나의 스레드 문제가 전체에 영향&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데드락(Deadlock)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 개 이상의 프로세스가 서로의 자원을 기다리며 무한 대기하는 상태&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 조건&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상호배제: 자원은 한 번에 하나의 프로세스만 사용 -&amp;gt; 하나의 프로세스가 자원을 독점 사용중&lt;/li&gt;
&lt;li&gt;점유와 대기: 자원을 보유한 상태에서 다른 자원 대기&lt;/li&gt;
&lt;li&gt;비선점: os는 자원을 강제로 빼앗을 수 없음&lt;/li&gt;
&lt;li&gt;순환대기: 프로세스간 순환형태의 자원 대기&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예방 방법&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;상호배제 -&amp;gt; 자원의 공유&lt;/li&gt;
&lt;li&gt;점유와 대기 -&amp;gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로세스 시작 시 필요한 자원을한 번에 할당 받기&lt;/li&gt;
&lt;li&gt;자원이 필요한 경우 보유한 자원 모두 놓고 재요청&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;비선점: 자원을 강제로 빼앗을 수 없음 -&amp;gt; cpu, memory는 일시적으로 빼앗을 수 있음&lt;/li&gt;
&lt;li&gt;순환대기: 프로세스간 순환형태의 자원 대기 -&amp;gt; 프로세스의 priority를 기준으로 낮은 쪽이 자원 우선 놓기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; Starvation 발생 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대응 알고리즘&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Deadlock Avoidance&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데드락 발생할 것 같으면 아예 자원을 할당하지 않는 방식&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로세스들이 필요로 하는 각 자원별 최대 사용량을 미리 선언하는 것&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자원 할당 그래프 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;각 자원 유형이 하나의 인스턴스만 가지고 있는 경우&lt;/li&gt;
&lt;li&gt;프로세스가 자원을 요청하는 것은 점선, 프로세스에 자원 할당하는 것은 실선으로 나타낸 그래프에서 사이클이 존재하지 않을 때 자원 할당&lt;/li&gt;
&lt;li&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oeTCl/btsKoP0yjhd/eHTIEXHXqVF85kCJSfHeG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oeTCl/btsKoP0yjhd/eHTIEXHXqVF85kCJSfHeG1/img.png&quot; data-alt=&quot;출처 : https://rebro.kr/177&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oeTCl/btsKoP0yjhd/eHTIEXHXqVF85kCJSfHeG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoeTCl%2FbtsKoP0yjhd%2FeHTIEXHXqVF85kCJSfHeG1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;456&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://rebro.kr/177&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;은행원 알고리즘
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인스턴스가 여럿 존재할 때는 위의 방식 사용 x&lt;/li&gt;
&lt;li&gt;요청 자원을 모두 할당받았을 땐 일정 시간안에 모두 반납한다는 전제하에 저용&lt;/li&gt;
&lt;li&gt;요청 자원수가 남은 자원의 수보다 적은 프로세스만 선택하여 할당&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Deadlock Detection &amp;amp; Recovery&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자원 선점시에 어떤 프로세스를 종료할 지 정해서 데드락 발생 이전 상태로 롤백&lt;/li&gt;
&lt;li&gt;프로세스 재시작&lt;/li&gt;
&lt;li&gt;롤백 회수를 지정함으로써 계속해서 동일한 프로세스가 종료되어 starvation 발생하는 것을 막음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Deadlock Ignorance&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;데드락은 어차피 드물게 일어나니 대처하면서 더 큰 오버헤드가 발생하는 경우를 제거&lt;/li&gt;
&lt;li&gt;unix, window 대부분이 채택&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>CS/운영체제</category>
      <category>CS</category>
      <category>OS</category>
      <category>메모리</category>
      <category>운영체제</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/85</guid>
      <comments>https://bravesunfish.tistory.com/85#entry85comment</comments>
      <pubDate>Wed, 30 Oct 2024 01:03:19 +0900</pubDate>
    </item>
    <item>
      <title>[Grafana]데이터 소스 연결</title>
      <link>https://bravesunfish.tistory.com/82</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;상황&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스 프로메테우스 서버가 환경별로 존재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그라파나 대시보드는 운영환경만 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 볼 개발환경 대시보드가 필요해짐&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 프로메테우스를 설치했다면 네임스페이스 모니터링에 모아두었으므로 확인&lt;/p&gt;
&lt;pre id=&quot;code_1720689515618&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl get svc -n monitoring&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-11 오후 6.19.18.png&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pD7SU/btsIwegZ0ga/may13RHgacMMeDSkCgdfwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pD7SU/btsIwegZ0ga/may13RHgacMMeDSkCgdfwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pD7SU/btsIwegZ0ga/may13RHgacMMeDSkCgdfwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpD7SU%2FbtsIwegZ0ga%2Fmay13RHgacMMeDSkCgdfwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;708&quot; height=&quot;135&quot; data-filename=&quot;스크린샷 2024-07-11 오후 6.19.18.png&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그라파나 &amp;gt; connection &amp;gt; data source &amp;gt; connection 에 프로메테우스 서버 파드 주소 입력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-07-11 오후 6.20.37.png&quot; data-origin-width=&quot;1757&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwUoy5/btsIwqn11m1/wmonaZJyQNKXjBu9Yd3Ljk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwUoy5/btsIwqn11m1/wmonaZJyQNKXjBu9Yd3Ljk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwUoy5/btsIwqn11m1/wmonaZJyQNKXjBu9Yd3Ljk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwUoy5%2FbtsIwqn11m1%2FwmonaZJyQNKXjBu9Yd3Ljk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1757&quot; height=&quot;1270&quot; data-filename=&quot;스크린샷 2024-07-11 오후 6.20.37.png&quot; data-origin-width=&quot;1757&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그라파나는 단순 대시보드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로메테우스가 풀링 방식으로 이런저런 파드상황을 들고오는거고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그걸 그라파나가 받아서 시각화 하는 것&lt;/p&gt;</description>
      <category>Infra &amp;amp; DevOps/Observability</category>
      <category>Dashboard</category>
      <category>Grafana</category>
      <category>Prometheus</category>
      <category>SRE</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/82</guid>
      <comments>https://bravesunfish.tistory.com/82#entry82comment</comments>
      <pubDate>Thu, 11 Jul 2024 18:24:19 +0900</pubDate>
    </item>
    <item>
      <title>[Terraform] 테라폼 기초 설명 &amp;amp; init 코드 구성 요소</title>
      <link>https://bravesunfish.tistory.com/80</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;테라폼 로고.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cewxDb/btsGUK2PTxl/1wg7eL8Olze9G2YHX5wKg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cewxDb/btsGUK2PTxl/1wg7eL8Olze9G2YHX5wKg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cewxDb/btsGUK2PTxl/1wg7eL8Olze9G2YHX5wKg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcewxDb%2FbtsGUK2PTxl%2F1wg7eL8Olze9G2YHX5wKg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;307&quot; data-filename=&quot;테라폼 로고.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Terraform 이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하시코프사에서 공개한 &lt;span data-token-index=&quot;1&quot;&gt;IaC&lt;/span&gt; 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 블록에서 작성된 타겟 리소스에 대한 api 를 테라폼 프로바이더가 호출&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 실행(apply) 하면 생성되는 tfstate 파일을 기준으로 상태를 비교하여 선언된 형태에 맞춤&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;1418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VYoJH/btsGTzOgCRF/9kzk7kBFsOniLY1Kds1Hl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VYoJH/btsGTzOgCRF/9kzk7kBFsOniLY1Kds1Hl0/img.png&quot; data-alt=&quot;출처 : 스터디 자료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VYoJH/btsGTzOgCRF/9kzk7kBFsOniLY1Kds1Hl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVYoJH%2FbtsGTzOgCRF%2F9kzk7kBFsOniLY1Kds1Hl0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1630&quot; height=&quot;1418&quot; data-origin-width=&quot;1630&quot; data-origin-height=&quot;1418&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 스터디 자료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;HCL 이란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;HashiCorp configuration language&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 하시코프사에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;6&quot;&gt;IaC와 구성 정보를 명시&lt;/span&gt;하기 위해 개발된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;8&quot;&gt;오픈 소스 도구&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;8&quot;&gt;- 테라폼에서 HCL이 코드의 영역을 담당&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 인프라가 코드로 표현되고, 이 코드는 곧 인프라이기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://bravesunfish.tistory.com/45&quot;&gt;&lt;span data-token-index=&quot;1&quot;&gt;선언적&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;특성&lt;/a&gt;을 갖게 되고 튜링 완전한 Turing-complete&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;3&quot;&gt;언어적&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;특성을 가짐&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 일반적인 프로그래밍 언어의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;1&quot;&gt;조건문&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;처리 같은 동작 가능&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 자동화와 더불어, 쉽게&lt;span data-token-index=&quot;3&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;버저닝해 히스토리&lt;/span&gt;를 관리하고&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-token-index=&quot;5&quot;&gt;함께 작업&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;할 수 있는 기반을 제공&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- syntax docs&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform/language/syntax/configuration&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developer.hashicorp.com/terraform/language/syntax/configuration&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713993908060&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Syntax - Configuration Language | Terraform | HashiCorp Developer&quot; data-og-description=&quot;Key constructs of the native Terraform language syntax, including identifiers, arguments, blocks, and comments.&quot; data-og-host=&quot;developer.hashicorp.com&quot; data-og-source-url=&quot;https://developer.hashicorp.com/terraform/language/syntax/configuration&quot; data-og-url=&quot;https://developer.hashicorp.com/terraform/language/syntax/configuration&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lJ39A/hyVS73R9yk/u8JTHQUe29AvB0nFeQkayk/img.jpg?width=3200&amp;amp;height=1800&amp;amp;face=0_0_3200_1800,https://scrap.kakaocdn.net/dn/2dJR4/hyVVAciHvv/MSyCKWH4Kr6JkpKgs3nGR1/img.jpg?width=3200&amp;amp;height=1800&amp;amp;face=0_0_3200_1800&quot;&gt;&lt;a href=&quot;https://developer.hashicorp.com/terraform/language/syntax/configuration&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.hashicorp.com/terraform/language/syntax/configuration&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lJ39A/hyVS73R9yk/u8JTHQUe29AvB0nFeQkayk/img.jpg?width=3200&amp;amp;height=1800&amp;amp;face=0_0_3200_1800,https://scrap.kakaocdn.net/dn/2dJR4/hyVVAciHvv/MSyCKWH4Kr6JkpKgs3nGR1/img.jpg?width=3200&amp;amp;height=1800&amp;amp;face=0_0_3200_1800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Syntax - Configuration Language | Terraform | HashiCorp Developer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Key constructs of the native Terraform language syntax, including identifiers, arguments, blocks, and comments.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.hashicorp.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;IaC 란?&lt;/h3&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 수동 프로세스가 아닌 &lt;span data-token-index=&quot;1&quot;&gt;코드를 통해 인프라를 관리하고 프로비저닝&lt;/span&gt; 하는 것&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 프로비저닝 도구로써는 hcl로 작성되는 테라폼 외의 yaml, json 으로 작성되는 cloudformation 도 있음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- iac 에 속하지만 구성관리 도구로 분류되는 것에는 레드햇에서 제공하는 절차지향적인 ansible이 대표적&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;520&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/orrSt/btsGVLNtFMK/H9uNw6sbd2mSzO7RkajJsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/orrSt/btsGVLNtFMK/H9uNw6sbd2mSzO7RkajJsk/img.png&quot; data-alt=&quot;출처 :&amp;amp;amp;nbsp;https://medium.com/cloudnativeinfra/when-to-use-which-infrastructure-as-code-tool-665af289fbde&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/orrSt/btsGVLNtFMK/H9uNw6sbd2mSzO7RkajJsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2ForrSt%2FbtsGVLNtFMK%2FH9uNw6sbd2mSzO7RkajJsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;943&quot; height=&quot;520&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;520&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;amp;nbsp;https://medium.com/cloudnativeinfra/when-to-use-which-infrastructure-as-code-tool-665af289fbde&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;terraform init : init을 위해 필요한 provider.tf 예시와 블럭 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;provider&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;789&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n57go/btsGSRhJ5O7/XKo6XMmesCZCVs8Ou5yoGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n57go/btsGSRhJ5O7/XKo6XMmesCZCVs8Ou5yoGk/img.png&quot; data-alt=&quot;출처 :&amp;amp;nbsp;https://malwareanalysis.tistory.com/619&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n57go/btsGSRhJ5O7/XKo6XMmesCZCVs8Ou5yoGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn57go%2FbtsGSRhJ5O7%2FXKo6XMmesCZCVs8Ou5yoGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;789&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;789&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 :&amp;nbsp;https://malwareanalysis.tistory.com/619&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #161616; text-align: start;&quot;&gt;리소스 유형을 구현하는 플러그인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #161616; text-align: start;&quot;&gt;사용자를 대신하여 일반적으로 퍼블릭 클라우드 공급자의 서비스를 인증하고 연결하는 데 필요한 모든 코드가 포함&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #161616; text-align: start;&quot;&gt;사용 중인 클라우드 플랫폼 및 서비스에 대한 공급자를 찾아 구성에 추가한 다음 해당 리소스를 사용하여 인프라를 프로비저닝&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;aws, azure 등 퍼블릭 클라우드 서비스부터 SaaS 서비스 까지 다양하게 제공되고 있음&lt;/li&gt;
&lt;li&gt;특수한 경우 리소스마다 다른 프로바이더 사용하도록 설정 가능&lt;/li&gt;
&lt;li&gt;동일 프로바이더를 가지고 다른 조건을 사용할 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;terraform&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;tfstate 파일을 저장 관리하는 곳을 정의
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;cloud : terraform cloud를 사용하여 remote로 관리&lt;/li&gt;
&lt;li&gt;backend : local / s3 / consul 등을 사용 가능. default 는 local&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;해당 블럭이 있는 곳을 수정했다면 terraform init 을 다시 해 줘야 반영됨&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;version&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;시맨틱 버전 관리 방식 따름&lt;/li&gt;
&lt;li&gt;~&amp;gt; : 지정된 버전에서 가장 자리수가 낮은 구성요소만 증가하는 것을 허용&lt;/li&gt;
&lt;li&gt;&amp;gt;= : 지정된 버전 이상의 모든 버전 허용&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1713993465139&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;provider &quot;aws&quot; {
  profile = &quot;사용하는 aws profile&quot;
  region  = &quot;옵션&quot;

  default_tags {
    tags = {
      &quot;service&quot;      = &quot;example&quot;
    }
  }
}

# alias 를 사용하여 단일 프로바이더의 다중 설정 가능
# resource block 에서 provider = aws.seoul 을 추가하는 방식으로 사용 가능
provider &quot;aws&quot; {
  alias = &quot;seoul&quot;
  region = &quot;ap-northeast-2&quot;
}

terraform {
  required_providers {
    aws = {
      # 4.39.0 버전을 포함해서 4.39.x 다른 것만 허용
      version = &quot;~&amp;gt; 4.39.0&quot;
    }
  }

  cloud {
    organization = &quot;terraform cloud를 사용하는 경우 작성&quot;
    workspaces {
      name = &quot;terraform cloud 사용 시 작업하는 workspace를 명시&quot;
    }
  }
  
  backend &quot;local&quot; { # state를 보관하는 위치를 지정
    path = &quot;relative/path/to/terraform.tfstate&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;다른 프로바이더 사용해보기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;- 아래 공식 문서 링크에 따라가면 나오는 예제를 그대로 복붙하면 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://registry.terraform.io/providers/hashicorp/aws/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://registry.terraform.io/providers/hashicorp/aws/latest&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713996328847&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Terraform Registry&quot; data-og-description=&quot;&quot; data-og-host=&quot;registry.terraform.io&quot; data-og-source-url=&quot;https://registry.terraform.io/providers/hashicorp/aws/latest&quot; data-og-url=&quot;https://registry.terraform.io/providers/hashicorp/aws/latest&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://registry.terraform.io/providers/hashicorp/aws/latest&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://registry.terraform.io/providers/hashicorp/aws/latest&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Terraform Registry&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;registry.terraform.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;1120&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjRpdw/btsGVUKkF2k/sPga3wxUKSC2sBdU5AM4l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjRpdw/btsGVUKkF2k/sPga3wxUKSC2sBdU5AM4l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjRpdw/btsGVUKkF2k/sPga3wxUKSC2sBdU5AM4l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjRpdw%2FbtsGVUKkF2k%2FsPga3wxUKSC2sBdU5AM4l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1221&quot; height=&quot;1120&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;1120&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713996367568&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Terraform Registry&quot; data-og-description=&quot;&quot; data-og-host=&quot;registry.terraform.io&quot; data-og-source-url=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; data-og-url=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Terraform Registry&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;registry.terraform.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1713996165094&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Terraform Registry&quot; data-og-description=&quot;&quot; data-og-host=&quot;registry.terraform.io&quot; data-og-source-url=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; data-og-url=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://registry.terraform.io/providers/hashicorp/http/latest/docs/data-sources/http&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Terraform Registry&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;registry.terraform.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1713996172517&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;terraform {
  required_providers {
    architech-http = {
      source = &quot;architect-team/http&quot;
      version = &quot;~&amp;gt; 3.0&quot;
    }
    http = {
      source = &quot;hashicorp/http&quot;
    }
    aws-http = {
      source = &quot;terraform-aws-modules/http&quot;
    }
  }
}

data &quot;http&quot; &quot;example&quot; {
  provider = aws-http
  url = &quot;https://checkpoint-api.hashicorp.com/v1/check/terraform&quot;

  request_headers = {
    Accept = &quot;application/json&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra &amp;amp; DevOps/Terraform</category>
      <category>IAC</category>
      <category>terraform</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/80</guid>
      <comments>https://bravesunfish.tistory.com/80#entry80comment</comments>
      <pubDate>Thu, 25 Apr 2024 06:19:26 +0900</pubDate>
    </item>
    <item>
      <title>[Terraform] EKS IaC</title>
      <link>https://bravesunfish.tistory.com/79</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;테라폼 로고.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;307&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nRs12/btsGURHzVre/v4KCqWnIJeaVYg5BSSh9O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nRs12/btsGURHzVre/v4KCqWnIJeaVYg5BSSh9O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nRs12/btsGURHzVre/v4KCqWnIJeaVYg5BSSh9O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnRs12%2FbtsGURHzVre%2Fv4KCqWnIJeaVYg5BSSh9O1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;307&quot; data-filename=&quot;테라폼 로고.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;307&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #555555; text-align: start;&quot;&gt;Amazon EKS Workshop Study 2기&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #555555; text-align: start;&quot;&gt;8주차&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #555555; text-align: start;&quot;&gt;EKS IaC ( Terraform )&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;eks 환경을 테라폼으로 구성해보기&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;실습환경 구성&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;윈도우에서 구성하려면 mac 환경에서보다 이것저것 해 줘야할 게 많다. &lt;s&gt;brew 짱짱맨..&lt;/s&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;wsl2 설치 &amp;gt; 실행 &amp;gt; 테라폼 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713971159772&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wget -O- https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo &quot;deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main&quot; | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update &amp;amp;&amp;amp; sudo apt install terraform

# 테라폼 버전 정보 확인
terraform version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.how2shout.com/linux/how-to-install-eksctl-cli-tool-on-ubuntu-linux/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.how2shout.com/linux/how-to-install-eksctl-cli-tool-on-ubuntu-linux/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713972788486&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;How to Install eksctl CLI tool on Ubuntu Linux&quot; data-og-description=&quot;Using eksctl, users can easily deploy and scale containerized applications on AWS. Here we learn how to install eksctl on an Ubuntu system.&quot; data-og-host=&quot;www.how2shout.com&quot; data-og-source-url=&quot;https://www.how2shout.com/linux/how-to-install-eksctl-cli-tool-on-ubuntu-linux/&quot; data-og-url=&quot;https://www.how2shout.com/linux/how-to-install-eksctl-cli-tool-on-ubuntu-linux/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cKB5CI/hyVVLrjVtd/J6X8cOkaUP3j7IKvb3FeFK/img.png?width=766&amp;amp;height=489&amp;amp;face=0_0_766_489,https://scrap.kakaocdn.net/dn/zmMdc/hyVSUpU1lm/4sws6iWeDuynoEVuxAKuc0/img.png?width=766&amp;amp;height=489&amp;amp;face=0_0_766_489,https://scrap.kakaocdn.net/dn/cAOICG/hyVVKTt6PD/k1tlkPboe0E5pxaaVIisdK/img.png?width=739&amp;amp;height=506&amp;amp;face=0_0_739_506&quot;&gt;&lt;a href=&quot;https://www.how2shout.com/linux/how-to-install-eksctl-cli-tool-on-ubuntu-linux/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.how2shout.com/linux/how-to-install-eksctl-cli-tool-on-ubuntu-linux/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cKB5CI/hyVVLrjVtd/J6X8cOkaUP3j7IKvb3FeFK/img.png?width=766&amp;amp;height=489&amp;amp;face=0_0_766_489,https://scrap.kakaocdn.net/dn/zmMdc/hyVSUpU1lm/4sws6iWeDuynoEVuxAKuc0/img.png?width=766&amp;amp;height=489&amp;amp;face=0_0_766_489,https://scrap.kakaocdn.net/dn/cAOICG/hyVVKTt6PD/k1tlkPboe0E5pxaaVIisdK/img.png?width=739&amp;amp;height=506&amp;amp;face=0_0_739_506');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;How to Install eksctl CLI tool on Ubuntu Linux&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Using eksctl, users can easily deploy and scale containerized applications on AWS. Here we learn how to install eksctl on an Ubuntu system.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.how2shout.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;시스템 업데이트&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713972822129&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;AWSCLIL 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713972848642&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt install awscli

#자격증명
aws configure&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;EKSCTL 설치(amd64기)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713972882612&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl --silent --location &quot;https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz&quot; | tar xz -C /tmp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바이너리 파일 위치 이동&lt;/p&gt;
&lt;pre id=&quot;code_1713972920429&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mv /tmp/eksctl /usr/local/bin&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 확인&lt;/p&gt;
&lt;pre id=&quot;code_1713972968019&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;eksctl version
eksctl --help&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rSrXM/btsGVVh8Xny/M1U3pOZ9pqXJKW4QIKmxFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rSrXM/btsGVVh8Xny/M1U3pOZ9pqXJKW4QIKmxFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rSrXM/btsGVVh8Xny/M1U3pOZ9pqXJKW4QIKmxFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrSrXM%2FbtsGVVh8Xny%2FM1U3pOZ9pqXJKW4QIKmxFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1126&quot; height=&quot;570&quot; data-origin-width=&quot;1126&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;KUBECTL 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713973805762&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/1.29.3/2024-04-19/bin/linux/amd64/kubectl
chmod +x ./kubectl
mkdir -p $HOME/bin &amp;amp;&amp;amp; cp ./kubectl $HOME/bin/kubectl &amp;amp;&amp;amp; export PATH=$HOME/bin:$PATH

#확인
kubectl version --client&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1101&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/erGaPt/btsGSQQJzkF/0ziWepCPCkt0QhMuQOEPzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/erGaPt/btsGSQQJzkF/0ziWepCPCkt0QhMuQOEPzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/erGaPt/btsGSQQJzkF/0ziWepCPCkt0QhMuQOEPzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FerGaPt%2FbtsGSQQJzkF%2F0ziWepCPCkt0QhMuQOEPzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1101&quot; height=&quot;79&quot; data-origin-width=&quot;1101&quot; data-origin-height=&quot;79&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;HELM 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 바이너리 파일 설치부터하는 방법도 있는데, 공식 인스톨러 스크립트가 있다니 그것을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://helm.sh/docs/intro/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://helm.sh/docs/intro/install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713974023623&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Installing Helm&quot; data-og-description=&quot;Learn how to install and get running with Helm.&quot; data-og-host=&quot;helm.sh&quot; data-og-source-url=&quot;https://helm.sh/docs/intro/install/&quot; data-og-url=&quot;https://helm.sh/docs/intro/install/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vdZid/hyVVCA8Z4t/kDKrooZDFg6uEin667qzBk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://helm.sh/docs/intro/install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://helm.sh/docs/intro/install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vdZid/hyVVCA8Z4t/kDKrooZDFg6uEin667qzBk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Installing Helm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Learn how to install and get running with Helm.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;helm.sh&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1713973978759&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+) third party 를 사용한 방법(apt)&lt;/p&gt;
&lt;pre id=&quot;code_1713974073661&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg &amp;gt; /dev/null
sudo apt-get install apt-transport-https --yes
echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main&quot; | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daDdzQ/btsGTfWLgZq/j1yOO1dr2Yiqlll1ujYEYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daDdzQ/btsGTfWLgZq/j1yOO1dr2Yiqlll1ujYEYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daDdzQ/btsGTfWLgZq/j1yOO1dr2Yiqlll1ujYEYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaDdzQ%2FbtsGTfWLgZq%2Fj1yOO1dr2Yiqlll1ujYEYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1117&quot; height=&quot;117&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테라폼 실습을 위한 디렉토리&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713974285509&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir learn-terraform
cd learn-terraform
touch main.tf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; Amazon Linux 2 최신 ami id 찾기 &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713974401511&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#aws ec2 describe-images --owners self amazon
aws ec2 describe-images --owners amazon --filters &quot;Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2&quot; &quot;Name=state,Values=available&quot; --query 'Images|sort_by(@, &amp;amp;CreationDate)[-1].[ImageId, Name]' --output text
ami-0217b147346e48e84   amzn2-ami-hvm-2.0.20240412.0-x86_64-gp2

aws ec2 describe-images --owners amazon --filters &quot;Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2&quot; &quot;Name=state,Values=available&quot; --query 'Images|sort_by(@, &amp;amp;CreationDate)[-1].[ImageId]' --output text
ami-0217b147346e48e84

AL2ID=`aws ec2 describe-images --owners amazon --filters &quot;Name=name,Values=amzn2-ami-hvm-2.0.*-x86_64-gp2&quot; &quot;Name=state,Values=available&quot; --query 'Images|sort_by(@, &amp;amp;CreationDate)[-1].[ImageId]' --output text`
echo $AL2ID&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9m6Uh/btsGSR9TldV/oxshe6lV9GG7saT5xuX6Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9m6Uh/btsGSR9TldV/oxshe6lV9GG7saT5xuX6Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9m6Uh/btsGSR9TldV/oxshe6lV9GG7saT5xuX6Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9m6Uh%2FbtsGSR9TldV%2Foxshe6lV9GG7saT5xuX6Yk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1102&quot; height=&quot;60&quot; data-origin-width=&quot;1102&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ec2 생성 모니터링&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713974469292&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# [터미널1] EC2 생성 모니터링
export AWS_PAGER=&quot;&quot;
while true; do aws ec2 describe-instances --query &quot;Reservations[*].Instances[*].{PublicIPAdd:PublicIpAddress,InstanceName:Tags[?Key=='Name']|[0].Value,Status:State.Name}&quot; --filters Name=instance-state-name,Values=running --output text ; echo &quot;------------------------------&quot; ; sleep 1; done&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch7Guw/btsGULtT5Ko/cTrBS4JMIsQhsenxun4TY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch7Guw/btsGULtT5Ko/cTrBS4JMIsQhsenxun4TY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch7Guw/btsGULtT5Ko/cTrBS4JMIsQhsenxun4TY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch7Guw%2FbtsGULtT5Ko%2FcTrBS4JMIsQhsenxun4TY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1108&quot; height=&quot;291&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Terraform 기본 사용법 -&amp;gt; 별도 포스팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;a href=&quot;https://bravesunfish.tistory.com/80&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bravesunfish.tistory.com/80&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713996460826&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Terraform] 테라폼 기초 설명 &amp;amp; init 코드 구성 요소&quot; data-og-description=&quot;Terraform 이란?- 하시코프사에서 공개한 IaC 도구- 블록에서 작성된 타겟 리소스에 대한 api 를 테라폼 프로바이더가 호출- 실행(apply) 하면 생성되는 tfstate 파일을 기준으로 상태를 비교하여 선언된 &quot; data-og-host=&quot;bravesunfish.tistory.com&quot; data-og-source-url=&quot;https://bravesunfish.tistory.com/80&quot; data-og-url=&quot;https://bravesunfish.tistory.com/80&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lsFfJ/hyVVx7HTJz/xH7zLbqdXqSZXpKX3awvj0/img.png?width=800&amp;amp;height=191&amp;amp;face=0_0_800_191,https://scrap.kakaocdn.net/dn/cwbNuG/hyVS4e0Lv8/ThVKjPuZYOZDnvFL6m0M01/img.png?width=800&amp;amp;height=191&amp;amp;face=0_0_800_191,https://scrap.kakaocdn.net/dn/N8LBy/hyVVJ1mulc/GRmfmZvEVMz473KyBSIKB1/img.png?width=1630&amp;amp;height=1418&amp;amp;face=0_0_1630_1418&quot;&gt;&lt;a href=&quot;https://bravesunfish.tistory.com/80&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bravesunfish.tistory.com/80&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lsFfJ/hyVVx7HTJz/xH7zLbqdXqSZXpKX3awvj0/img.png?width=800&amp;amp;height=191&amp;amp;face=0_0_800_191,https://scrap.kakaocdn.net/dn/cwbNuG/hyVS4e0Lv8/ThVKjPuZYOZDnvFL6m0M01/img.png?width=800&amp;amp;height=191&amp;amp;face=0_0_800_191,https://scrap.kakaocdn.net/dn/N8LBy/hyVVJ1mulc/GRmfmZvEVMz473KyBSIKB1/img.png?width=1630&amp;amp;height=1418&amp;amp;face=0_0_1630_1418');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Terraform] 테라폼 기초 설명 &amp;amp; init 코드 구성 요소&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Terraform 이란?- 하시코프사에서 공개한 IaC 도구- 블록에서 작성된 타겟 리소스에 대한 api 를 테라폼 프로바이더가 호출- 실행(apply) 하면 생성되는 tfstate 파일을 기준으로 상태를 비교하여 선언된&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bravesunfish.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Terraform 으로 EKS 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;테라폼 배포 실행&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 테라폼은 디렉토리 기준으로 파일을 읽기 때문에 실행하고자하는 tf 가 있는 곳에서 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVgXEY/btsGTB6nqsg/LenwapaKrkBVhu6CMNyVR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVgXEY/btsGTB6nqsg/LenwapaKrkBVhu6CMNyVR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVgXEY/btsGTB6nqsg/LenwapaKrkBVhu6CMNyVR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVgXEY%2FbtsGTB6nqsg%2FLenwapaKrkBVhu6CMNyVR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1269&quot; height=&quot;324&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1713975430524&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 초기화
terraform init
ls -al
tree .terraform

# plan 확인
terraform plan

# apply 실행
terraform apply
 Enter a value: yes 입력

# ec2 생성 확인 : aws 웹 관리 콘솔에서도 확인 - 서울 리전 선택
export AWS_PAGER=&quot;&quot;
aws ec2 describe-instances --output table

# 테라폼 정보 확인
terraform state list
terraform show
terraform show aws_instance.example&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oAHJo/btsGT9oasNk/v9s0dlGJCXcnDsNesvT5Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oAHJo/btsGT9oasNk/v9s0dlGJCXcnDsNesvT5Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oAHJo/btsGT9oasNk/v9s0dlGJCXcnDsNesvT5Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoAHJo%2FbtsGT9oasNk%2Fv9s0dlGJCXcnDsNesvT5Nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1108&quot; height=&quot;292&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx6bWJ/btsGWaTLxxB/XkI8NE9nYZLuC63OnkqUOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx6bWJ/btsGWaTLxxB/XkI8NE9nYZLuC63OnkqUOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx6bWJ/btsGWaTLxxB/XkI8NE9nYZLuC63OnkqUOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx6bWJ%2FbtsGWaTLxxB%2FXkI8NE9nYZLuC63OnkqUOk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;960&quot; height=&quot;1209&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;1209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드 파일 수정 &amp;gt; 반영 확인 : 태그 수정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkbvTD/btsGS5tiDm7/IUvjkjH60c9q9JTyk9iHN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkbvTD/btsGS5tiDm7/IUvjkjH60c9q9JTyk9iHN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkbvTD/btsGS5tiDm7/IUvjkjH60c9q9JTyk9iHN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkbvTD%2FbtsGS5tiDm7%2FIUvjkjH60c9q9JTyk9iHN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;763&quot; height=&quot;402&quot; data-origin-width=&quot;763&quot; data-origin-height=&quot;402&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;plan 으로 변경 예정 값 확인 &amp;amp; apply 로 적용&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z4nxF/btsGUVDct2l/1itoY6RwxxzfFKR9xlZPkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z4nxF/btsGUVDct2l/1itoY6RwxxzfFKR9xlZPkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z4nxF/btsGUVDct2l/1itoY6RwxxzfFKR9xlZPkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz4nxF%2FbtsGUVDct2l%2F1itoY6RwxxzfFKR9xlZPkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1114&quot; height=&quot;646&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;646&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;345&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLck1z/btsGVUp0HhW/I2jF1dQcwAkcKQgj46HwKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLck1z/btsGVUp0HhW/I2jF1dQcwAkcKQgj46HwKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLck1z/btsGVUp0HhW/I2jF1dQcwAkcKQgj46HwKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLck1z%2FbtsGVUp0HhW%2FI2jF1dQcwAkcKQgj46HwKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;939&quot; height=&quot;345&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;345&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 첫 번째 EKS 클러스터 &lt;span data-token-index=&quot;1&quot;&gt;배포&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713976171390&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 코드 가져오기
git clone https://github.com/gasida/aews-cicd.git
cd aews-cicd/4

# terraform 환경 변수 저장
export TF_VAR_KeyName='peach'
echo $TF_VAR_KeyName

# 
terraform init
terraform plan

# 10분 후 배포 완료
terraform apply -auto-approve&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만들어 져야할 것 : VPC, Subnet, IGW, NATGW, Routing Table, EKS, EKS SG&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;state 파일 생성 완&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;894&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgbUZl/btsGWbyne8P/FBmhABhHqhoyuFaoncuKF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgbUZl/btsGWbyne8P/FBmhABhHqhoyuFaoncuKF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgbUZl/btsGWbyne8P/FBmhABhHqhoyuFaoncuKF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgbUZl%2FbtsGWbyne8P%2FFBmhABhHqhoyuFaoncuKF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1059&quot; height=&quot;894&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;894&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713977325802&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
kubectl get node -v=6

# EKS 클러스터 인증 정보 업데이트
CLUSTER_NAME=myeks
aws eks update-kubeconfig --region ap-northeast-2 --name $CLUSTER_NAME
kubectl config rename-context &quot;arn:aws:eks:ap-northeast-2:$(aws sts get-caller-identity --query 'Account' --output text):cluster/$CLUSTER_NAME&quot; &quot;Aews-Labs&quot;

#
kubectl cluster-info
kubectl get node --label-columns=node.kubernetes.io/instance-type,eks.amazonaws.com/capacityType,topology.kubernetes.io/zone
kubectl get pod -A&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;451&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0PvM5/btsGVs8rffP/lcGeIrjkAOCXsDqoMlRTR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0PvM5/btsGVs8rffP/lcGeIrjkAOCXsDqoMlRTR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0PvM5/btsGVs8rffP/lcGeIrjkAOCXsDqoMlRTR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0PvM5%2FbtsGVs8rffP%2FlcGeIrjkAOCXsDqoMlRTR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1107&quot; height=&quot;451&quot; data-origin-width=&quot;1107&quot; data-origin-height=&quot;451&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zlhJC/btsGVMev6Tm/3zkJyt9uw4NtqWbQMTUKe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zlhJC/btsGVMev6Tm/3zkJyt9uw4NtqWbQMTUKe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zlhJC/btsGVMev6Tm/3zkJyt9uw4NtqWbQMTUKe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzlhJC%2FbtsGVMev6Tm%2F3zkJyt9uw4NtqWbQMTUKe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;388&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;두 번째 배포 &amp;gt; 코드 재사용 검증&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 코드를 그대로 복사해서 myeks2 로 변수만 바꿔서 새로 apply 했으니 그대로 생성되는가 확인&lt;/p&gt;
&lt;pre id=&quot;code_1713992676289&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
cd ..
mkdir 5
cd 5
cp ../4/*.tf .
ls

#
terraform init
terraform apply -auto-approve -var=ClusterBaseName=myeks2 -var=KubernetesVersion=&quot;1.28&quot;

# EKS 클러스터 인증 정보 가져오기
CLUSTER_NAME2=myeks2
aws eks update-kubeconfig --region ap-northeast-2 --name $CLUSTER_NAME2 --kubeconfig ./myeks2config

# EKS 클러스터 정보 확인
kubectl --kubeconfig ./myeks2config get node 
kubectl --kubeconfig ./myeks2config get pod -A&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1101&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z3r74/btsGS66QpkU/EV4DzkXWFbVrjo3kfiK8T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z3r74/btsGS66QpkU/EV4DzkXWFbVrjo3kfiK8T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z3r74/btsGS66QpkU/EV4DzkXWFbVrjo3kfiK8T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ3r74%2FbtsGS66QpkU%2FEV4DzkXWFbVrjo3kfiK8T0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1101&quot; height=&quot;397&quot; data-origin-width=&quot;1101&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;493&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brC3WE/btsGUVXwI4z/2ER3QMm8VzDxEsjqFRXwjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brC3WE/btsGUVXwI4z/2ER3QMm8VzDxEsjqFRXwjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brC3WE/btsGUVXwI4z/2ER3QMm8VzDxEsjqFRXwjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrC3WE%2FbtsGUVXwI4z%2F2ER3QMm8VzDxEsjqFRXwjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;955&quot; height=&quot;493&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;493&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;688&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ckn7RA/btsGTa2pe97/kKPlw1ksF7vawOsC6KT101/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ckn7RA/btsGTa2pe97/kKPlw1ksF7vawOsC6KT101/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ckn7RA/btsGTa2pe97/kKPlw1ksF7vawOsC6KT101/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fckn7RA%2FbtsGTa2pe97%2FkKPlw1ksF7vawOsC6KT101%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;850&quot; height=&quot;688&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;688&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Infra &amp;amp; DevOps/Terraform</category>
      <category>AWS</category>
      <category>DevOps</category>
      <category>EKS</category>
      <category>IAC</category>
      <category>terraform</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/79</guid>
      <comments>https://bravesunfish.tistory.com/79#entry79comment</comments>
      <pubDate>Wed, 24 Apr 2024 23:10:44 +0900</pubDate>
    </item>
    <item>
      <title>[ArgoCD] ArgoCD 설치 및 실습</title>
      <link>https://bravesunfish.tistory.com/78</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;argo-horizontal-color.png&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;696&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsEs7y/btsGM0ZpTgC/AjLHdZkEdske2QoygYs6gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsEs7y/btsGM0ZpTgC/AjLHdZkEdske2QoygYs6gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsEs7y/btsGM0ZpTgC/AjLHdZkEdske2QoygYs6gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsEs7y%2FbtsGM0ZpTgC%2FAjLHdZkEdske2QoygYs6gK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;625&quot; height=&quot;290&quot; data-filename=&quot;argo-horizontal-color.png&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;696&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Argo&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개념&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;ArgoCD란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- gitops를 구현하기 위해 쿠버네티스 어플리케이션 자동배포를 위한 오픈소스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ci/cd 중 cd 를 담당&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 선언적 어플리케이션 관리를 사용 : 명시적으로 원하는 상태를 선언, argoCD가 클러스터 상태와 비교하여 선언된 상태로 유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 활용 ci/cd 아키텍처&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;1649&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uM80K/btsGM0SGBe9/OrcKYoJxbn7xRr8ufYhXd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uM80K/btsGM0SGBe9/OrcKYoJxbn7xRr8ufYhXd0/img.png&quot; data-alt=&quot;출처 : 스터디 자료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uM80K/btsGM0SGBe9/OrcKYoJxbn7xRr8ufYhXd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuM80K%2FbtsGM0SGBe9%2FOrcKYoJxbn7xRr8ufYhXd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1730&quot; height=&quot;1649&quot; data-origin-width=&quot;1730&quot; data-origin-height=&quot;1649&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 스터디 자료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;api 서버 : &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;Web UI, CLI 및 CI/CD 시스템에서 사용되는 API를 노출하는 gRPC/REST 서버&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;&lt;/span&gt;애플리케이션 관리 및 상태 보고&lt;/li&gt;
&lt;li&gt;애플리케이션 작업 호출 (예: 동기화, 롤백, 사용자 정의 작업)&lt;/li&gt;
&lt;li&gt;리포지토리 및 클러스터 자격 증명 관리 (K8s 시크릿으로 저장)&lt;/li&gt;
&lt;li&gt;외부 식별 공급자로의 인증 및 인증 위임&lt;/li&gt;
&lt;li&gt;RBAC 시행&lt;/li&gt;
&lt;li&gt;Git 웹훅 이벤트를 수신 및 전달하는 리스너/포워더
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot; data-testid=&quot;conversation-turn-3&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;c29a3c0e-fe3a-448e-853b-7ff3fd844edb&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span data-token-index=&quot;0&quot;&gt;Repository Server : Git 연결 및 배포할 yaml 생성&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;애플리케이션 매니페스트를 보관하는 Git 저장소의 로컬 캐시를 유지하는 내부 서비스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;다음 입력이 제공될 때 Kubernetes 매니페스트를 생성하고 반환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span data-token-index=&quot;0&quot;&gt;Application Controller : k8s 리소스 모니터링, Git과 비교&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;지속적으로 실행 중인 애플리케이션을 모니터링하고 현재 라이브 상태를 저장소에 지정된 목표 상태와 비교하는 Kubernetes 컨트롤러&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;OutOfSync 애플리케이션 상태를 감지하고 선택적으로 보정 조치&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;라이프사이클 이벤트 (PreSync, Sync, PostSync)에 대한 사용자 정의 후크를 호출&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 동작방식&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Git에 push, k8s 배포 방식인 helm / kustomize 사용&lt;/li&gt;
&lt;li&gt;argoCD 가 git 저장소의 상태 변경 감지&lt;/li&gt;
&lt;li&gt;변경 내용을 k8s에 배포, 반영&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실습 : gui&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;helm을 이용한 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713618873480&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# helm 설치
cat &amp;lt;&amp;lt;EOT &amp;gt; argocd-values.yaml
global:
  domain: argocd.$MyDomain

configs:
  params:
    server.insecure: true

controller:
  metrics:
    enabled: true
    serviceMonitor:
      enabled: true

server:
  ingress:
    enabled: true
    controller: aws
    ingressClassName: alb
    hostname: &quot;argocd.$MyDomain&quot;
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/backend-protocol: HTTP
      alb.ingress.kubernetes.io/listen-ports: '[{&quot;HTTPS&quot;:80}, {&quot;HTTPS&quot;:443}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/ssl-redirect: '443'
    aws:
      serviceType: ClusterIP
      backendProtocolVersion: GRPC
  metrics:
    enabled: true
    serviceMonitor:
      enabled: true

repoServer:
  metrics:
    enabled: true
    serviceMonitor:
      enabled: true

applicationSet:
  metrics:
    enabled: true
    serviceMonitor:
      enabled: true

notifications:
  metrics:
    enabled: true
    serviceMonitor:
      enabled: true
EOT

kubectl create ns argocd
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd --version 6.7.11 -f argocd-values.yaml --namespace argocd

# 확인
kubectl get ingress,pod,svc -n argocd
kubectl get crd | grep argo

# 최초 접속 암호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath=&quot;{.data.password}&quot; | base64 -d ;echo
#Zhl8OmU3sRGl9eEk&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5JcmQ/btsGO645Qed/UQeiQHsu77m7lHiPiUWnKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5JcmQ/btsGO645Qed/UQeiQHsu77m7lHiPiUWnKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5JcmQ/btsGO645Qed/UQeiQHsu77m7lHiPiUWnKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5JcmQ%2FbtsGO645Qed%2FUQeiQHsu77m7lHiPiUWnKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1312&quot; height=&quot;763&quot; data-origin-width=&quot;1312&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQbgXa/btsGOHEnqdV/JUVD9sMY5Y6FmB3tIHUTsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQbgXa/btsGOHEnqdV/JUVD9sMY5Y6FmB3tIHUTsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQbgXa/btsGOHEnqdV/JUVD9sMY5Y6FmB3tIHUTsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQbgXa%2FbtsGOHEnqdV%2FJUVD9sMY5Y6FmB3tIHUTsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1327&quot; height=&quot;223&quot; data-origin-width=&quot;1327&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;최초 접속&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://argocd.peachengineer.click/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://argocd.peachengineer.click/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713619013287&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Argo CD&quot; data-og-description=&quot;&quot; data-og-host=&quot;argocd.peachengineer.click&quot; data-og-source-url=&quot;https://argocd.peachengineer.click/&quot; data-og-url=&quot;https://argocd.peachengineer.click/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://argocd.peachengineer.click/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://argocd.peachengineer.click/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Argo CD&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;argocd.peachengineer.click&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;admin / 위에 나온 비밀번호는 user info &amp;gt; UPDATE PASSWORD 변경&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1531&quot; data-origin-height=&quot;1210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqJh8O/btsGPpQ0YTn/lfPtz5QT3AeaYFF55AaoJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqJh8O/btsGPpQ0YTn/lfPtz5QT3AeaYFF55AaoJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqJh8O/btsGPpQ0YTn/lfPtz5QT3AeaYFF55AaoJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqJh8O%2FbtsGPpQ0YTn%2FlfPtz5QT3AeaYFF55AaoJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1531&quot; height=&quot;1210&quot; data-origin-width=&quot;1531&quot; data-origin-height=&quot;1210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 화면에서 + 로 app create&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1485&quot; data-origin-height=&quot;1269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F0tE2/btsGNt72wdm/T3UuBlQTNFLmyo0ALT8DBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F0tE2/btsGNt72wdm/T3UuBlQTNFLmyo0ALT8DBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F0tE2/btsGNt72wdm/T3UuBlQTNFLmyo0ALT8DBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF0tE2%2FbtsGNt72wdm%2FT3UuBlQTNFLmyo0ALT8DBK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1485&quot; height=&quot;1269&quot; data-origin-width=&quot;1485&quot; data-origin-height=&quot;1269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;1266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boxE8A/btsGOfuAiT6/zIyn9jTWfJkhrBsuVgreoK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boxE8A/btsGOfuAiT6/zIyn9jTWfJkhrBsuVgreoK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boxE8A/btsGOfuAiT6/zIyn9jTWfJkhrBsuVgreoK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboxE8A%2FbtsGOfuAiT6%2FzIyn9jTWfJkhrBsuVgreoK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1489&quot; height=&quot;1266&quot; data-origin-width=&quot;1489&quot; data-origin-height=&quot;1266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sync &amp;gt; synchronize 로 배포&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;1149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AHEDq/btsGNDippoC/VPkbi54fmjSzv7IrHpwJEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AHEDq/btsGNDippoC/VPkbi54fmjSzv7IrHpwJEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AHEDq/btsGNDippoC/VPkbi54fmjSzv7IrHpwJEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAHEDq%2FbtsGNDippoC%2FVPkbi54fmjSzv7IrHpwJEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1483&quot; height=&quot;1149&quot; data-origin-width=&quot;1483&quot; data-origin-height=&quot;1149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터링 : 새로운 파드 생성 확인&lt;/p&gt;
&lt;pre id=&quot;code_1713624781958&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;watch -d kubectl get deploy -n first --show-labels&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1353&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qEFLK/btsGM8XlMEA/kjI7uNJtLtOEcks2KD5KMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qEFLK/btsGM8XlMEA/kjI7uNJtLtOEcks2KD5KMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qEFLK/btsGM8XlMEA/kjI7uNJtLtOEcks2KD5KMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqEFLK%2FbtsGM8XlMEA%2FkjI7uNJtLtOEcks2KD5KMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1353&quot; height=&quot;265&quot; data-origin-width=&quot;1353&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gui 에서 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2239&quot; data-origin-height=&quot;1116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi0vY8/btsGM923Wwi/PYeXXdXLJqkK07c33gPgX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi0vY8/btsGM923Wwi/PYeXXdXLJqkK07c33gPgX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi0vY8/btsGM923Wwi/PYeXXdXLJqkK07c33gPgX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi0vY8%2FbtsGM923Wwi%2FPYeXXdXLJqkK07c33gPgX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2239&quot; height=&quot;1116&quot; data-origin-width=&quot;2239&quot; data-origin-height=&quot;1116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 리소스 클릭 후 확인 : 각각 LIVE MANIFEST(쿠버네티스 정보)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;1153&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AtJvj/btsGOH5sSqF/kVuMq9cBudt2wX5KI0bNA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AtJvj/btsGOH5sSqF/kVuMq9cBudt2wX5KI0bNA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AtJvj/btsGOH5sSqF/kVuMq9cBudt2wX5KI0bNA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAtJvj%2FbtsGOH5sSqF%2FkVuMq9cBudt2wX5KI0bNA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1423&quot; height=&quot;1153&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;1153&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/12Mwb/btsGNC4Skxf/V5akcRgAfuI0KngGo3Du10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/12Mwb/btsGNC4Skxf/V5akcRgAfuI0KngGo3Du10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/12Mwb/btsGNC4Skxf/V5akcRgAfuI0KngGo3Du10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F12Mwb%2FbtsGNC4Skxf%2FV5akcRgAfuI0KngGo3Du10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1266&quot; height=&quot;428&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라벨에 추가됨&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;175&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAjAG6/btsGL24PgYX/YuNc9x90OsxmwltfOe2kY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAjAG6/btsGL24PgYX/YuNc9x90OsxmwltfOe2kY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAjAG6/btsGL24PgYX/YuNc9x90OsxmwltfOe2kY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAjAG6%2FbtsGL24PgYX%2FYuNc9x90OsxmwltfOe2kY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1345&quot; height=&quot;175&quot; data-origin-width=&quot;1345&quot; data-origin-height=&quot;175&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;k8s에서&amp;nbsp;직접&amp;nbsp;수정&amp;nbsp;&amp;rarr;&amp;nbsp;argocd&amp;nbsp;싱크(반영)&amp;nbsp;확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713625647262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 아래 추가
kubectl edit deploy -n first myweb
...
  labels:
    add: label-test
    add2: k8s-test
...&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xITcS/btsGMAtrTLI/NXEJKciyf63flPUCaIylcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xITcS/btsGMAtrTLI/NXEJKciyf63flPUCaIylcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xITcS/btsGMAtrTLI/NXEJKciyf63flPUCaIylcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxITcS%2FbtsGMAtrTLI%2FNXEJKciyf63flPUCaIylcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1324&quot; height=&quot;612&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;922&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmcJdd/btsGL3bziCc/lrZKQ2hOOwzwskYkna7Ayk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmcJdd/btsGL3bziCc/lrZKQ2hOOwzwskYkna7Ayk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmcJdd/btsGL3bziCc/lrZKQ2hOOwzwskYkna7Ayk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmcJdd%2FbtsGL3bziCc%2FlrZKQ2hOOwzwskYkna7Ayk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1288&quot; height=&quot;922&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;922&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;but, diff 에서는 확인 x&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;198&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Db5dF/btsGL2Kxt80/QeGIx8g0ImlVOCTpMaOnsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Db5dF/btsGL2Kxt80/QeGIx8g0ImlVOCTpMaOnsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Db5dF/btsGL2Kxt80/QeGIx8g0ImlVOCTpMaOnsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDb5dF%2FbtsGL2Kxt80%2FQeGIx8g0ImlVOCTpMaOnsK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1299&quot; height=&quot;198&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;198&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Git 레포에서 값 변경 &amp;gt; commit &amp;gt; diff 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTfBdn/btsGMCdLipz/89qen1R7A8Ctrv8tjWkRa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTfBdn/btsGMCdLipz/89qen1R7A8Ctrv8tjWkRa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTfBdn/btsGMCdLipz/89qen1R7A8Ctrv8tjWkRa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTfBdn%2FbtsGMCdLipz%2F89qen1R7A8Ctrv8tjWkRa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1234&quot; height=&quot;1225&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 상태는, Git을 기준으로 보자면 LIVE MANIFEST(K8S)형상이 뒤떨어진것으로 볼 수 있다 &amp;rarr; OutOfSync 상태니 Sync&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;1072&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cFI1KV/btsGMU58GLt/kOKZYSZMKFXjpWNDlntQtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cFI1KV/btsGMU58GLt/kOKZYSZMKFXjpWNDlntQtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cFI1KV/btsGMU58GLt/kOKZYSZMKFXjpWNDlntQtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcFI1KV%2FbtsGMU58GLt%2FkOKZYSZMKFXjpWNDlntQtK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1273&quot; height=&quot;1072&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;1072&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;실습 : cli&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Argo CD cli 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713626147325&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm -f argocd-linux-amd64

#
argocd version

#
argocd login argocd.$MyDomain
Username: admin
Password: ###
'admin:login' logged in successfully

#
kubectl config get-contexts -o name
argocd cluster add peach@myeks.ap-northeast-2.eksctl.io
y 입력

#
argocd app list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;838&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA7FYS/btsGL15WY0C/ZFEnuq8lp1LF5By2APHvVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA7FYS/btsGL15WY0C/ZFEnuq8lp1LF5By2APHvVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA7FYS/btsGL15WY0C/ZFEnuq8lp1LF5By2APHvVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA7FYS%2FbtsGL15WY0C%2FZFEnuq8lp1LF5By2APHvVk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1323&quot; height=&quot;838&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;838&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; Application 생성 with CLi &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713626351763&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
kubectl config set-context --current --namespace=argocd
argocd app create guestbook --repo https://github.com/argoproj/argocd-example-apps.git --path guestbook --dest-server https://kubernetes.default.svc --dest-namespace default

#
argocd app list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CWJ7v/btsGMht3Hwt/Hnu7XEYrMh2qVSFgAr70qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CWJ7v/btsGMht3Hwt/Hnu7XEYrMh2qVSFgAr70qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CWJ7v/btsGMht3Hwt/Hnu7XEYrMh2qVSFgAr70qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCWJ7v%2FbtsGMht3Hwt%2FHnu7XEYrMh2qVSFgAr70qK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1318&quot; height=&quot;267&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;841&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfu7rt/btsGOeoUZP7/osnkzxN6lZFQo7pYyeH1Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfu7rt/btsGOeoUZP7/osnkzxN6lZFQo7pYyeH1Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfu7rt/btsGOeoUZP7/osnkzxN6lZFQo7pYyeH1Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfu7rt%2FbtsGOeoUZP7%2FosnkzxN6lZFQo7pYyeH1Q0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1435&quot; height=&quot;841&quot; data-origin-width=&quot;1435&quot; data-origin-height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sync 어플리케이션&lt;/p&gt;
&lt;pre id=&quot;code_1713626445963&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
argocd app get guestbook

# 모니터링
watch -d kubectl get pod,svc,ep

#
argocd app sync guestbook&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;1090&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kzjc4/btsGOH5sYTC/n8MblpDwRi5Pc8F15bkYH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kzjc4/btsGOH5sYTC/n8MblpDwRi5Pc8F15bkYH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kzjc4/btsGOH5sYTC/n8MblpDwRi5Pc8F15bkYH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKzjc4%2FbtsGOH5sYTC%2Fn8MblpDwRi5Pc8F15bkYH0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1323&quot; height=&quot;1090&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;1090&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;993&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R82py/btsGL1LC8U6/ySycykMWoO7qEJTr2tez9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R82py/btsGL1LC8U6/ySycykMWoO7qEJTr2tez9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R82py/btsGL1LC8U6/ySycykMWoO7qEJTr2tez9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR82py%2FbtsGL1LC8U6%2FySycykMWoO7qEJTr2tez9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1357&quot; height=&quot;993&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;993&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2191&quot; data-origin-height=&quot;967&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqJ6hi/btsGNgHLWyi/yxGT8pWnuI3EkhMiKrCmEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqJ6hi/btsGNgHLWyi/yxGT8pWnuI3EkhMiKrCmEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqJ6hi/btsGNgHLWyi/yxGT8pWnuI3EkhMiKrCmEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqJ6hi%2FbtsGNgHLWyi%2FyxGT8pWnuI3EkhMiKrCmEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2191&quot; height=&quot;967&quot; data-origin-width=&quot;2191&quot; data-origin-height=&quot;967&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;삭제&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713626533388&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;argocd app delete guestbook
Are you sure you want to delete 'guestbook' and all its resources? [y/n] y

# ns default 로 변경
kubectl ns default&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;개념&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;Argo Rollouts 란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;Kubernetes 위에 구축된 애플리케이션 배포를 관리하는 오픈 소스 롤링 업데이트 및 릴리스 관리 도구&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #0d0d0d; text-align: start;&quot;&gt;- 기능&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;롤링 업데이트 및 롤백 관리&lt;/b&gt;: Argo Rollouts는 애플리케이션의 새로운 버전을 롤아웃하고 이전 버전으로 롤백하는 것과 같은 롤링 업데이트 및 롤백을 관리합니다. 이를 통해 애플리케이션의 신뢰성과 안정성을 유지하면서 업데이트를 수행할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;블루-그린 배포&lt;/b&gt;: 블루-그린 배포는 새로운 버전의 애플리케이션을 기존 버전과 완전히 분리된 환경에서 테스트할 수 있는 기능을 제공합니다. Argo Rollouts는 블루-그린 배포를 지원하여 안정성을 향상시키고 사용자들에게 무중단 서비스를 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;카나리아 배포&lt;/b&gt;: 카나리아 배포는 새로운 버전의 애플리케이션을 일부 사용자 또는 특정 환경에 먼저 릴리스하여 문제를 사전에 발견하고 안정성을 확보하는 방법입니다. Argo Rollouts는 카나리아 배포를 쉽게 설정하고 관리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로모션 전략&lt;/b&gt;: Argo Rollouts는 배포 전략을 정의하여 특정 조건에 따라 배포를 자동으로 진행하거나 일시 중단하는 등의 작업을 수행할 수 있습니다. 이를 통해 유연한 배포 전략을 구성할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프로모션 상태 모니터링&lt;/b&gt;: 롤링 업데이트 또는 롤백 중에도 Argo Rollouts는 애플리케이션의 상태를 모니터링하고 프로모션의 진행 상황을 실시간으로 추적할 수 있습니다. 이를 통해 배포 프로세스의 투명성을 확보할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 동작방식&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mcHQx/btsGNHyeyi1/OTG4rEdngIisZHK1xIXzd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mcHQx/btsGNHyeyi1/OTG4rEdngIisZHK1xIXzd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mcHQx/btsGNHyeyi1/OTG4rEdngIisZHK1xIXzd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmcHQx%2FbtsGNHyeyi1%2FOTG4rEdngIisZHK1xIXzd0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;616&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;616&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배포 전략&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Blue-Green
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1733&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bidPcF/btsGPo5FiuN/R7jou0JE1IlVbRV1l5hDR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bidPcF/btsGPo5FiuN/R7jou0JE1IlVbRV1l5hDR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bidPcF/btsGPo5FiuN/R7jou0JE1IlVbRV1l5hDR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbidPcF%2FbtsGPo5FiuN%2FR7jou0JE1IlVbRV1l5hDR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1340&quot; height=&quot;1733&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1733&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Canary
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1733&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bci2uv/btsGNtNJuWp/hCpQhwVViacT764sq7KTWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bci2uv/btsGNtNJuWp/hCpQhwVViacT764sq7KTWk/img.png&quot; data-alt=&quot;출처 : 스터디 자료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bci2uv/btsGNtNJuWp/hCpQhwVViacT764sq7KTWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbci2uv%2FbtsGNtNJuWp%2FhCpQhwVViacT764sq7KTWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1340&quot; height=&quot;1733&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;1733&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 스터디 자료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특징&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #0d0d0d; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;세밀한 가중치 기반 트래픽 이동&lt;/li&gt;
&lt;li&gt;자동 롤백 및 프로모션&lt;/li&gt;
&lt;li&gt;수동 판단&lt;/li&gt;
&lt;li&gt;사용자 정의 메트릭 쿼리 및 비즈니스 KPI 분석&lt;/li&gt;
&lt;li&gt;인그레스 컨트롤러 통합: NGINX, ALB, Apache APISIX&lt;/li&gt;
&lt;li&gt;서비스 메시 통합: Istio, Linkerd, SMI&lt;/li&gt;
&lt;li&gt;여러 공급자 동시 사용: SMI + NGINX, Istio + ALB 등&lt;/li&gt;
&lt;li&gt;메트릭 제공자 통합: Prometheus, Wavefront, Kayenta, Web, Kubernetes Jobs, Datadog, New Relic, Graphite, InfluxDB&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713628509641&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
cat &amp;lt;&amp;lt;EOT &amp;gt; argorollouts-values.yaml
dashboard:
  enabled: true
  ingress:
    enabled: true
    ingressClassName: alb
    hosts:
      - argorollouts.$MyDomain
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/backend-protocol: HTTP
      alb.ingress.kubernetes.io/listen-ports: '[{&quot;HTTPS&quot;:80}, {&quot;HTTPS&quot;:443}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/ssl-redirect: '443'
EOT

kubectl create ns argo-rollouts
helm install argo-rollouts argo/argo-rollouts --version 2.35.1 -f argorollouts-values.yaml --namespace argo-rollouts

# 확인
kubectl get all -n argo-rollouts
kubectl get crd | grep argo&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bah78D/btsGNaOs9lf/ga1jXIZQHGJrzXovNMCV9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bah78D/btsGNaOs9lf/ga1jXIZQHGJrzXovNMCV9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bah78D/btsGNaOs9lf/ga1jXIZQHGJrzXovNMCV9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbah78D%2FbtsGNaOs9lf%2Fga1jXIZQHGJrzXovNMCV9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1222&quot; height=&quot;661&quot; data-origin-width=&quot;1222&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;1260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqPk1J/btsGOuSGZFE/BA5XLkd3QJv6nCZk3wL8s0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqPk1J/btsGOuSGZFE/BA5XLkd3QJv6nCZk3wL8s0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqPk1J/btsGOuSGZFE/BA5XLkd3QJv6nCZk3wL8s0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqPk1J%2FbtsGOuSGZFE%2FBA5XLkd3QJv6nCZk3wL8s0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1414&quot; height=&quot;1260&quot; data-origin-width=&quot;1414&quot; data-origin-height=&quot;1260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;rollout cli 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713628777391&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
curl -LO https://github.com/argoproj/argo-rollouts/releases/download/v1.6.4/kubectl-argo-rollouts-linux-amd64
chmod +x ./kubectl-argo-rollouts-linux-amd64
mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts

# 설치 확인
kubectl argo rollouts version&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbB4Mc/btsGNDo3Fuk/LYSU6ExGdIdryXcRBY1nq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbB4Mc/btsGNDo3Fuk/LYSU6ExGdIdryXcRBY1nq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbB4Mc/btsGNDo3Fuk/LYSU6ExGdIdryXcRBY1nq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbB4Mc%2FbtsGNDo3Fuk%2FLYSU6ExGdIdryXcRBY1nq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1330&quot; height=&quot;442&quot; data-origin-width=&quot;1330&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;deploy rollout : canary&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713628838207&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spec:
  replicas: 5
  strategy:
    canary:
      steps:
      - setWeight: 20
      - pause: {}
      - setWeight: 40
      - pause: {duration: 10}
      - setWeight: 60
      - pause: {duration: 10}
      - setWeight: 80
      - pause: {duration: 10}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신규 20% &amp;gt; pause &amp;gt; 신규 40% &amp;gt; pause 10s &amp;gt; 신규 60% &amp;gt; pause 10 &amp;gt; 신규 80% &amp;gt; pause 10s&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713628934440&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Run the following command to deploy the initial Rollout and Service:
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/rollout.yaml
kubectl apply -f https://raw.githubusercontent.com/argoproj/argo-rollouts/master/docs/getting-started/basic/service.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;pre id=&quot;code_1713628962157&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kubectl argo rollouts get rollout rollouts-demo
kubectl argo rollouts get rollout rollouts-demo --watch&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFjXUn/btsGOud5bF7/0IB2WFW7AurtnqOnW2y2Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFjXUn/btsGOud5bF7/0IB2WFW7AurtnqOnW2y2Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFjXUn/btsGOud5bF7/0IB2WFW7AurtnqOnW2y2Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFjXUn%2FbtsGOud5bF7%2F0IB2WFW7AurtnqOnW2y2Uk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1336&quot; height=&quot;655&quot; data-origin-width=&quot;1336&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpinw2/btsGMEWNyoo/P3o3MchduopK9dCcOFyaNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpinw2/btsGMEWNyoo/P3o3MchduopK9dCcOFyaNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpinw2/btsGMEWNyoo/P3o3MchduopK9dCcOFyaNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpinw2%2FbtsGMEWNyoo%2FP3o3MchduopK9dCcOFyaNk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1419&quot; height=&quot;703&quot; data-origin-width=&quot;1419&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;1017&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nbu2r/btsGNCRkVXv/CtWUMDejIJiSkYwOkxaYjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nbu2r/btsGNCRkVXv/CtWUMDejIJiSkYwOkxaYjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nbu2r/btsGNCRkVXv/CtWUMDejIJiSkYwOkxaYjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnbu2r%2FbtsGNCRkVXv%2FCtWUMDejIJiSkYwOkxaYjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1359&quot; height=&quot;1017&quot; data-origin-width=&quot;1359&quot; data-origin-height=&quot;1017&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새 이미지로 디플로이 한 번 더해보기&lt;/p&gt;
&lt;pre id=&quot;code_1713629099683&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Run the following command to update the rollouts-demo Rollout with the &quot;yellow&quot; version of the container:
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;1135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNKraZ/btsGOvD3pwk/knv5ZG8VnKvERC5axpjVuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNKraZ/btsGOvD3pwk/knv5ZG8VnKvERC5axpjVuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNKraZ/btsGOvD3pwk/knv5ZG8VnKvERC5axpjVuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNKraZ%2FbtsGOvD3pwk%2Fknv5ZG8VnKvERC5axpjVuk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1392&quot; height=&quot;1135&quot; data-origin-width=&quot;1392&quot; data-origin-height=&quot;1135&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;promoting a rollout&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713629621192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 아래 입력 혹은 UI에서 Promote Yes 클릭
kubectl argo rollouts promote rollouts-demo

#
kubectl argo rollouts get rollout rollouts-demo --watch&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;694&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcmODr/btsGNq4yCwS/9Asp7rdOkdgy1xfllqiwe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcmODr/btsGNq4yCwS/9Asp7rdOkdgy1xfllqiwe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcmODr/btsGNq4yCwS/9Asp7rdOkdgy1xfllqiwe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcmODr%2FbtsGNq4yCwS%2F9Asp7rdOkdgy1xfllqiwe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1300&quot; height=&quot;694&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;694&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HyBte/btsGL2cF7kc/L8NCLndeEjMbtEvBFyGZc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HyBte/btsGL2cF7kc/L8NCLndeEjMbtEvBFyGZc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HyBte/btsGL2cF7kc/L8NCLndeEjMbtEvBFyGZc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHyBte%2FbtsGL2cF7kc%2FL8NCLndeEjMbtEvBFyGZc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;193&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &lt;span data-token-index=&quot;0&quot;&gt;Aborting a Rollout&lt;/span&gt; &lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713629717418&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red

#
kubectl argo rollouts abort rollouts-demo

#
kubectl argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Infra &amp;amp; DevOps/CICD</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/78</guid>
      <comments>https://bravesunfish.tistory.com/78#entry78comment</comments>
      <pubDate>Sat, 20 Apr 2024 20:35:31 +0900</pubDate>
    </item>
    <item>
      <title>[Jenkins]Jenkins 설치 및 실습</title>
      <link>https://bravesunfish.tistory.com/77</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Jenkins-Logo-500x281.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;281&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zcl77/btsGKw4V2Ml/vkBMpyPvfwC3FmBZwaH0SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zcl77/btsGKw4V2Ml/vkBMpyPvfwC3FmBZwaH0SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zcl77/btsGKw4V2Ml/vkBMpyPvfwC3FmBZwaH0SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzcl77%2FbtsGKw4V2Ml%2FvkBMpyPvfwC3FmBZwaH0SK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;500&quot; height=&quot;281&quot; data-filename=&quot;Jenkins-Logo-500x281.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;281&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Jenkins&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지속적 통합 &amp;amp; 배포를 위한 워크플로우 제어에 사용되는 툴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자바 기반의 오픈소스 -&amp;gt; 자바와 친화성이 높음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아파치 톰캣처럼 &lt;span data-token-index=&quot;1&quot;&gt;서블릿 컨테이너&lt;/span&gt; 내부에서 실행되는 서버 시스템&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파이프라인이라고 부르는 스크립트 작성 -&amp;gt; 각 빌드 단계마다 세부적으로 젠킨스의 태스크 정의 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 다양한 플러그인 연동 제공&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Build Plugins : Maven, Ant, Gradle &amp;hellip;&lt;/li&gt;
&lt;li&gt;VCS Plugins : Git, SVN &amp;hellip;&lt;/li&gt;
&lt;li&gt;Languages Plugins : Java, Python, Node.js &amp;hellip;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- github action 과 함께 CI/CD 툴로 많이 거론 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 간단한 비교 요약&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1471&quot; data-origin-height=&quot;417&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QfLnk/btsGJn8xCgF/ZYOcyew3A0Gm0lRlgCjdm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QfLnk/btsGJn8xCgF/ZYOcyew3A0Gm0lRlgCjdm1/img.png&quot; data-alt=&quot;출처 : https://wookiist.dev/155&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QfLnk/btsGJn8xCgF/ZYOcyew3A0Gm0lRlgCjdm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQfLnk%2FbtsGJn8xCgF%2FZYOcyew3A0Gm0lRlgCjdm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1471&quot; height=&quot;417&quot; data-origin-width=&quot;1471&quot; data-origin-height=&quot;417&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : https://wookiist.dev/155&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 워크플로우 예시&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;최신 코드 가져오기 : 개발을 위해 중앙 코드 리포지터리에서 로컬 시스템으로 애플리케이션의 최신 코드를 가져옴&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;단위 테스트 구현과 실행 : 코드 작성 전 단위 테스트 케이스를 먼저 작성&lt;/li&gt;
&lt;li&gt;코드 개발 : 실패한 테스트 케이스를 성공으로 바꾸면서 코드 개발&lt;/li&gt;
&lt;li&gt;단위 테스트 케이스 재실행 : 단위 테스트 케이스 실행 시 통과(성공!)&lt;/li&gt;
&lt;li&gt;코드 푸시와 병합 : 개발 소스 코드를 중앙 리포지터리로 푸시하고, 코드 병합&lt;/li&gt;
&lt;li&gt;코드 병합 후 컴파일 : 변경 함수 코드가 병함되면 전체 애플리케이션이 컴파일된다&lt;/li&gt;
&lt;li&gt;병합된 코드에서 테스트 실행 : 개별 테스트뿐만 아니라 전체 통합 테스트를 실행하여 문제 없는지 확인&lt;/li&gt;
&lt;li&gt;아티팩트 배포 : 애플리케이션을 빌드하고, 애플리케이션 서버의 프로덕션 환경에 배포&lt;/li&gt;
&lt;li&gt;배포 애플리케이션의 E-E 테스트 실행 : 셀레늄 Selenium과 같은 User Interface 자동화 도구를 통해 애플리케이션의 전체 워크플로가 정상 동작하는지 확인하는 종단간 End-to-End 테스트를 실행.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;실습&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;설치 및 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;자바 설치 및 환경 변수 설정&lt;/p&gt;
&lt;pre id=&quot;code_1713466823637&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 실습 편리를 위해서 root 계정 전환
sudo su -

# Add required dependencies for the jenkins package
# https://docs.aws.amazon.com/corretto/latest/corretto-17-ug/amazon-linux-install.html
sudo yum install fontconfig java-17-amazon-corretto -y
java -version
alternatives --display java
JAVA_HOME=/usr/lib/jvm/java-17-amazon-corretto.x86_64
echo $JAVA_HOME&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;424&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxXfaz/btsGJtgBCXl/rQOh4VPMCKv32bhzYaNOdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxXfaz/btsGJtgBCXl/rQOh4VPMCKv32bhzYaNOdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxXfaz/btsGJtgBCXl/rQOh4VPMCKv32bhzYaNOdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxXfaz%2FbtsGJtgBCXl%2FrQOh4VPMCKv32bhzYaNOdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1266&quot; height=&quot;424&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;424&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;젠킨스 설치&lt;/p&gt;
&lt;pre id=&quot;code_1713470807756&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 젠킨스 설치
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
sudo yum install jenkins -y
sudo systemctl daemon-reload
sudo systemctl enable jenkins &amp;amp;&amp;amp; sudo systemctl start jenkins   # 다소 시간 걸림
sudo systemctl status jenkins

# 초기 암호 확인
sudo systemctl status jenkins
cat /var/lib/jenkins/secrets/initialAdminPassword

# 접속 주소 확인 
curl -s ipinfo.io/ip | awk '{ print &quot;Jenkins = http://&quot;$1&quot;:8080&quot; }'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 완료 되면 초창기 로그인 화면이 뜸&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 cat 이하로 확인했던 암호로 입장&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;625&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wJBXR/btsGJeqqq37/5fZ1U7h4au28I9zDxMt26k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wJBXR/btsGJeqqq37/5fZ1U7h4au28I9zDxMt26k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wJBXR/btsGJeqqq37/5fZ1U7h4au28I9zDxMt26k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwJBXR%2FbtsGJeqqq37%2F5fZ1U7h4au28I9zDxMt26k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1246&quot; height=&quot;625&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;625&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;install&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;613&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1Bvgm/btsGJpZy3xg/mKGrQgfYAZ4dPp6eyFG4sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1Bvgm/btsGJpZy3xg/mKGrQgfYAZ4dPp6eyFG4sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1Bvgm/btsGJpZy3xg/mKGrQgfYAZ4dPp6eyFG4sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1Bvgm%2FbtsGJpZy3xg%2FmKGrQgfYAZ4dPp6eyFG4sK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1228&quot; height=&quot;613&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;613&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유저설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;1398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYPfbZ/btsGKWoMTmL/kD8tbBcGqpOScZbbokDO3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYPfbZ/btsGKWoMTmL/kD8tbBcGqpOScZbbokDO3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYPfbZ/btsGKWoMTmL/kD8tbBcGqpOScZbbokDO3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYPfbZ%2FbtsGKWoMTmL%2FkD8tbBcGqpOScZbbokDO3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1171&quot; height=&quot;1398&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;1398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주소 같은지 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cY88Rs/btsGK4Us4tl/Pk1PqgXRCojrGtilEcwKx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cY88Rs/btsGK4Us4tl/Pk1PqgXRCojrGtilEcwKx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cY88Rs/btsGK4Us4tl/Pk1PqgXRCojrGtilEcwKx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcY88Rs%2FbtsGK4Us4tl%2FPk1PqgXRCojrGtilEcwKx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1276&quot; height=&quot;604&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;대시보드 설명&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구성에 대해 간략히 설명&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;918&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dyHAOr/btsGK8vK1xH/HcLLp6xCktXnT7Sgrz7e01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dyHAOr/btsGK8vK1xH/HcLLp6xCktXnT7Sgrz7e01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dyHAOr/btsGK8vK1xH/HcLLp6xCktXnT7Sgrz7e01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdyHAOr%2FbtsGK8vK1xH%2FHcLLp6xCktXnT7Sgrz7e01%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1279&quot; height=&quot;918&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;918&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;item&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;1030&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nH0ql/btsGJNTuCrE/RqaK35PkBN4B1bADMv2kX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nH0ql/btsGJNTuCrE/RqaK35PkBN4B1bADMv2kX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nH0ql/btsGJNTuCrE/RqaK35PkBN4B1bADMv2kX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnH0ql%2FbtsGJNTuCrE%2FRqaK35PkBN4B1bADMv2kX1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1221&quot; height=&quot;1030&quot; data-origin-width=&quot;1221&quot; data-origin-height=&quot;1030&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 작업 최소단위, job&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 종류&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프로젝트 : 가장 기본적인 job 세팅&lt;/li&gt;
&lt;li&gt;파이프라인 : 스크립트로 미리 정의된 템플릿 프로세스들로 job 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사람&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 계정 관련한 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;젠킨스 관리&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 전역적인 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- tool 등을 설정 할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;1411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGOaQA/btsGMBr1H2g/JR6Cj6uj14TZzZTEpo3h4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGOaQA/btsGMBr1H2g/JR6Cj6uj14TZzZTEpo3h4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGOaQA/btsGMBr1H2g/JR6Cj6uj14TZzZTEpo3h4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGOaQA%2FbtsGMBr1H2g%2FJR6Cj6uj14TZzZTEpo3h4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;1411&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;1411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;실습&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;tool 설정 : 자바 JDK 를 사용하도록 path 지정 &amp;gt; save&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;1225&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnca0a/btsGNEnDnwm/N517JiwngR0UvCjcvfjzMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnca0a/btsGNEnDnwm/N517JiwngR0UvCjcvfjzMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnca0a/btsGNEnDnwm/N517JiwngR0UvCjcvfjzMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnca0a%2FbtsGNEnDnwm%2FN517JiwngR0UvCjcvfjzMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1243&quot; height=&quot;1225&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;1225&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;item 생성 &amp;gt; 프로젝트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;1227&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AKJAD/btsGMejqu1a/GhEec0qdlkJeuypjWva7oK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AKJAD/btsGMejqu1a/GhEec0qdlkJeuypjWva7oK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AKJAD/btsGMejqu1a/GhEec0qdlkJeuypjWva7oK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAKJAD%2FbtsGMejqu1a%2FGhEec0qdlkJeuypjWva7oK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1266&quot; height=&quot;1227&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;1227&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빌드 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KLd9j/btsGMIYJqDD/Kbf14O7SfcuDsO7r6bjGzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KLd9j/btsGMIYJqDD/Kbf14O7SfcuDsO7r6bjGzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KLd9j/btsGMIYJqDD/Kbf14O7SfcuDsO7r6bjGzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKLd9j%2FbtsGMIYJqDD%2FKbf14O7SfcuDsO7r6bjGzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;990&quot; height=&quot;487&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D95Kh/btsGM3n4USM/EzmGYDjQ1I8zKwycR3IDo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D95Kh/btsGM3n4USM/EzmGYDjQ1I8zKwycR3IDo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D95Kh/btsGM3n4USM/EzmGYDjQ1I8zKwycR3IDo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD95Kh%2FbtsGM3n4USM%2FEzmGYDjQ1I8zKwycR3IDo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;924&quot; height=&quot;552&quot; data-origin-width=&quot;924&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;빌드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8I7rF/btsGMAGKUa7/Jay3mb8ZdKgfVLqqnypjyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8I7rF/btsGMAGKUa7/Jay3mb8ZdKgfVLqqnypjyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8I7rF/btsGMAGKUa7/Jay3mb8ZdKgfVLqqnypjyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8I7rF%2FbtsGMAGKUa7%2FJay3mb8ZdKgfVLqqnypjyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1254&quot; height=&quot;772&quot; data-origin-width=&quot;1254&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwhD6g/btsGNOp98FA/0MIBnhb1vVmB5VbYDSts60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwhD6g/btsGNOp98FA/0MIBnhb1vVmB5VbYDSts60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwhD6g/btsGNOp98FA/0MIBnhb1vVmB5VbYDSts60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwhD6g%2FbtsGNOp98FA%2F0MIBnhb1vVmB5VbYDSts60%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;417&quot; height=&quot;409&quot; data-origin-width=&quot;417&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;444&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coA8It/btsGNzfIgXn/hjQifTNmLwZbJaXdFajbB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coA8It/btsGNzfIgXn/hjQifTNmLwZbJaXdFajbB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coA8It/btsGNzfIgXn/hjQifTNmLwZbJaXdFajbB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoA8It%2FbtsGNzfIgXn%2FhjQifTNmLwZbJaXdFajbB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1278&quot; height=&quot;444&quot; data-origin-width=&quot;1278&quot; data-origin-height=&quot;444&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;빌드에 변경 사항 추가하기 &amp;gt; 지금 빌드&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1318&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JcBpP/btsGNebRQLP/Odl5wszA7wosJdCjb0Xq3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JcBpP/btsGNebRQLP/Odl5wszA7wosJdCjb0Xq3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JcBpP/btsGNebRQLP/Odl5wszA7wosJdCjb0Xq3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJcBpP%2FbtsGNebRQLP%2FOdl5wszA7wosJdCjb0Xq3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1234&quot; height=&quot;1318&quot; data-origin-width=&quot;1234&quot; data-origin-height=&quot;1318&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;변경 된 부분 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GKu6m/btsGLCkHCoI/2BNvDGqPyMjjTWE29QNvuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GKu6m/btsGLCkHCoI/2BNvDGqPyMjjTWE29QNvuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GKu6m/btsGLCkHCoI/2BNvDGqPyMjjTWE29QNvuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGKu6m%2FbtsGLCkHCoI%2F2BNvDGqPyMjjTWE29QNvuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;451&quot; height=&quot;358&quot; data-origin-width=&quot;451&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;751&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ppEDh/btsGMDQY2LR/mOUPrI1qtpTwCsSh1LGOck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ppEDh/btsGMDQY2LR/mOUPrI1qtpTwCsSh1LGOck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ppEDh/btsGMDQY2LR/mOUPrI1qtpTwCsSh1LGOck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FppEDh%2FbtsGMDQY2LR%2FmOUPrI1qtpTwCsSh1LGOck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1288&quot; height=&quot;751&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;751&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;젠킨스 설치된 ec2 에서 프로젝트 위치 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713543957903&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
find / -name First-Project

# 프로젝트(job, item) 별 작업 공간 확인
tree /var/lib/jenkins/workspace/First-Project&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIRbcd/btsGOukAxbz/wYSLPKrHUcPFipVBfgYTU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIRbcd/btsGOukAxbz/wYSLPKrHUcPFipVBfgYTU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIRbcd/btsGOukAxbz/wYSLPKrHUcPFipVBfgYTU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIRbcd%2FbtsGOukAxbz%2FwYSLPKrHUcPFipVBfgYTU0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1207&quot; height=&quot;220&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Jenkins with Docker&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스에서 도커를 사용하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;사전 준비&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스 유저로 도커 사용하도록 설정 &amp;gt; 젠킨스 유저 전&lt;/p&gt;
&lt;pre id=&quot;code_1713544297995&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# jenkins 유저로 docker 사용 가능하게 설정
grep -i jenkins /etc/passwd
usermod -s /bin/bash jenkins
grep -i jenkins /etc/passwd

# jenkins 유저 전환
su - jenkins
whoami
pwd
docker info
exit&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSVh5s/btsGMLBdmtQ/EFT4BYSBdVvsjYQLj8IvdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSVh5s/btsGMLBdmtQ/EFT4BYSBdVvsjYQLj8IvdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSVh5s/btsGMLBdmtQ/EFT4BYSBdVvsjYQLj8IvdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSVh5s%2FbtsGMLBdmtQ%2FEFT4BYSBdVvsjYQLj8IvdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1341&quot; height=&quot;466&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;su - jenkins 로 jenkins 사용자 로그인 후 기본적인 명렁어 확인했으나 docker 정보의 경우 권한 에러 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 권한 줘야함(666은 모든 사용자에게 읽기쓰기 오픈함 주의)&lt;/p&gt;
&lt;pre id=&quot;code_1713544468851&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod 666 /var/run/docker.sock
usermod -aG docker jenkins

# Jeknins 유저로 확인
su - jenkins
docker info&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;910&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bn2aPo/btsGM3hmjwW/SjHp0S60IEk23yQIpodlJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bn2aPo/btsGM3hmjwW/SjHp0S60IEk23yQIpodlJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bn2aPo/btsGM3hmjwW/SjHp0S60IEk23yQIpodlJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbn2aPo%2FbtsGM3hmjwW%2FSjHp0S60IEk23yQIpodlJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;910&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;910&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713544304730&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Dockerhub로 로그인 하기
docker login
Username: &amp;lt;자신의 계정명&amp;gt;
Password: &amp;lt;자신의 암호&amp;gt;

# myweb:v2.0.0 컨테이너 이미지 생성을 위한 Dockerfile 준비
# 실습을 위한 디렉터리 생성 및 이동
mkdir -p ~/myweb2 &amp;amp;&amp;amp; cd ~/myweb2

# Dockerfile 파일 생성
vi Dockerfile
FROM ubuntu:20.04
ENV TZ=Asia/Seoul VERSION=2.0.0 NICK=peachdo
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &amp;amp;&amp;amp; echo $TZ &amp;gt; /etc/timezone &amp;amp;&amp;amp; \
    sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list &amp;amp;&amp;amp; \
    sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list &amp;amp;&amp;amp; \
    apt-get update &amp;amp;&amp;amp; apt-get install -y apache2 figlet &amp;amp;&amp;amp; \
    echo &quot;$NICK Web Server $VERSION&amp;lt;br&amp;gt;&quot; &amp;gt; /var/www/html/index.html &amp;amp;&amp;amp; \
    echo &quot;&amp;lt;pre&amp;gt;&quot; &amp;gt;&amp;gt; /var/www/html/index.html &amp;amp;&amp;amp; \
    figlet AEWS Study &amp;gt;&amp;gt; /var/www/html/index.html &amp;amp;&amp;amp; \
    echo &quot;&amp;lt;/pre&amp;gt;&quot; &amp;gt;&amp;gt; /var/www/html/index.html
EXPOSE 80
CMD [&quot;usr/sbin/apache2ctl&quot;, &quot;-DFOREGROUND&quot;]

# 모니터링
watch -d 'docker images; echo; docker ps'

-----------
# (참고) 이미지 빌드
docker build -t myweb:v2.0.0 -f /var/lib/jenkins/myweb2/Dockerfile

# (참고) 컨테이너 실행
docker run -d -p 80:80 --rm --name myweb myweb:v2.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;젠킨스에서 &lt;span style=&quot;background-color: #fefefe; color: #212121; text-align: justify;&quot;&gt;Docker-Project 생성 &amp;amp; 빌드 스텝 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713545674337&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# build step
cd /var/lib/jenkins/myweb2
docker build -t myweb:v2.0.0 .

# add build step
docker run -d -p 80:80 --rm --name myweb myweb:v2.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;1363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7iMMf/btsGNAZ0wgD/g8aHPc0tJzUVWnADkkqeTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7iMMf/btsGNAZ0wgD/g8aHPc0tJzUVWnADkkqeTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7iMMf/btsGNAZ0wgD/g8aHPc0tJzUVWnADkkqeTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7iMMf%2FbtsGNAZ0wgD%2Fg8aHPc0tJzUVWnADkkqeTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;1363&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;1363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;빌드 &amp;gt; 콘솔 출력&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 도커 이미지 빌드 할 때 봤던 로그들 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EUNZY/btsGNrvnJPx/lQkSisBkC9pikYJcEiuwdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EUNZY/btsGNrvnJPx/lQkSisBkC9pikYJcEiuwdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EUNZY/btsGNrvnJPx/lQkSisBkC9pikYJcEiuwdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEUNZY%2FbtsGNrvnJPx%2FlQkSisBkC9pikYJcEiuwdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1206&quot; height=&quot;1276&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;터미널에서 docker images 확인 &amp;amp; 이미지가 실행되는지 확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HJD5D/btsGOxO9p9D/sHzAnwUjnXAfKVgusuOP10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HJD5D/btsGOxO9p9D/sHzAnwUjnXAfKVgusuOP10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HJD5D/btsGOxO9p9D/sHzAnwUjnXAfKVgusuOP10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHJD5D%2FbtsGOxO9p9D%2FsHzAnwUjnXAfKVgusuOP10%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1357&quot; height=&quot;597&quot; data-origin-width=&quot;1357&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Github 저장소 연결&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실습용 레포지토리 포크&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/gasida/aews-cicd&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/gasida/aews-cicd&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713545943058&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - gasida/aews-cicd: cloudneta aws workshop study&quot; data-og-description=&quot;cloudneta aws workshop study. Contribute to gasida/aews-cicd development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/gasida/aews-cicd&quot; data-og-url=&quot;https://github.com/gasida/aews-cicd&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ewb1CL/hyVPR1hOD7/hfbvIkdttrxVkQGFbv8eWk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/gasida/aews-cicd&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/gasida/aews-cicd&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ewb1CL/hyVPR1hOD7/hfbvIkdttrxVkQGFbv8eWk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - gasida/aews-cicd: cloudneta aws workshop study&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;cloudneta aws workshop study. Contribute to gasida/aews-cicd development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;프로젝트 생성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FclL4/btsGNFNFAwA/SdDa1o65CEGoRbWRkH7whk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FclL4/btsGNFNFAwA/SdDa1o65CEGoRbWRkH7whk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FclL4/btsGNFNFAwA/SdDa1o65CEGoRbWRkH7whk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFclL4%2FbtsGNFNFAwA%2FSdDa1o65CEGoRbWRkH7whk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1255&quot; height=&quot;1378&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파라미터 string 추가 &amp;gt; VERSION &amp;amp; NICK&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1249&quot; data-origin-height=&quot;1384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qeuuD/btsGLECQ0Uh/S43Z21FtVycK7bia50gZc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qeuuD/btsGLECQ0Uh/S43Z21FtVycK7bia50gZc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qeuuD/btsGLECQ0Uh/S43Z21FtVycK7bia50gZc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqeuuD%2FbtsGLECQ0Uh%2FS43Z21FtVycK7bia50gZc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1249&quot; height=&quot;1384&quot; data-origin-width=&quot;1249&quot; data-origin-height=&quot;1384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;1213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PPzns/btsGOuSqejR/kEMN43ShNtQYm4kxSrjmzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PPzns/btsGOuSqejR/kEMN43ShNtQYm4kxSrjmzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PPzns/btsGOuSqejR/kEMN43ShNtQYm4kxSrjmzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPPzns%2FbtsGOuSqejR%2FkEMN43ShNtQYm4kxSrjmzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;931&quot; height=&quot;1213&quot; data-origin-width=&quot;931&quot; data-origin-height=&quot;1213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;소스코드 관리(Source Code Management) 설정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;1416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9CBje/btsGM9uXy3C/5DM2nca6HoDHWVtMnY9dV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9CBje/btsGM9uXy3C/5DM2nca6HoDHWVtMnY9dV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9CBje/btsGM9uXy3C/5DM2nca6HoDHWVtMnY9dV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9CBje%2FbtsGM9uXy3C%2F5DM2nca6HoDHWVtMnY9dV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;1416&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;1416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;additional behaviours 에서 sparse checkout path 를 1로 설정&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1231&quot; data-origin-height=&quot;1323&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOmxcQ/btsGN29Hr9k/mGfuNeBkoQ3dbzXm61yNpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOmxcQ/btsGN29Hr9k/mGfuNeBkoQ3dbzXm61yNpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOmxcQ/btsGN29Hr9k/mGfuNeBkoQ3dbzXm61yNpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOmxcQ%2FbtsGN29Hr9k%2FmGfuNeBkoQ3dbzXm61yNpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1231&quot; height=&quot;1323&quot; data-origin-width=&quot;1231&quot; data-origin-height=&quot;1323&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;build trigger 에서 poll scm 에 schedule '*****' 추가&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;+) poll scm&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;- 웹훅을 사용하지 않아도 빌드를 유발 시키기 위한 옵션&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;- &lt;span style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;형상관리 서버를 주기적으로 감시하여 변경된 사항이 존재할때 빌드를 수행하는 설정&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;1300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZz12q/btsGOgfGwhI/ZZmmxUoOXCaAuW2Xkbqnp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZz12q/btsGOgfGwhI/ZZmmxUoOXCaAuW2Xkbqnp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZz12q/btsGOgfGwhI/ZZmmxUoOXCaAuW2Xkbqnp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZz12q%2FbtsGOgfGwhI%2FZZmmxUoOXCaAuW2Xkbqnp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1257&quot; height=&quot;1300&quot; data-origin-width=&quot;1257&quot; data-origin-height=&quot;1300&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;build step 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713553324833&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd /var/lib/jenkins/myweb2
rm -rf Dockerfile
wget https://raw.githubusercontent.com/$NICK/aews-cicd/main/1/Dockerfile

docker build -t myweb:$VERSION .
docker run -d -p 80:80 --rm --name myweb myweb:$VERSION&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;1192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xmHUN/btsGMCxNmoh/3penZsO07q33SfUIkgwNW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xmHUN/btsGMCxNmoh/3penZsO07q33SfUIkgwNW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xmHUN/btsGMCxNmoh/3penZsO07q33SfUIkgwNW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxmHUN%2FbtsGMCxNmoh%2F3penZsO07q33SfUIkgwNW1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1246&quot; height=&quot;1192&quot; data-origin-width=&quot;1246&quot; data-origin-height=&quot;1192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Github 레포에서 1/Dockerfile 수정 후 커밋 &amp;gt; 트리거 발동&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWCXB4/btsGN1QvDYn/kekCJK2vMUPEFxuiL3aeu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWCXB4/btsGN1QvDYn/kekCJK2vMUPEFxuiL3aeu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWCXB4/btsGN1QvDYn/kekCJK2vMUPEFxuiL3aeu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWCXB4%2FbtsGN1QvDYn%2FkekCJK2vMUPEFxuiL3aeu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1207&quot; height=&quot;582&quot; data-origin-width=&quot;1207&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;젠킨스에서 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노란 부분에서 어떤 커밋을 반영해서 돌아갔는지 보임&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSRr9y/btsGM2CIu74/P8eD8J8fuR7mXld0T2svJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSRr9y/btsGM2CIu74/P8eD8J8fuR7mXld0T2svJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSRr9y/btsGM2CIu74/P8eD8J8fuR7mXld0T2svJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSRr9y%2FbtsGM2CIu74%2FP8eD8J8fuR7mXld0T2svJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1255&quot; height=&quot;1312&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실패한 부분&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Dockerfile 경로를 못찾음 -&amp;gt; 동일하게 &lt;span style=&quot;background-color: #fefefe; color: #212121; text-align: justify; letter-spacing: 0px;&quot;&gt;Execute shell 수정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;1329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bR7YYs/btsGNsOzx0l/r9Uhwg75KwhzUNiWU8eRc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bR7YYs/btsGNsOzx0l/r9Uhwg75KwhzUNiWU8eRc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bR7YYs/btsGNsOzx0l/r9Uhwg75KwhzUNiWU8eRc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbR7YYs%2FbtsGNsOzx0l%2Fr9Uhwg75KwhzUNiWU8eRc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1225&quot; height=&quot;1329&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;1329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dh64U1/btsGMh1FRax/6UYgACs67XW6nZAfGwPaB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dh64U1/btsGMh1FRax/6UYgACs67XW6nZAfGwPaB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dh64U1/btsGMh1FRax/6UYgACs67XW6nZAfGwPaB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh64U1%2FbtsGMh1FRax%2F6UYgACs67XW6nZAfGwPaB0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1281&quot; height=&quot;1354&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;1354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #212121; text-align: justify;&quot;&gt;파이프라인&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #212121; text-align: justify;&quot;&gt;이론&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fefefe; color: #212121; text-align: justify;&quot;&gt;위에 실습이 프로젝트에 관한 것이었다면, 지금 항목은 파이프라인에 관한 것&lt;/span&gt;&lt;span style=&quot;background-color: #fefefe; color: #212121; text-align: justify;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7TLby/btsGMSAeSza/UQpd0fAdpn947DhlgM8Ju0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7TLby/btsGMSAeSza/UQpd0fAdpn947DhlgM8Ju0/img.png&quot; data-alt=&quot;출처 : 스터디 자료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7TLby/btsGMSAeSza/UQpd0fAdpn947DhlgM8Ju0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7TLby%2FbtsGMSAeSza%2FUQpd0fAdpn947DhlgM8Ju0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2000&quot; height=&quot;755&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;755&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : 스터디 자료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파이프라인 &lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;코드 : 애플리케이션 CI/CD 프로세스를 코드 형식으로 작성할 수 있고, 해당 코드를 중앙 리포지터리에 저장하여 팀원과 공유 및 작업 가능&lt;/li&gt;
&lt;li&gt;내구성 : 젠킨스 서비스가 의도적으로 또는 우발적으로 재시작되더라도 문제없이 유지됨&lt;/li&gt;
&lt;li&gt;일시 중지 가능 : 파이프라인을 실행하는 도중 사람의 승인이나 입력을 기다리기 위해 중단하거나 기다리는 것이 가능&lt;/li&gt;
&lt;li&gt;다양성 : 분기나 반복, 병렬 처리와 같은 다양한 CI/CD 요구 사항을 지원&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; 파이프라인 &lt;b&gt;용어&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파이프라인 : 전체 빌드 프로세스를 정의하는 코드.&lt;/li&gt;
&lt;li&gt;node : 파이프라인을 실행하는 시스템.&lt;/li&gt;
&lt;li&gt;stage : 특정 단계에서 수행되는 작업들의 정의.&lt;/li&gt;
&lt;li&gt;step : 파이프라인의 특정 단계에서 수행되는 단일 작업을 의미&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파이프라인 3가지 구성 형태&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pipeline &lt;b&gt;script&lt;/b&gt; : 일반적인 방식으로 Jenkins 파이프라인을 생성하여 Shell Script를 직접 생성하여 빌드하는 방식&lt;/li&gt;
&lt;li&gt;Pipeline script from &lt;b&gt;SCM&lt;/b&gt; : 사전 작성한 JenkinsFile을&amp;nbsp;형상관리 저장소에 보관하고, 빌드 시작 시 파이프라인 프로젝트에서 호출 실행하는 방식&lt;/li&gt;
&lt;li&gt;Blue Ocean : 젠킨스 ui 로 관리하면 자동으로 jenkinsfile이 생성, 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 구문 형태&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;선언형&lt;/b&gt;&amp;nbsp;: 쉽게 작성 가능, 최근 문법이고 젠킨스에서 권장하는 방법, step 필수!&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제)&lt;/p&gt;
&lt;pre id=&quot;code_1713556213961&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any     # Execute this Pipeline or any of its stages, on any available agent.
    stages {
        stage('Build') {   # Defines the &quot;Build&quot; stage.
            steps {
                //         # Perform some steps related to the &quot;Build&quot; stage.
            }
        }
        stage('Test') { 
            steps {
                // 
            }
        }
        stage('Deploy') { 
            steps {
                // 
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;스크립트형&lt;/b&gt;&amp;nbsp;: 커스텀 작업에 용이, 복잡하여 난이도가 높음, step은 필수 아님&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 )&lt;/p&gt;
&lt;pre id=&quot;code_1713556224843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;node {          # 	Execute this Pipeline or any of its stages, on any available agent.
    stage('Build') {    # Defines the &quot;Build&quot; stage. stage blocks are optional in Scripted Pipeline syntax. However, implementing stage blocks in a Scripted Pipeline provides clearer visualization of each stage's subset of tasks/steps in the Jenkins UI.
        //              # Perform some steps related to the &quot;Build&quot; stage.
    }
    stage('Test') { 
        // 
    }
    stage('Deploy') { 
        // 
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실습 : 파이프라인 w. script&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이프라인 아이템 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Uqj2f/btsGNzGOA1Z/k1go4MKYotkhD6SAFJSO51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Uqj2f/btsGNzGOA1Z/k1go4MKYotkhD6SAFJSO51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Uqj2f/btsGNzGOA1Z/k1go4MKYotkhD6SAFJSO51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUqj2f%2FbtsGNzGOA1Z%2Fk1go4MKYotkhD6SAFJSO51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1281&quot; height=&quot;1354&quot; data-origin-width=&quot;1281&quot; data-origin-height=&quot;1354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스크립트로 정의&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713556352386&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any

    stages {
        stage('정보 확인') {
            steps {
                echo 'Hello World'
                sh 'java -version'
            }
        }
        stage('가라 배포') {
            steps {
                echo &quot;Deployed successfully!&quot;;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6shUV/btsGMFA8Giv/7mWW1k6Sy4c6L4FvuezCNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6shUV/btsGMFA8Giv/7mWW1k6Sy4c6L4FvuezCNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6shUV/btsGMFA8Giv/7mWW1k6Sy4c6L4FvuezCNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6shUV%2FbtsGMFA8Giv%2F7mWW1k6Sy4c6L4FvuezCNK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1290&quot; height=&quot;1372&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;1372&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vfSnv/btsGMJKbFz3/zpoyruVAw8OKAO0rplh6KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vfSnv/btsGMJKbFz3/zpoyruVAw8OKAO0rplh6KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vfSnv/btsGMJKbFz3/zpoyruVAw8OKAO0rplh6KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvfSnv%2FbtsGMJKbFz3%2FzpoyruVAw8OKAO0rplh6KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1300&quot; height=&quot;1054&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스크립트 자리에 내용 바꿔보기 &amp;gt; echo 동작 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713556489500&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any
    environment { 
        STUDYNAME = 'AEWS'
    }
    stages {
        stage('연습') {
            environment { 
                mykey = 'abcd'
            }
            steps {
                echo &quot;${STUDYNAME}&quot;;
                sh 'echo ${mykey}'
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xb7HX/btsGM3uTgjf/tpaHDj04D6chATeIOidKdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xb7HX/btsGM3uTgjf/tpaHDj04D6chATeIOidKdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xb7HX/btsGM3uTgjf/tpaHDj04D6chATeIOidKdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXb7HX%2FbtsGM3uTgjf%2FtpaHDj04D6chATeIOidKdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1023&quot; height=&quot;906&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;906&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;maven 수정 테스트&lt;/p&gt;
&lt;pre id=&quot;code_1713556561659&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any
    tools {
        maven 'maven_3.8.7' 
    }
    stages {
        stage('Example') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ui 상에선 아래 부분 수정하는 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;1261&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dduF2a/btsGMgPdjk8/7r6U2sMHtux2Z3EA0GqMu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dduF2a/btsGMgPdjk8/7r6U2sMHtux2Z3EA0GqMu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dduF2a/btsGMgPdjk8/7r6U2sMHtux2Z3EA0GqMu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdduF2a%2FbtsGMgPdjk8%2F7r6U2sMHtux2Z3EA0GqMu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1269&quot; height=&quot;1261&quot; data-origin-width=&quot;1269&quot; data-origin-height=&quot;1261&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;1291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QnDaY/btsGLCZm2mk/QcWvcfpYrEFkWfoJw0LojK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QnDaY/btsGLCZm2mk/QcWvcfpYrEFkWfoJw0LojK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QnDaY/btsGLCZm2mk/QcWvcfpYrEFkWfoJw0LojK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQnDaY%2FbtsGLCZm2mk%2FQcWvcfpYrEFkWfoJw0LojK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1243&quot; height=&quot;1291&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;1291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;step 항목에 넣을 수 있도록 도와주는 문법 변환기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;1363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUYacC/btsGM2Jw0yg/0HmOUOkQ384zCRz1MRMuP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUYacC/btsGM2Jw0yg/0HmOUOkQ384zCRz1MRMuP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUYacC/btsGM2Jw0yg/0HmOUOkQ384zCRz1MRMuP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUYacC%2FbtsGM2Jw0yg%2F0HmOUOkQ384zCRz1MRMuP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;1363&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;1363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실습 : 파이프라인 SCM&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이프라인 아이템 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;1270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GMCTr/btsGMVqcqf7/zNRKtGPuoBzB8ePtEsCWq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GMCTr/btsGMVqcqf7/zNRKtGPuoBzB8ePtEsCWq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GMCTr/btsGMVqcqf7/zNRKtGPuoBzB8ePtEsCWq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGMCTr%2FbtsGMVqcqf7%2FzNRKtGPuoBzB8ePtEsCWq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1261&quot; height=&quot;1270&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;1270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scm 으로 설정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;1344&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zEK2D/btsGNDh9jSP/08QjBwpSlfXkwDm9whnyN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zEK2D/btsGNDh9jSP/08QjBwpSlfXkwDm9whnyN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zEK2D/btsGNDh9jSP/08QjBwpSlfXkwDm9whnyN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzEK2D%2FbtsGNDh9jSP%2F08QjBwpSlfXkwDm9whnyN1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1267&quot; height=&quot;1344&quot; data-origin-width=&quot;1267&quot; data-origin-height=&quot;1344&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;988&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctNfjb/btsGNMeQdYp/e9JPtLhxHuc2XU2a3Ymbg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctNfjb/btsGNMeQdYp/e9JPtLhxHuc2XU2a3Ymbg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctNfjb/btsGNMeQdYp/e9JPtLhxHuc2XU2a3Ymbg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctNfjb%2FbtsGNMeQdYp%2Fe9JPtLhxHuc2XU2a3Ymbg0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1233&quot; height=&quot;988&quot; data-origin-width=&quot;1233&quot; data-origin-height=&quot;988&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;1158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/db2nja/btsGNBkk1ti/5agxns5H1pCjRdq7vJ4SDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/db2nja/btsGNBkk1ti/5agxns5H1pCjRdq7vJ4SDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/db2nja/btsGNBkk1ti/5agxns5H1pCjRdq7vJ4SDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdb2nja%2FbtsGNBkk1ti%2F5agxns5H1pCjRdq7vJ4SDk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1275&quot; height=&quot;1158&quot; data-origin-width=&quot;1275&quot; data-origin-height=&quot;1158&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실습 : secret text&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;관리 &amp;rarr; Credentials &amp;rarr; + Add Credentials &amp;rarr; Secret text : Usename(root), Password(qwe123), ID(&lt;span data-token-index=&quot;1&quot;&gt;vmsshpw)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1293&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/da4IbR/btsGNfIAGTo/K0mItDXxtHhwKIeu27Xqk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/da4IbR/btsGNfIAGTo/K0mItDXxtHhwKIeu27Xqk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/da4IbR/btsGNfIAGTo/K0mItDXxtHhwKIeu27Xqk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fda4IbR%2FbtsGNfIAGTo%2FK0mItDXxtHhwKIeu27Xqk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1293&quot; height=&quot;504&quot; data-origin-width=&quot;1293&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;1309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCoh9X/btsGNev60Df/RiOhbWYuPulK3pTQ0qrGw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCoh9X/btsGNev60Df/RiOhbWYuPulK3pTQ0qrGw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCoh9X/btsGNev60Df/RiOhbWYuPulK3pTQ0qrGw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCoh9X%2FbtsGNev60Df%2FRiOhbWYuPulK3pTQ0qrGw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1216&quot; height=&quot;1309&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;1309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;실습 : secret files&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;kube config 파일을 자신의 PC에 복사 &amp;rarr; Jenkins Web에 Secret files 등록&lt;/p&gt;
&lt;pre id=&quot;code_1713559485570&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;scp root@&amp;lt;작업용EC2_공인IP&amp;gt;:/root/.kube/config .

# 아래 확인을 위해 모니터링
watch -d kubectl get pod&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;1330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T1OgQ/btsGL1kfQhC/EYyoSsTrrmNZgwA9fb2x20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T1OgQ/btsGL1kfQhC/EYyoSsTrrmNZgwA9fb2x20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T1OgQ/btsGL1kfQhC/EYyoSsTrrmNZgwA9fb2x20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT1OgQ%2FbtsGL1kfQhC%2FEYyoSsTrrmNZgwA9fb2x20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1260&quot; height=&quot;1330&quot; data-origin-width=&quot;1260&quot; data-origin-height=&quot;1330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1713559651205&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any
    environment {
        MY_KUBECONFIG = credentials('k8sconfig')
    }

    stages {
        stage('remote k8s api') {
            steps {
                sh(&quot;kubectl --kubeconfig $MY_KUBECONFIG get pods -A&quot;)
                sh(&quot;kubectl --kubeconfig $MY_KUBECONFIG run nginx --image nginx --port=80&quot;)
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;1320&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kMUJm/btsGMMUs6YS/4qtXKCNZtc47lWB5lUdGs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kMUJm/btsGMMUs6YS/4qtXKCNZtc47lWB5lUdGs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kMUJm/btsGMMUs6YS/4qtXKCNZtc47lWB5lUdGs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkMUJm%2FbtsGMMUs6YS%2F4qtXKCNZtc47lWB5lUdGs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1288&quot; height=&quot;1320&quot; data-origin-width=&quot;1288&quot; data-origin-height=&quot;1320&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins &amp;rarr; Credentials &amp;rarr; Add &amp;rarr; Secret file : File(업로드), ID(&lt;b&gt;k8sconfig&lt;/b&gt;)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1291&quot; data-origin-height=&quot;976&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K9SR2/btsGNBLqcKi/b6NwsuulZktK7hH1aCaPdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K9SR2/btsGNBLqcKi/b6NwsuulZktK7hH1aCaPdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K9SR2/btsGNBLqcKi/b6NwsuulZktK7hH1aCaPdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK9SR2%2FbtsGNBLqcKi%2Fb6NwsuulZktK7hH1aCaPdk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1291&quot; height=&quot;976&quot; data-origin-width=&quot;1291&quot; data-origin-height=&quot;976&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Jenkins with k8s&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사전 준비 : 젠킨스에서 k8s 를 사용 할 수 있도록 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713560012112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# jenkins 사용자에서 아래 작업 진행
whoami
mkdir ~/.kube&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceBN56/btsGLCE0yUW/ThK0bjzJfRjnEKlnRynb90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceBN56/btsGLCE0yUW/ThK0bjzJfRjnEKlnRynb90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceBN56/btsGLCE0yUW/ThK0bjzJfRjnEKlnRynb90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceBN56%2FbtsGLCE0yUW%2FThK0bjzJfRjnEKlnRynb90%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1029&quot; height=&quot;208&quot; data-origin-width=&quot;1029&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713560023782&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# root 계정에서 아래 복사 실행
cp ~/.kube/config /var/lib/jenkins/.kube/config
chown jenkins:jenkins /var/lib/jenkins/.kube/config&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oiq3s/btsGNatRxgW/BQNPMlRYG25VrrUSIvOn80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oiq3s/btsGNatRxgW/BQNPMlRYG25VrrUSIvOn80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oiq3s/btsGNatRxgW/BQNPMlRYG25VrrUSIvOn80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foiq3s%2FbtsGNatRxgW%2FBQNPMlRYG25VrrUSIvOn80%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1155&quot; height=&quot;466&quot; data-origin-width=&quot;1155&quot; data-origin-height=&quot;466&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713560128884&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# jenkins 사용자에서 aws eks 사용(sts 호출 등)을 위한 자격증명 설정
aws configure
AWS Access Key ID [None]: ###
AWS Secret Access Key [None]: ###
Default region name [None]: ap-northeast-2

# jenkins 사용자에서 kubectl 명령어 사용 확인
kubectl get pods -A&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brYVwM/btsGM23MZAw/6dTpKkVZkktOFires6t5K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brYVwM/btsGM23MZAw/6dTpKkVZkktOFires6t5K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brYVwM/btsGM23MZAw/6dTpKkVZkktOFires6t5K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrYVwM%2FbtsGM23MZAw%2F6dTpKkVZkktOFires6t5K0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1119&quot; height=&quot;753&quot; data-origin-width=&quot;1119&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; 파이프라인으로 &lt;span data-token-index=&quot;1&quot;&gt;디플로이먼트/서비스&lt;/span&gt; 배포 &lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;yaml 파일 수정 : 도커 이미지 수정 작업&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;1098&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X3ezI/btsGOfVohK5/3TKBYN0unywlVOWrSLMbf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X3ezI/btsGOfVohK5/3TKBYN0unywlVOWrSLMbf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X3ezI/btsGOfVohK5/3TKBYN0unywlVOWrSLMbf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX3ezI%2FbtsGOfVohK5%2F3TKBYN0unywlVOWrSLMbf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1492&quot; height=&quot;1098&quot; data-origin-width=&quot;1492&quot; data-origin-height=&quot;1098&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;957&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biRFjf/btsGMfv0cAl/PFziDqaGm1wvbAnNAJe1n1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biRFjf/btsGMfv0cAl/PFziDqaGm1wvbAnNAJe1n1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biRFjf/btsGMfv0cAl/PFziDqaGm1wvbAnNAJe1n1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiRFjf%2FbtsGMfv0cAl%2FPFziDqaGm1wvbAnNAJe1n1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1264&quot; height=&quot;957&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;957&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;k8s-1 아이템 생성&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;1264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b70ivQ/btsGLD40gHN/X64a6hQ8kMh7tKnq1UILe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b70ivQ/btsGLD40gHN/X64a6hQ8kMh7tKnq1UILe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b70ivQ/btsGLD40gHN/X64a6hQ8kMh7tKnq1UILe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb70ivQ%2FbtsGLD40gHN%2FX64a6hQ8kMh7tKnq1UILe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1252&quot; height=&quot;1264&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;1264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;파이프라인 스크립트&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713560468850&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pipeline {
    agent any

    tools {
        jdk 'jdk-17'
    }

    environment {
        DOCKERHUB_USERNAME = 'gasida'
        GITHUB_URL = 'https://github.com/&amp;lt;본인 깃헙id&amp;gt;/aews-cicd.git'
        // deployment-svc.yaml -&amp;gt; image: &amp;lt;도커 허브id&amp;gt;/myweb:v1.0.0        
        DIR_NUM = '3'
    }

    stages {
        stage('Container Build') {
            steps {	
                // 릴리즈파일 체크아웃
                checkout scmGit(branches: [[name: '*/main']], 
                    extensions: [[$class: 'SparseCheckoutPaths', 
                    sparseCheckoutPaths: [[path: &quot;/${DIR_NUM}&quot;]]]], 
                    userRemoteConfigs: [[url: &quot;${GITHUB_URL}&quot;]])

                // 컨테이너 빌드 및 업로드
                sh &quot;docker build -t ${DOCKERHUB_USERNAME}/myweb:v1.0.0 ./${DIR_NUM}&quot;
                sh &quot;docker push ${DOCKERHUB_USERNAME}/myweb:v1.0.0&quot;
            }
        }

        stage('K8S Deploy') {
            steps {
                sh &quot;kubectl apply -f ./${DIR_NUM}/deploy/deployment-svc.yaml&quot;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dt3JL4/btsGME96K0f/JmiI3NRVnU9nBksgw2G5fk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dt3JL4/btsGME96K0f/JmiI3NRVnU9nBksgw2G5fk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dt3JL4/btsGME96K0f/JmiI3NRVnU9nBksgw2G5fk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdt3JL4%2FbtsGME96K0f%2FJmiI3NRVnU9nBksgw2G5fk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1255&quot; height=&quot;1354&quot; data-origin-width=&quot;1255&quot; data-origin-height=&quot;1354&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;확인&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Hys4B/btsGNZyoYG5/SjFMAGUs2uUYLQsfrWMa4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Hys4B/btsGNZyoYG5/SjFMAGUs2uUYLQsfrWMa4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Hys4B/btsGNZyoYG5/SjFMAGUs2uUYLQsfrWMa4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHys4B%2FbtsGNZyoYG5%2FSjFMAGUs2uUYLQsfrWMa4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1264&quot; height=&quot;955&quot; data-origin-width=&quot;1264&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W4spZ/btsGNe31usH/jw85J9QRnS4pGNGg8u1Kg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W4spZ/btsGNe31usH/jw85J9QRnS4pGNGg8u1Kg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W4spZ/btsGNe31usH/jw85J9QRnS4pGNGg8u1Kg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW4spZ%2FbtsGNe31usH%2Fjw85J9QRnS4pGNGg8u1Kg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1147&quot; height=&quot;453&quot; data-origin-width=&quot;1147&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;접속 테스트를 위한 파드 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713560669394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 배포
cat &amp;lt;&amp;lt;EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: netpod
  labels:
    app: pod
spec:
  containers:
  - name: netshoot-pod
    image: nicolaka/netshoot
    command: [&quot;tail&quot;]
    args: [&quot;-f&quot;, &quot;/dev/null&quot;]
  terminationGracePeriodSeconds: 0
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;배포 및 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1713560712315&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
kubectl exec -it netpod -- curl myweb:8080
kubectl exec -it netpod -- curl myweb:8080 | grep Web
while true; do kubectl exec -it netpod -- curl myweb:8080 | grep Web; echo; done

# 작업공간 확인
tree /var/lib/jenkins/workspace/k8s-1
cat /var/lib/jenkins/workspace/k8s-1/Dockerfile&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;442&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oi8s9/btsGOdQOO07/zFaugDnjcN05F17Dj3xXv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oi8s9/btsGOdQOO07/zFaugDnjcN05F17Dj3xXv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oi8s9/btsGOdQOO07/zFaugDnjcN05F17Dj3xXv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foi8s9%2FbtsGOdQOO07%2FzFaugDnjcN05F17Dj3xXv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1021&quot; height=&quot;442&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;442&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;참고 자료&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #777777; text-align: center;&quot;&gt;&lt;a href=&quot;https://wookiist.dev/155&quot;&gt;https://wookiist.dev/155&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713553217000&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[DevOps/번역글] Github Actions냐 Jenkins냐! 올바른 선택을 해봅시다&quot; data-og-description=&quot;시작하기에 앞서, 본 포스트는 &amp;quot;Github Actions or Jenkins? Making the Right Choice for You&amp;quot; 를 읽고 한국어로 정리하기 위해 쓴 번역 글입니다. 오역이 있거나 미숙한 번역이 있을 수 있습니다. 많은 지적질 부&quot; data-og-host=&quot;wookiist.dev&quot; data-og-source-url=&quot;https://wookiist.dev/155&quot; data-og-url=&quot;https://wookiist.dev/155&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/chXzbC/hyVSYdotQy/HRUEUkbL02wYQsXA5oSX90/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/NBNof/hyVSUIQH17/ELKnsjBkkKRwK1buy8Qtx0/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/bT0CwB/hyVS4YZajT/wPjurFwrNPlwFS5DxfZ5E0/img.png?width=920&amp;amp;height=734&amp;amp;face=0_0_920_734&quot;&gt;&lt;a href=&quot;https://wookiist.dev/155&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://wookiist.dev/155&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/chXzbC/hyVSYdotQy/HRUEUkbL02wYQsXA5oSX90/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/NBNof/hyVSUIQH17/ELKnsjBkkKRwK1buy8Qtx0/img.png?width=120&amp;amp;height=120&amp;amp;face=0_0_120_120,https://scrap.kakaocdn.net/dn/bT0CwB/hyVS4YZajT/wPjurFwrNPlwFS5DxfZ5E0/img.png?width=920&amp;amp;height=734&amp;amp;face=0_0_920_734');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[DevOps/번역글] Github Actions냐 Jenkins냐! 올바른 선택을 해봅시다&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;시작하기에 앞서, 본 포스트는 &quot;Github Actions or Jenkins? Making the Right Choice for You&quot; 를 읽고 한국어로 정리하기 위해 쓴 번역 글입니다. 오역이 있거나 미숙한 번역이 있을 수 있습니다. 많은 지적질 부&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;wookiist.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@mirrorkyh/11%EC%9B%94-4%EC%A3%BC%EC%B0%A8-jenkins-Poll-scm-%EA%B8%B0%EB%8A%A5-%EC%84%A4%EC%A0%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@mirrorkyh/11%EC%9B%94-4%EC%A3%BC%EC%B0%A8-jenkins-Poll-scm-%EA%B8%B0%EB%8A%A5-%EC%84%A4%EC%A0%95&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713553217379&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[11월 4주차] jenkins Poll scm 기능 설정&quot; data-og-description=&quot;&amp;bull; 사용 이유&amp;bull; 유사기능 Build periodically&amp;bull; 크론 작업 형식&amp;bull; Poll SCM사용 이유빌드 트리거를 주로 웹훅을 사용하지만특정 상황에는 웹훅을 사용하지 못하는 경우가 발생할 수 있기 때문에웹훅을 &quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@mirrorkyh/11%EC%9B%94-4%EC%A3%BC%EC%B0%A8-jenkins-Poll-scm-%EA%B8%B0%EB%8A%A5-%EC%84%A4%EC%A0%95&quot; data-og-url=&quot;https://velog.io/@mirrorkyh/11월-4주차-jenkins-Poll-scm-기능-설정&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cptPIR/hyVS2fNeU9/OQZeQp7n15Q0Y4ukGnmVd0/img.png?width=731&amp;amp;height=461&amp;amp;face=0_0_731_461,https://scrap.kakaocdn.net/dn/4WVRM/hyVS6CufJC/VOgDefCsrfnYZIsQaQP4KK/img.png?width=731&amp;amp;height=461&amp;amp;face=0_0_731_461,https://scrap.kakaocdn.net/dn/jBujC/hyVS1OIJxE/PqGpmrWJHKNo4Ek3v5Wu80/img.png?width=731&amp;amp;height=461&amp;amp;face=0_0_731_461&quot;&gt;&lt;a href=&quot;https://velog.io/@mirrorkyh/11%EC%9B%94-4%EC%A3%BC%EC%B0%A8-jenkins-Poll-scm-%EA%B8%B0%EB%8A%A5-%EC%84%A4%EC%A0%95&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@mirrorkyh/11%EC%9B%94-4%EC%A3%BC%EC%B0%A8-jenkins-Poll-scm-%EA%B8%B0%EB%8A%A5-%EC%84%A4%EC%A0%95&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cptPIR/hyVS2fNeU9/OQZeQp7n15Q0Y4ukGnmVd0/img.png?width=731&amp;amp;height=461&amp;amp;face=0_0_731_461,https://scrap.kakaocdn.net/dn/4WVRM/hyVS6CufJC/VOgDefCsrfnYZIsQaQP4KK/img.png?width=731&amp;amp;height=461&amp;amp;face=0_0_731_461,https://scrap.kakaocdn.net/dn/jBujC/hyVS1OIJxE/PqGpmrWJHKNo4Ek3v5Wu80/img.png?width=731&amp;amp;height=461&amp;amp;face=0_0_731_461');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[11월 4주차] jenkins Poll scm 기능 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;bull; 사용 이유&amp;bull; 유사기능 Build periodically&amp;bull; 크론 작업 형식&amp;bull; Poll SCM사용 이유빌드 트리거를 주로 웹훅을 사용하지만특정 상황에는 웹훅을 사용하지 못하는 경우가 발생할 수 있기 때문에웹훅을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra &amp;amp; DevOps/CICD</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/77</guid>
      <comments>https://bravesunfish.tistory.com/77#entry77comment</comments>
      <pubDate>Fri, 19 Apr 2024 03:44:04 +0900</pubDate>
    </item>
    <item>
      <title>[EKS] CI/CD</title>
      <link>https://bravesunfish.tistory.com/76</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;eks 대문이미지.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cObmx8/btsGKdqPWvm/hkHP9TjWXvn3YkjQAvdDF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cObmx8/btsGKdqPWvm/hkHP9TjWXvn3YkjQAvdDF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cObmx8/btsGKdqPWvm/hkHP9TjWXvn3YkjQAvdDF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcObmx8%2FbtsGKdqPWvm%2FhkHP9TjWXvn3YkjQAvdDF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;458&quot; data-filename=&quot;eks 대문이미지.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;458&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #555555; text-align: start;&quot;&gt;Amazon EKS Workshop Study 2기&lt;/span&gt;&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #555555; text-align: start;&quot;&gt;7주차&lt;/span&gt;&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #555555; text-align: start;&quot;&gt;CI/CD&lt;/span&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;eks 환경에서 젠킨스와 argoCD 를 활용한 CI/CD 파이프라인 구축&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;실습환경 구성&lt;/p&gt;
&lt;pre id=&quot;code_1713465980895&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -O https://s3.ap-northeast-2.amazonaws.com/cloudformation.cloudneta.net/K8S/eks-oneclick6.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713468857083&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# default 네임스페이스 적용
kubectl ns default

# 노드 정보 확인 : t3.medium
kubectl get node --label-columns=node.kubernetes.io/instance-type,eks.amazonaws.com/capacityType,topology.kubernetes.io/zone

# ExternalDNS
MyDomain=&amp;lt;자신의 도메인&amp;gt;
echo &quot;export MyDomain=&amp;lt;자신의 도메인&amp;gt;&quot; &amp;gt;&amp;gt; /etc/profile

MyDomain=peachengineer.click
echo &quot;export MyDomain=peachengineer.click&quot; &amp;gt;&amp;gt; /etc/profile
MyDnzHostedZoneId=$(aws route53 list-hosted-zones-by-name --dns-name &quot;${MyDomain}.&quot; --query &quot;HostedZones[0].Id&quot; --output text)
echo $MyDomain, $MyDnzHostedZoneId
curl -s -O https://raw.githubusercontent.com/gasida/PKOS/main/aews/externaldns.yaml
MyDomain=$MyDomain MyDnzHostedZoneId=$MyDnzHostedZoneId envsubst &amp;lt; externaldns.yaml | kubectl apply -f -

# kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set env.TZ=&quot;Asia/Seoul&quot; --namespace kube-system
kubectl patch svc -n kube-system kube-ops-view -p '{&quot;spec&quot;:{&quot;type&quot;:&quot;LoadBalancer&quot;}}'
kubectl annotate service kube-ops-view -n kube-system &quot;external-dns.alpha.kubernetes.io/hostname=kubeopsview.$MyDomain&quot;
echo -e &quot;Kube Ops View URL = http://kubeopsview.$MyDomain:8080/#scale=1.5&quot;

# AWS LB Controller
helm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=$CLUSTER_NAME \
  --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controller

# gp3 스토리지 클래스 생성
kubectl apply -f https://raw.githubusercontent.com/gasida/PKOS/main/aews/gp3-sc.yaml&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;475&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfa6TI/btsGIOS8sOE/C5DJOb09Ek5oM1kNGfJZk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfa6TI/btsGIOS8sOE/C5DJOb09Ek5oM1kNGfJZk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfa6TI/btsGIOS8sOE/C5DJOb09Ek5oM1kNGfJZk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfa6TI%2FbtsGIOS8sOE%2FC5DJOb09Ek5oM1kNGfJZk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;999&quot; height=&quot;475&quot; data-origin-width=&quot;999&quot; data-origin-height=&quot;475&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4YqQ6/btsGJcMTfF8/HpU19SjYcgZLZHTKPnOTp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4YqQ6/btsGJcMTfF8/HpU19SjYcgZLZHTKPnOTp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4YqQ6/btsGJcMTfF8/HpU19SjYcgZLZHTKPnOTp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4YqQ6%2FbtsGJcMTfF8%2FHpU19SjYcgZLZHTKPnOTp0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1138&quot; height=&quot;522&quot; data-origin-width=&quot;1138&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;프로메테우스 &amp;amp; 그라파나 설정&lt;/p&gt;
&lt;pre id=&quot;code_1713469062656&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 사용 리전의 인증서 ARN 확인
CERT_ARN=`aws acm list-certificates --query 'CertificateSummaryList[].CertificateArn[]' --output text`
echo $CERT_ARN

# repo 추가
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

# 파라미터 파일 생성 : PV/PVC(AWS EBS) 삭제에 불편하니, 4주차 실습과 다르게 PV/PVC 미사용
cat &amp;lt;&amp;lt;EOT &amp;gt; monitor-values.yaml
prometheus:
  prometheusSpec:
    podMonitorSelectorNilUsesHelmValues: false
    serviceMonitorSelectorNilUsesHelmValues: false
    retention: 5d
    retentionSize: &quot;10GiB&quot;

  ingress:
    enabled: true
    ingressClassName: alb
    hosts: 
      - prometheus.$MyDomain
    paths: 
      - /*
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{&quot;HTTPS&quot;:443}, {&quot;HTTP&quot;:80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
      alb.ingress.kubernetes.io/group.name: study
      alb.ingress.kubernetes.io/ssl-redirect: '443'

grafana:
  defaultDashboardsTimezone: Asia/Seoul
  adminPassword: prom-operator
  defaultDashboardsEnabled: false

  ingress:
    enabled: true
    ingressClassName: alb
    hosts: 
      - grafana.$MyDomain
    paths: 
      - /*
    annotations:
      alb.ingress.kubernetes.io/scheme: internet-facing
      alb.ingress.kubernetes.io/target-type: ip
      alb.ingress.kubernetes.io/listen-ports: '[{&quot;HTTPS&quot;:443}, {&quot;HTTP&quot;:80}]'
      alb.ingress.kubernetes.io/certificate-arn: $CERT_ARN
      alb.ingress.kubernetes.io/success-codes: 200-399
      alb.ingress.kubernetes.io/load-balancer-name: myeks-ingress-alb
      alb.ingress.kubernetes.io/group.name: study
      alb.ingress.kubernetes.io/ssl-redirect: '443'

alertmanager:
  enabled: false
EOT
cat monitor-values.yaml | yh

# 배포
kubectl create ns monitoring
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack --version 57.2.0 \
--set prometheus.prometheusSpec.scrapeInterval='15s' --set prometheus.prometheusSpec.evaluationInterval='15s' \
-f monitor-values.yaml --namespace monitoring

# Metrics-server 배포
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

# 프로메테우스 ingress 도메인으로 웹 접속
echo -e &quot;Prometheus Web URL = https://prometheus.$MyDomain&quot;

# 그라파나 웹 접속 : 기본 계정 - admin / prom-operator
echo -e &quot;Grafana Web URL = https://grafana.$MyDomain&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;1246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bytmZt/btsGL47isH3/pjegibJ4eo91Lkvo6kcYc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bytmZt/btsGL47isH3/pjegibJ4eo91Lkvo6kcYc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bytmZt/btsGL47isH3/pjegibJ4eo91Lkvo6kcYc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbytmZt%2FbtsGL47isH3%2FpjegibJ4eo91Lkvo6kcYc0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1539&quot; height=&quot;1246&quot; data-origin-width=&quot;1539&quot; data-origin-height=&quot;1246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;도커&lt;/h4&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;본인 계정 생성 or 확인&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hub.docker.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713469394145&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Docker Hub Container Image Library | App Containerization&quot; data-og-description=&quot;Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.&quot; data-og-host=&quot;hub.docker.com&quot; data-og-source-url=&quot;https://hub.docker.com/&quot; data-og-url=&quot;https://hub.docker.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/oLJhR/hyVPS6KQdl/eX0J5ekzxGtisZj6oudXqk/img.png?width=2560&amp;amp;height=1030&amp;amp;face=0_0_2560_1030,https://scrap.kakaocdn.net/dn/b2MuS9/hyVPRmum4b/nBss6RKOhPJG413klTlQd1/img.png?width=980&amp;amp;height=515&amp;amp;face=0_0_980_515,https://scrap.kakaocdn.net/dn/c04ppq/hyVPNK9620/NmKQXUVgrfhUUv80m04rk0/img.png?width=980&amp;amp;height=515&amp;amp;face=0_0_980_515&quot;&gt;&lt;a href=&quot;https://hub.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://hub.docker.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/oLJhR/hyVPS6KQdl/eX0J5ekzxGtisZj6oudXqk/img.png?width=2560&amp;amp;height=1030&amp;amp;face=0_0_2560_1030,https://scrap.kakaocdn.net/dn/b2MuS9/hyVPRmum4b/nBss6RKOhPJG413klTlQd1/img.png?width=980&amp;amp;height=515&amp;amp;face=0_0_980_515,https://scrap.kakaocdn.net/dn/c04ppq/hyVPNK9620/NmKQXUVgrfhUUv80m04rk0/img.png?width=980&amp;amp;height=515&amp;amp;face=0_0_980_515');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Docker Hub Container Image Library | App Containerization&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hub.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;604&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BFcvj/btsGMgNmrcv/7ZMlOMf1bk6X45ERWwKiak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BFcvj/btsGMgNmrcv/7ZMlOMf1bk6X45ERWwKiak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BFcvj/btsGMgNmrcv/7ZMlOMf1bk6X45ERWwKiak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBFcvj%2FbtsGMgNmrcv%2F7ZMlOMf1bk6X45ERWwKiak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1230&quot; height=&quot;604&quot; data-origin-width=&quot;1230&quot; data-origin-height=&quot;604&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;자신만의 웹 서버 도커 이미지 생성 후 도커 컨테이너 실행&lt;/p&gt;
&lt;pre id=&quot;code_1713469509145&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# ubuntu 이미지 다운로드
docker pull ubuntu:20.04
docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;235&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpon0m/btsGJfW8FTM/93hnkNoDkkCMTB4ausBMy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpon0m/btsGJfW8FTM/93hnkNoDkkCMTB4ausBMy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpon0m/btsGJfW8FTM/93hnkNoDkkCMTB4ausBMy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcpon0m%2FbtsGJfW8FTM%2F93hnkNoDkkCMTB4ausBMy0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1110&quot; height=&quot;235&quot; data-origin-width=&quot;1110&quot; data-origin-height=&quot;235&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1713469364527&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 실습을 위한 디렉터리 생성 및 이동
mkdir -p /root/myweb &amp;amp;&amp;amp; cd /root/myweb

# Dockerfile 파일 생성
vi Dockerfile
FROM ubuntu:20.04
ENV TZ=Asia/Seoul VERSION=1.0.0 NICK=&amp;lt;자신의 닉네임&amp;gt;
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime &amp;amp;&amp;amp; echo $TZ &amp;gt; /etc/timezone &amp;amp;&amp;amp; \
    sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list &amp;amp;&amp;amp; \
    sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list &amp;amp;&amp;amp; \
    apt-get update &amp;amp;&amp;amp; apt-get install -y apache2 figlet &amp;amp;&amp;amp; \
    echo &quot;$NICK Web Server $VERSION&amp;lt;br&amp;gt;&quot; &amp;gt; /var/www/html/index.html &amp;amp;&amp;amp; \
    echo &quot;&amp;lt;pre&amp;gt;&quot; &amp;gt;&amp;gt; /var/www/html/index.html &amp;amp;&amp;amp; \
    figlet AEWS Study &amp;gt;&amp;gt; /var/www/html/index.html &amp;amp;&amp;amp; \
    echo &quot;&amp;lt;/pre&amp;gt;&quot; &amp;gt;&amp;gt; /var/www/html/index.html
EXPOSE 80
CMD [&quot;usr/sbin/apache2ctl&quot;, &quot;-DFOREGROUND&quot;]

# 이미지 빌드
cat Dockerfile
docker build -t myweb:v1.0.0 .
docker images
docker image history myweb:v1.0.0
docker image inspect myweb:v1.0.0 | jq&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;483&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi8DCG/btsGJol6nSJ/zsJWmAKU0DvLqBJj9zyvkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi8DCG/btsGJol6nSJ/zsJWmAKU0DvLqBJj9zyvkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi8DCG/btsGJol6nSJ/zsJWmAKU0DvLqBJj9zyvkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi8DCG%2FbtsGJol6nSJ%2FzsJWmAKU0DvLqBJj9zyvkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1173&quot; height=&quot;483&quot; data-origin-width=&quot;1173&quot; data-origin-height=&quot;483&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;컨테이너 동작 확인&lt;/p&gt;
&lt;pre id=&quot;code_1713469895196&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 컨테이너 실행
docker run -d -p 80:80 --rm --name myweb myweb:v1.0.0
docker ps
curl localhost

# 웹 접속 확인
curl -s ipinfo.io/ip | awk '{ print &quot;myweb = http://&quot;$1&quot;&quot; }'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l0OTG/btsGK6SeKh5/kYgc152Fdcs75mAM5Ix1l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l0OTG/btsGK6SeKh5/kYgc152Fdcs75mAM5Ix1l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l0OTG/btsGK6SeKh5/kYgc152Fdcs75mAM5Ix1l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl0OTG%2FbtsGK6SeKh5%2FkYgc152Fdcs75mAM5Ix1l0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1324&quot; height=&quot;499&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8DH3C/btsGI6eVbcn/PBFIHhZ06PaxtHmO8N4nFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8DH3C/btsGI6eVbcn/PBFIHhZ06PaxtHmO8N4nFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8DH3C/btsGI6eVbcn/PBFIHhZ06PaxtHmO8N4nFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8DH3C%2FbtsGI6eVbcn%2FPBFIHhZ06PaxtHmO8N4nFk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1240&quot; height=&quot;333&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 이미지가 만들어졌고, 동작을 확인 했다면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;해당 이미지를 도커 허브에 업로드&lt;/p&gt;
&lt;pre id=&quot;code_1713470141270&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#
DHUB=&amp;lt;도커 허브 계정&amp;gt;
DHUB=peachdo
docker tag myweb:v1.0.0 $DHUB/myweb:v1.0.0
docker images

# 도커 허브 로그인
docker login
Username: &amp;lt;자신의 ID&amp;gt;
Password: &amp;lt;암호&amp;gt;
## 로그인 정보는 /[계정명]/.docker/config.json 에 저장됨. docker logout 시 삭제됨
## cat /root/.docker/config.json | jq

# push 로 이미지를 저장소에 업로드
docker push $DHUB/myweb:v1.0.0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;882&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br0w0w/btsGKKWgJbm/Xr6KQwIotnrVmAwm3gLAgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br0w0w/btsGKKWgJbm/Xr6KQwIotnrVmAwm3gLAgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br0w0w/btsGKKWgJbm/Xr6KQwIotnrVmAwm3gLAgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr0w0w%2FbtsGKKWgJbm%2FXr6KQwIotnrVmAwm3gLAgK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1237&quot; height=&quot;882&quot; data-origin-width=&quot;1237&quot; data-origin-height=&quot;882&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;허브에 이미지 있으니까 필요하면 저기서 꺼내쓰고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬에서는 삭제&lt;/p&gt;
&lt;pre id=&quot;code_1713470270660&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 컨테이너 종료
docker rm -f myweb
docker ps

# 로컬 이미지 삭제
docker rmi $DHUB/myweb:v1.0.0
docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;도커 허브에서 해당 이미지 사용 시 동작여부 확인&lt;/p&gt;
&lt;pre id=&quot;code_1713470323879&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 
docker run -d -p 80:80 --rm --name myweb $DHUB/myweb:v1.0.0
docker iamges

# 확인
docker ps
curl localhost
curl -s ipinfo.io/ip | awk '{ print &quot;myweb = http://&quot;$1&quot;&quot; }'

# 삭제
docker rm -f myweb&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;684&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjw7jn/btsGJM1mKLx/P4xHgfgMilM81vY9kDDbJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjw7jn/btsGJM1mKLx/P4xHgfgMilM81vY9kDDbJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjw7jn/btsGJM1mKLx/P4xHgfgMilM81vY9kDDbJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcjw7jn%2FbtsGJM1mKLx%2FP4xHgfgMilM81vY9kDDbJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1324&quot; height=&quot;684&quot; data-origin-width=&quot;1324&quot; data-origin-height=&quot;684&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;젠킨스(w. k8s) -&amp;gt; 별도 페이지 링크&lt;/h4&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bravesunfish.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bravesunfish.tistory.com/77&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713560816256&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Jenkins]Jenkins 설치 및 실습&quot; data-og-description=&quot;Jenkins 개념 - 지속적 통합 &amp;amp; 배포를 위한 워크플로우 제어에 사용되는 툴 - 자바 기반의 오픈소스 -&amp;gt; 자바와 친화성이 높음 - 아파치 톰캣처럼 서블릿 컨테이너 내부에서 실행되는 서버 시스템 - &quot; data-og-host=&quot;bravesunfish.tistory.com&quot; data-og-source-url=&quot;https://bravesunfish.tistory.com/77&quot; data-og-url=&quot;https://bravesunfish.tistory.com/77&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/swf1B/hyVPJ3glgt/1h0eVJXuw3Kb5weSKZU321/img.jpg?width=530&amp;amp;height=349&amp;amp;face=254_34_317_102,https://scrap.kakaocdn.net/dn/de0Ztv/hyVST4euzJ/Kp8VGLFO6WwxS8blBsKSk0/img.jpg?width=530&amp;amp;height=349&amp;amp;face=254_34_317_102,https://scrap.kakaocdn.net/dn/423UL/hyVPSTqj5P/W5vRQBI8HP3qiI51LIp6B1/img.png?width=1171&amp;amp;height=1398&amp;amp;face=0_0_1171_1398&quot;&gt;&lt;a href=&quot;https://bravesunfish.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bravesunfish.tistory.com/77&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/swf1B/hyVPJ3glgt/1h0eVJXuw3Kb5weSKZU321/img.jpg?width=530&amp;amp;height=349&amp;amp;face=254_34_317_102,https://scrap.kakaocdn.net/dn/de0Ztv/hyVST4euzJ/Kp8VGLFO6WwxS8blBsKSk0/img.jpg?width=530&amp;amp;height=349&amp;amp;face=254_34_317_102,https://scrap.kakaocdn.net/dn/423UL/hyVPSTqj5P/W5vRQBI8HP3qiI51LIp6B1/img.png?width=1171&amp;amp;height=1398&amp;amp;face=0_0_1171_1398');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Jenkins]Jenkins 설치 및 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Jenkins 개념 - 지속적 통합 &amp;amp; 배포를 위한 워크플로우 제어에 사용되는 툴 - 자바 기반의 오픈소스 -&amp;gt; 자바와 친화성이 높음 - 아파치 톰캣처럼 서블릿 컨테이너 내부에서 실행되는 서버 시스템 -&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bravesunfish.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;아르고 -&amp;gt; 별도 페이지 링크&lt;/h4&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bravesunfish.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bravesunfish.tistory.com/78&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713629777012&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[ArgoCD] ArgoCD 설치 및 실습&quot; data-og-description=&quot;Argo 개념 ArgoCD란? - gitops를 구현하기 위해 쿠버네티스 어플리케이션 자동배포를 위한 오픈소스 - ci/cd 중 cd 를 담당 - 선언적 어플리케이션 관리를 사용 : 명시적으로 원하는 상태를 선언, argoCD가 &quot; data-og-host=&quot;bravesunfish.tistory.com&quot; data-og-source-url=&quot;https://bravesunfish.tistory.com/78&quot; data-og-url=&quot;https://bravesunfish.tistory.com/78&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ui4jy/hyVS28dGj2/KxpEsIkpDv9V4Mo3UN9TlK/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/ZZKtp/hyVS21sgML/i3lllxObQVkkKoeZemnDPk/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/bNXTDj/hyVS2f4evx/BXfKIKVLI9rdIo36x5JmEk/img.png?width=1730&amp;amp;height=1649&amp;amp;face=0_0_1730_1649&quot;&gt;&lt;a href=&quot;https://bravesunfish.tistory.com/78&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bravesunfish.tistory.com/78&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ui4jy/hyVS28dGj2/KxpEsIkpDv9V4Mo3UN9TlK/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/ZZKtp/hyVS21sgML/i3lllxObQVkkKoeZemnDPk/img.png?width=800&amp;amp;height=371&amp;amp;face=0_0_800_371,https://scrap.kakaocdn.net/dn/bNXTDj/hyVS2f4evx/BXfKIKVLI9rdIo36x5JmEk/img.png?width=1730&amp;amp;height=1649&amp;amp;face=0_0_1730_1649');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[ArgoCD] ArgoCD 설치 및 실습&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Argo 개념 ArgoCD란? - gitops를 구현하기 위해 쿠버네티스 어플리케이션 자동배포를 위한 오픈소스 - ci/cd 중 cd 를 담당 - 선언적 어플리케이션 관리를 사용 : 명시적으로 원하는 상태를 선언, argoCD가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;bravesunfish.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra &amp;amp; DevOps/k8s(EKS)</category>
      <category>argocd</category>
      <category>AWS</category>
      <category>CD</category>
      <category>CI</category>
      <category>DevOps</category>
      <category>EKS</category>
      <category>jenkins</category>
      <category>k8s</category>
      <category>배포</category>
      <category>쿠버네티스</category>
      <author>용감한 개복치</author>
      <guid isPermaLink="true">https://bravesunfish.tistory.com/76</guid>
      <comments>https://bravesunfish.tistory.com/76#entry76comment</comments>
      <pubDate>Fri, 19 Apr 2024 03:36:06 +0900</pubDate>
    </item>
  </channel>
</rss>