<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Developers Haven</title>
    <link>https://developers-haven.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Fri, 17 Jul 2026 13:39:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>DH&amp;rsquo;s Blog</managingEditor>
    <image>
      <title>Developers Haven</title>
      <url>https://tistory1.daumcdn.net/tistory/6376134/attach/d9cd0899a1ad4f38ba4d9ba73cd16cfd</url>
      <link>https://developers-haven.tistory.com</link>
    </image>
    <item>
      <title>스토리지-컴퓨팅 분리 아키텍처에 대하여</title>
      <link>https://developers-haven.tistory.com/82</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;기존 Hadoop 빅데이터 클러스터 아키텍처에서 스토리지-컴퓨팅 분리 아키텍처로 바뀌게 된 이유에 대해서 알아보자.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&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;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;기존 Hadoop 빅데이터 클러스터 아키텍처 구조&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Cnode(컴퓨팅 노드), Snode(스토리지 노드)가 하나로 구성&lt;/b&gt;된 구조&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;Hadoop의 데이터 지역성 활용 가능 &amp;rarr; 최대한 데이터가 저장된 노드에서 데이터를 처리하게 함으로써 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;데이터의 이동(move)을 줄이고, 네트워크를 통해 전달하지 않게 &lt;/span&gt;&lt;/b&gt;하여 처리 성능 향상&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하지만 시스템 확장에 비용이 많이 들며 비효율적이라는 문제가 존재 &amp;rarr; &lt;b&gt;Why&lt;/b&gt;? 컴퓨팅 파워와 스토리지 용량을 함께 늘려야하므로&lt;/span&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;스토리지-컴퓨팅 분리 아키텍처 구조&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;스토리지와 컴퓨팅의 독립적 확장이 가능&lt;/b&gt;하여 비교적 저렴&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;마이크로 서비스(s/w 기능을 작고 독립적으로 쪼개서 서비스를 제공) 아키텍처에 적합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;Spark의 경우, 메모리에 데이터를 올려서 처리하는 방식으로 스토리지-컴퓨팅 분리 아키텍처에 적합&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하지만 데이터를 읽기 위해서 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;네트워크 대역폭을 소모하는 것을 피할 수 없음&lt;/span&gt;&lt;/b&gt;&lt;/span&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;&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Q. 스토리지 종류(DAS, NAS, SAN)의 차이점은?&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1. DAS(Direct Attached Storage)&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-18 오후 2.11.07.png&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XZdaK/btsGKbMCQbV/VUkDWgvnjO5gy7GtAm9tt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XZdaK/btsGKbMCQbV/VUkDWgvnjO5gy7GtAm9tt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XZdaK/btsGKbMCQbV/VUkDWgvnjO5gy7GtAm9tt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXZdaK%2FbtsGKbMCQbV%2FVUkDWgvnjO5gy7GtAm9tt1%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;567&quot; height=&quot;346&quot; data-filename=&quot;edited_스크린샷 2024-04-18 오후 2.11.07.png&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;스토리지가 개별 호스트(ex. 컴퓨터, 서버)에 다이렉트로 연결&lt;/b&gt;&lt;/span&gt;되는 방식 &amp;rarr; 네트워크 연결 없음&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;각 호스트에서 스토리지까지 물리적으로 근접한 곳에서 접근 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하지만 호스트에 장애가 발생할 경우 스토리지에도 같이 접근이 제한되는 문제 존재&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2. NAS(Network Attached Storage)&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-18 오후 2.25.02.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dEgzsP/btsGKVbF1az/resTiIeuZLnBdyyoxaqlO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dEgzsP/btsGKVbF1az/resTiIeuZLnBdyyoxaqlO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dEgzsP/btsGKVbF1az/resTiIeuZLnBdyyoxaqlO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdEgzsP%2FbtsGKVbF1az%2FresTiIeuZLnBdyyoxaqlO1%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;594&quot; height=&quot;408&quot; data-filename=&quot;edited_스크린샷 2024-04-18 오후 2.25.02.png&quot; data-origin-width=&quot;2002&quot; data-origin-height=&quot;1374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ef6f53;&quot;&gt;스토리지와 호스트 사이에 네트워크를 두는 방식&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;스토리지는 직접 네트워크에 연결하여 데이터 공유 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;블록의 상위 개념인 파일(file)을 저장 단위로 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하지만 네트워크 병목 현상에 취약하며 대역폭에 제한이 있는 문제 존재&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;3. SAN(Storage Area Network)&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-18 오후 2.32.40.png&quot; data-origin-width=&quot;2124&quot; data-origin-height=&quot;1370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D0DpE/btsGJpkpHxS/QdvzgE6eQktj2HVadyU7U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D0DpE/btsGJpkpHxS/QdvzgE6eQktj2HVadyU7U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D0DpE/btsGJpkpHxS/QdvzgE6eQktj2HVadyU7U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD0DpE%2FbtsGJpkpHxS%2FQdvzgE6eQktj2HVadyU7U0%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;607&quot; height=&quot;392&quot; data-filename=&quot;edited_스크린샷 2024-04-18 오후 2.32.40.png&quot; data-origin-width=&quot;2124&quot; data-origin-height=&quot;1370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;여러 스토리지의 단일 네트워크에 연결시켜서 &lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;스토리지 전용 네트워크(SAN)를 구성&lt;/span&gt;&lt;/b&gt;하는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;호스트는 SAN 전용 네트워크를 통해 접근 가능&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;블록을 저장 단위로 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하지만 네트워크 복잡도가 높아지면서 상대적으로 비용이 높다는 문제 존재&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;참고 페이지&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;https://www.stevenjlee.net/2020/05/24/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EC%8A%A4%ED%86%A0%EB%A6%AC%EC%A7%80storyage-%EC%9D%98-%EC%A2%85%EB%A5%98das-nas-san-%EC%99%80-%EA%B0%9C%EB%85%90/&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[기술공부]/Data</category>
      <category>hadoop</category>
      <category>아키텍처</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/82</guid>
      <comments>https://developers-haven.tistory.com/82#entry82comment</comments>
      <pubDate>Thu, 18 Apr 2024 14:33:59 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 쿠버네티스 오브젝트 - service(서비스)에 대하여</title>
      <link>https://developers-haven.tistory.com/81</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nMIFw/btsGBxJDmGi/a9KARFn6ZNKBWqEcrivgS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nMIFw/btsGBxJDmGi/a9KARFn6ZNKBWqEcrivgS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nMIFw/btsGBxJDmGi/a9KARFn6ZNKBWqEcrivgS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnMIFw%2FbtsGBxJDmGi%2Fa9KARFn6ZNKBWqEcrivgS0%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;1140&quot; height=&quot;324&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod는 클러스터 내부에서만 접근이 가능하기 때문에 클러스터 외부에서 pod에 요청이 불가능하다. &lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;또한, &lt;b&gt;pod는 일회성으로 뜨고 지면서 IP가 계속 바뀌게 되고&lt;/b&gt; 클러스터 내/외부와의 통신을 유지하는 것이 불가능하다. 그래서 &lt;/span&gt;Service&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;를 통해 클러스터 내부에서 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot; data-text-custom-color=&quot;#0747a6&quot; data-renderer-mark=&quot;true&quot;&gt;고정 IP를 갖게 해서, &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;pod 그룹에 대한 단일 진입점으로 외부와 통신&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;할 수 있게&lt;/span&gt;&lt;/b&gt; 만들어준다.&lt;/span&gt;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;쉽게 생각하면 &lt;/span&gt;Service&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;는 클러스터 외부에서 트래픽이 들어오면 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start; color: #ef5369;&quot; data-text-custom-color=&quot;#0747a6&quot; data-renderer-mark=&quot;true&quot;&gt;해당 Service와 연결된 pod에게 트래픽을 전달&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;해주는 역할&lt;/span&gt;&lt;/b&gt;을 하는 것이다.&lt;/span&gt;&lt;/span&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;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Service에는 4가지 유형이 있으며 일반적으로는 아래와 같은 구성으로 이루어진다.&lt;/span&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-filename=&quot;edited_스크린샷 2024-04-13 오후 10.22.53.png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;1102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QYAXo/btsGByBPfXI/h765zziLKJ6j0y400gwZN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QYAXo/btsGByBPfXI/h765zziLKJ6j0y400gwZN0/img.png&quot; data-alt=&quot;Service의 일반적인 구성 (예시)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QYAXo/btsGByBPfXI/h765zziLKJ6j0y400gwZN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQYAXo%2FbtsGByBPfXI%2Fh765zziLKJ6j0y400gwZN0%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;825&quot; height=&quot;475&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 10.22.53.png&quot; data-origin-width=&quot;1912&quot; data-origin-height=&quot;1102&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Service의 일반적인 구성 (예시)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #172b4d; text-align: start; border-collapse: collapse; width: 100%; height: 365px;&quot; border=&quot;1&quot; data-table-width=&quot;658&quot; data-number-column=&quot;false&quot; data-testid=&quot;renderer-table&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;text-align: center; width: 16.8605%; height: 22px;&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-align=&quot;center&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;Service&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: center; width: 83.0233%; height: 22px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;특징&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 93px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 16.8605%; height: 93px;&quot; data-colwidth=&quot;122&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-align=&quot;center&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ClusterIP&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 83.0233%; height: 93px;&quot; data-colwidth=&quot;536&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;클러스터 내부에서 pod들이 다른 리소스들과 통신할 수 있는 클러스터 전용 IP&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #5733b1;&quot;&gt;클러스터 내부 통신만 가능&lt;/span&gt;하며 외부 트래픽은 받을 수 없다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 93px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 16.8605%; height: 93px;&quot; data-colwidth=&quot;122&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-align=&quot;center&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;NodePort&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 83.0233%; height: 93px;&quot; data-colwidth=&quot;536&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #5733b1;&quot;&gt;노드(host)에 노출되어 클러스터 내외부 통신이 모두 가능&lt;/span&gt;한 서비스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;외부에서 &amp;lt;노드IP&amp;gt;:&amp;lt;노드Port&amp;gt;로 서비스 접근 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 93px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 16.8605%; height: 93px;&quot; data-colwidth=&quot;122&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-align=&quot;center&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;LoadBalancer&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 83.0233%; height: 93px;&quot; data-colwidth=&quot;536&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;NodePort 방식은 외부 사용자에게 워커 노드의 정보가 노출되어야 하는 불편함이 존재&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #5733b1;&quot;&gt;1개의 노드 IP만을 외부로 노출&lt;/span&gt;하여 해당 IP로 모든 트래픽을 부하 분산 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 64px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 16.8605%; height: 64px;&quot; data-colwidth=&quot;122&quot;&gt;
&lt;div style=&quot;text-align: center;&quot; data-align=&quot;center&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ExternalName&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 83.0233%; height: 64px;&quot; data-colwidth=&quot;536&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;클러스터 내부에서 &lt;span style=&quot;color: #5733b1;&quot;&gt;외부의 특정 주소로 접근&lt;/span&gt;할 때 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;1. ClusterIP&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&gt;&lt;/h3&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;클러스터 내부에서만 접근&lt;/span&gt;할 수 있는 서비스 생성&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;label이 동일한 &lt;span style=&quot;color: #ef5369;&quot;&gt;pod 그룹의 단일 진입점인 &lt;b&gt;Virtual IP&lt;/b&gt;&lt;/span&gt;를 생성&lt;/li&gt;
&lt;li&gt;작업 요청이 서비스의 ClusterIP 주소로 전달되면, 해당 서비스는 pod 중 하나로 요청을 전달하여 처리(for 작업 부하 분산)&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #781b33;&quot;&gt;&lt;i&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;ClusterIP 서비스는 클러스터 내부에서만 접근이 가능하기 때문에, 클러스터 외부로 서비스를 노출 시키기 위해서 NodePort, LoadBalancer를 사용한다.&lt;/span&gt;&lt;/i&gt;&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;2. NodePort&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;(ClusterIP 위에)클러스터 모든 노드에서 지정된 포트를 열어 서비스에 접근 가능&lt;/li&gt;
&lt;li&gt;쉽게 생각하면 ClusterIP가 생성되고, &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;워커 노드의 Port&lt;/b&gt;를 사용하여 접속&lt;/span&gt;하는 방식&lt;/li&gt;
&lt;li&gt;외부에서 &amp;lt;NodeIP&amp;gt;:&amp;lt;Port&amp;gt;로 들어오는 요청을 감지하여, 서비스는 자신과 연결된 pod에 트래픽 전달&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;3. LoadBalancer&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;12158&quot; data-node-type=&quot;mediaSingle&quot; data-width-type=&quot;pixel&quot; data-width=&quot;455&quot; data-layout=&quot;center&quot;&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-size=&quot;2&quot; data-color=&quot;#091e4224&quot; data-mark-type=&quot;border&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;클러스터 외부&lt;/b&gt;에서 로드 밸런서를 사용&lt;/span&gt;하여 서비스 노출&lt;/span&gt;&lt;/li&gt;
&lt;li data-size=&quot;2&quot; data-color=&quot;#091e4224&quot; data-mark-type=&quot;border&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;로드 밸런서는 네트워크 트래픽을 분산하여 전달&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div data-size=&quot;2&quot; data-color=&quot;#091e4224&quot; data-mark-type=&quot;border&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-size=&quot;2&quot; data-color=&quot;#091e4224&quot; data-mark-type=&quot;border&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div data-size=&quot;2&quot; data-color=&quot;#091e4224&quot; data-mark-type=&quot;border&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-size=&quot;2&quot; data-color=&quot;#091e4224&quot; data-mark-type=&quot;border&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;4. ExternalName&lt;/b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서비스를 DNS 이름에 매핑하여 서비스 노출&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;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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;처음 서비스에 대한 개념을 접했을 때는, 알듯말듯 이해가 조금 어려운 부분이 있다. 쿠버네티스 오브젝트 중 특히 서비스의 경우, 단순 개념에 대해서만 찾아보는 것보다 직접 실습해보는 것이 이해가 훨씬 더 쉬울 것이다. 그래서 다음 시간에는 실제 쿠버네티스 안에서 서비스를 적용해보는 부분을 진행해보려고 한다.&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CsPNL/btsGBxv7Aad/ugByXhSX4oOWZIHduy7lZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CsPNL/btsGBxv7Aad/ugByXhSX4oOWZIHduy7lZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CsPNL/btsGBxv7Aad/ugByXhSX4oOWZIHduy7lZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCsPNL%2FbtsGBxv7Aad%2FugByXhSX4oOWZIHduy7lZK%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;484&quot; height=&quot;207&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/81</guid>
      <comments>https://developers-haven.tistory.com/81#entry81comment</comments>
      <pubDate>Sat, 13 Apr 2024 21:38:11 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 쿠버네티스 오브젝트 - pod에 대하여</title>
      <link>https://developers-haven.tistory.com/80</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HXWX0/btsGCrWfxWr/Q5w9n4yruSeaebZKSsxKN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HXWX0/btsGCrWfxWr/Q5w9n4yruSeaebZKSsxKN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HXWX0/btsGCrWfxWr/Q5w9n4yruSeaebZKSsxKN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHXWX0%2FbtsGCrWfxWr%2FQ5w9n4yruSeaebZKSsxKN1%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;1140&quot; height=&quot;324&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;k8s에서 파드(pod)는 &lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot; data-text-custom-color=&quot;#0747a6&quot; data-renderer-mark=&quot;true&quot;&gt;1개 이상의 컨테이너가 캡슐화 되어 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;클러스터 안에서 배포되는 가장 작은 단위의 객체&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;를 의미한다. 실제 Docker 로고는 고래 이미지를 따와서 만들어졌고, 고래의(컨테이너) 떼를 일컫는 파드(pod)라는 명칭으로 불리게 되었다.&lt;/span&gt;&lt;/span&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-filename=&quot;a1150b51-f463-48b5-9be9-cf1533859962.png&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VIrOQ/btsGCqiVkuw/YWOfKDvCV3uJx9kG8sAatK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VIrOQ/btsGCqiVkuw/YWOfKDvCV3uJx9kG8sAatK/img.png&quot; data-alt=&quot;(참고) Docker 로고&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VIrOQ/btsGCqiVkuw/YWOfKDvCV3uJx9kG8sAatK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVIrOQ%2FbtsGCqiVkuw%2FYWOfKDvCV3uJx9kG8sAatK%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;489&quot; height=&quot;269&quot; data-filename=&quot;a1150b51-f463-48b5-9be9-cf1533859962.png&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(참고) Docker 로고&lt;/figcaption&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #172b4d; text-align: center;&quot; data-renderer-start-pos=&quot;8229&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&amp;lt; Pod에 대하여 &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 10.03.07.png&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;1204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xwb8z/btsGBxv7YAd/BPC3L2RVpMKx6vM5P0FzYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xwb8z/btsGBxv7YAd/BPC3L2RVpMKx6vM5P0FzYK/img.png&quot; data-alt=&quot;(참고) k8s objects&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xwb8z/btsGBxv7YAd/BPC3L2RVpMKx6vM5P0FzYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fxwb8z%2FbtsGBxv7YAd%2FBPC3L2RVpMKx6vM5P0FzYK%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;697&quot; height=&quot;389&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 10.03.07.png&quot; data-origin-width=&quot;2160&quot; data-origin-height=&quot;1204&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(참고) k8s objects&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8229&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;pod의-기본적인-특징&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8229&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;1. pod의 기본적인 특징&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;하나의 pod에는 하나 이상의 컨테이너가 포함된다. (&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: left;&quot;&gt;1 Pod = N Containers&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod는 워커 노드 IP와 별개로 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;고유 IP를 할당&lt;/span&gt; &lt;/b&gt;받으며, pod 내의 &lt;b&gt;컨테이너들은 자신이 속한 pod IP를 공유&lt;/b&gt;한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;동일 pod내의 컨테이너들은 해당 pod가 가진 스토리지(volume)을 공유한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod는 반영속적인 속성을 가지고 있다.&lt;/span&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;&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;h2 id=&quot;pod의-생명주기&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8427&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2. pod의 생명주기&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Pending &lt;/b&gt;: 클러스터 내 pod 생성이 승인되었지만 아직 워커 노드에 배치되지 않은 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Running &lt;/b&gt;: 파드가 워커 노드에 배치되었고 내부 컨테이너도 모두 생성 완료된 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Succeeded &lt;/b&gt;: 파드 내의 모든 컨테이너가 작업을 정상적으로 마치고 종료된 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Failed &lt;/b&gt;: 파드 내의 컨테이너 중 하나 이상의 컨테이너가 비정상 종료된 상태&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Unknown/Terminating &lt;/b&gt;: Unknown은 파드 상태 확인이 불가능한 경우를 의미하며, Terminating은 파드를 삭제시킨 경우 나타남&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;&lt;/span&gt;&lt;b&gt;(참고)&lt;span style=&quot;color: #ef5369;&quot;&gt; Pending 상태가 지속되는 여러가지 상황&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;1. 배치 가능한 노드가 없어 스케줄링을 할 수 없는 경우&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;2. 이미지를 잘못 지정하여 이미지를 받지 못하는 경우&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;3. 컨테이너가 시작되었지만 아직 실행할 준비가 안된 경우&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;4. 볼륨에 문제가 있는 경우&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8880&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8880&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8882&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;pod-내부-컨테이너의-재시작-정책(컨테이너가-오류가-생겼을-때-재시작하는-방법)&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8882&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;3. pod 내부 컨테이너의 재시작 정책&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;8882&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod 내부 컨테이너가 오류 생겼을 때, 재시작하는 방법은 대표적으로 아래 3가지가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Always &lt;/b&gt;: 컨테이너가 정상/비정상 종료 시 항상 재시작 &amp;rarr; 컨테이너가 항상 구동 중이여야 하는 옵션&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Onfailure &lt;/b&gt;: 컨테이너가 비정상 종료되었을 때만 재시작&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Never &lt;/b&gt;: 오류와 상관 없이 재시작을 하지 않음&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;9062&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 id=&quot;pod-내부-컨테이너의-상태를-진단해주는-프로브(probe)&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;9062&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;4. pod 내부 컨테이너의 상태를 진단해주는 프로브(Probe)&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;프로브(Probe)는 &lt;b&gt;kubelet에 의해 주기적으로 수행되는 진단&lt;/b&gt;을 의미하며, &lt;span style=&quot;color: #ef5369;&quot;&gt;pod 안의 컨테이너 상태를 진단&lt;/span&gt;하여 컨테이너의 재시작 or 종료 필요 여부를 확인할 수 있도록 알려준다.&lt;/span&gt;&lt;/blockquote&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(1) 프로브 종류 3가지&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;아래 여러 방식을 함께 조합하여 사용 가능하며, 모든 프로브(Probe) 진단 결과가 Success이어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Liveness Probe&lt;/b&gt; : &lt;span style=&quot;color: #6164c6;&quot;&gt;컨테이너가 제대로 작동하고 있는지&lt;/span&gt; 확인 &amp;rarr; 문제 발생 시 컨테이너 재기동&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Readiness Probe&lt;/b&gt; : &lt;span style=&quot;color: #6164c6;&quot;&gt;컨테이너가 트래픽을 받을 준비&lt;/span&gt;가 되었는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Startup Probe&lt;/b&gt; : &lt;span style=&quot;color: #6164c6;&quot;&gt;컨테이너가 제대로 시작되었는지&lt;/span&gt; 확인&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(2) 프로브의 컨테이너 진단 방식&lt;/b&gt; &lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;컨테이너 진단을 통해 Success/Failure/Unknown 결과를 도출하고 Failure 반환 시 조치를 취하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;HTTP 방식(HttpGet)&lt;/b&gt; : 컨테이너 IP에 대한 Http Get 요청으로 응답 상태 코드 확인 (200 &amp;le; 상태코드 &amp;lt; 400이면 정상)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;TCP 방식(TcpSocket)&lt;/b&gt; : 컨테이너 IP에 대한 Tcp 검사를 수행해서 포트가 활성화되어 있는지 확인&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Exec 방식&lt;/b&gt; : 컨테이너 내부에서 지정된 명령어를 수행하여 종료 코드가 0인지 확인&lt;/span&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;&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;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;style6&quot; /&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3l5iY/btsGBYtuq2n/FXbkQMNQOFGxGFiHAUGMKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3l5iY/btsGBYtuq2n/FXbkQMNQOFGxGFiHAUGMKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3l5iY/btsGBYtuq2n/FXbkQMNQOFGxGFiHAUGMKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3l5iY%2FbtsGBYtuq2n%2FFXbkQMNQOFGxGFiHAUGMKk%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;442&quot; height=&quot;189&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;참고 페이지&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;https://seongjin.me/kubernetes-pods/&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/80</guid>
      <comments>https://developers-haven.tistory.com/80#entry80comment</comments>
      <pubDate>Sat, 13 Apr 2024 21:33:41 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 쿠버네티스 오브젝트란?</title>
      <link>https://developers-haven.tistory.com/79</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zoaEm/btsGBveaDlA/rgNle7tInhbpdHhDTBGSBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zoaEm/btsGBveaDlA/rgNle7tInhbpdHhDTBGSBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zoaEm/btsGBveaDlA/rgNle7tInhbpdHhDTBGSBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzoaEm%2FbtsGBveaDlA%2FrgNle7tInhbpdHhDTBGSBk%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;1140&quot; height=&quot;324&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;지금까지 쿠버네티스에 대한 개념과 전체적인 아키텍처에 대해서 알아보는 시간을 가졌다. 쿠버네티스에 대한 얘기에서 '&lt;b&gt;오브젝트&lt;/b&gt;(object)'가 빠질 수 없는데 이번 시간에는 오브젝트가 무엇을 의미하는지에 대해서 알아보도록 하자.&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[&lt;b&gt;지난 시간 내용 - 쿠버네티스의 아키텍처&lt;/b&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://developers-haven.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.04.13 - [[기술공부]/Kubernetes] - [k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1713007057028&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;[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)&quot; data-og-description=&quot;지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다. 이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자. [지&quot; data-og-host=&quot;developers-haven.tistory.com&quot; data-og-source-url=&quot;https://developers-haven.tistory.com/77&quot; data-og-url=&quot;https://developers-haven.tistory.com/77&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bh3lgj/hyVM0cL3jL/IQqgI6O1X17kuQ42iwbMyK/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/qvjMM/hyVMQVtwYo/QkIIIn7xLYMWOobfEIlWMk/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/bx5sms/hyVPMRr3pe/XAA4KEnTXlPWFnh6WPJeIK/img.png?width=2104&amp;amp;height=1062&amp;amp;face=0_0_2104_1062&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers-haven.tistory.com/77&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bh3lgj/hyVM0cL3jL/IQqgI6O1X17kuQ42iwbMyK/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/qvjMM/hyVMQVtwYo/QkIIIn7xLYMWOobfEIlWMk/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/bx5sms/hyVPMRr3pe/XAA4KEnTXlPWFnh6WPJeIK/img.png?width=2104&amp;amp;height=1062&amp;amp;face=0_0_2104_1062');&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;[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다. 이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자. [지&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers-haven.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;
&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;h2 id=&quot;2-2.-k8s-오브젝트&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: center;&quot; data-renderer-start-pos=&quot;7580&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;&amp;lt; k8s 오브젝트 &amp;gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 9.50.19.png&quot; data-origin-width=&quot;2144&quot; data-origin-height=&quot;1034&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NVdFf/btsGBRBkwOr/SqiMY3jtA8EO56E9hZcJAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NVdFf/btsGBRBkwOr/SqiMY3jtA8EO56E9hZcJAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NVdFf/btsGBRBkwOr/SqiMY3jtA8EO56E9hZcJAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNVdFf%2FbtsGBRBkwOr%2FSqiMY3jtA8EO56E9hZcJAk%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;692&quot; height=&quot;334&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 9.50.19.png&quot; data-origin-width=&quot;2144&quot; data-origin-height=&quot;1034&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;k8s는 클러스터 상태를 계속 체크하면서 &lt;b&gt;선언된 상태&lt;/b&gt;가 되도록 조치를 취해주게 된다. 이때, 다양한 오브젝트(object)를 이용하여 클러스터 상태를 나타내게 된다. 쉽게 생각하면 &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start; color: #ef5369;&quot; data-text-custom-color=&quot;#0747a6&quot; data-renderer-mark=&quot;true&quot;&gt;시스템에서 배포하고 관리되는 기본 단위&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt;를 &lt;b&gt;오브젝트&lt;/b&gt;라고 이해하면 된다.&lt;/span&gt;&lt;/span&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&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;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&amp;lt; 대표적인 k8s 오프젝트 6가지 &amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 9.58.28.png&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;1188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQsMDS/btsGARITEjK/uSn5dT9pKC0oELuRqdIxH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQsMDS/btsGARITEjK/uSn5dT9pKC0oELuRqdIxH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQsMDS/btsGARITEjK/uSn5dT9pKC0oELuRqdIxH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQsMDS%2FbtsGARITEjK%2FuSn5dT9pKC0oELuRqdIxH1%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;535&quot; height=&quot;464&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 9.58.28.png&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;1188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(1) Pod&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-text-custom-color=&quot;#0747a6&quot; data-renderer-mark=&quot;true&quot;&gt;k8s에서 실행되는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;가장 작은 배포 단위&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod 안에는 1개 이상의 컨테이너 생성 가능 (&lt;span style=&quot;color: #006dd7;&quot;&gt;1 Pod = N Containers&lt;/span&gt;)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod는 스토리지, 네트워크 속성을 가지며 &lt;span style=&quot;color: #006dd7;&quot;&gt;pod 내의 컨테이너는 해당 pod의 스토리지와 네트워크 공유&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #ef5369;&quot;&gt;&lt;b&gt;Why&lt;/b&gt;? 여러 컨테이너를 pod 단위로 묶어서 배포할까?&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot; data-text-custom-color=&quot;#97a0af&quot; data-renderer-mark=&quot;true&quot;&gt;pod 내의 컨테이너들은 동일 IP를 기준으로 서로 다른 port를 가지고 있는데 &amp;rarr; 컨테이너 끼리 데이터를 교환할 때 &lt;b&gt;IP 호출 없이 localhost를 통해서 통신 가능&lt;/b&gt; (컨테이너들간의 통신이 쉽고 효율적)&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(2) Deployment&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;여러 개의 pod를 생성하고 관리하는 역할 &amp;rarr; &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;pod 배포 자동화를 위한 오브젝트&lt;/b&gt;&lt;/span&gt; (with ReplicaSet &amp;amp; 배포 전략)&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ReplicaSet : 지정된 수만큼 pod 복제본을 유지하도록 보장&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;배포 전략 : k8s 서비스의 무중단 업데이트를 위한 배포 전략&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;Deployment 대표적인 배포 전략 3가지&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;1.&lt;b&gt; Recreate 전략&lt;/b&gt;&lt;br /&gt;: 새로운 App을 배포하기 위해 &lt;span style=&quot;color: #ef5369;&quot;&gt;이전 pod를 모두 삭제하고 새로운 pod를 생성&lt;/span&gt;하는 방식&lt;br /&gt;&lt;br /&gt;2. &lt;b&gt;Rolling update 전략&lt;/b&gt;&lt;br /&gt;: 이전 pod를 일정 갯수만큼 &lt;span style=&quot;color: #ef5369;&quot;&gt;점진적으로 새로운 pod로 교체&lt;/span&gt;하는 방식&lt;br /&gt;&lt;br /&gt;3. &lt;b&gt;Blue-Green 전략&lt;/b&gt;&lt;br /&gt;: 현재 환경(Blue)과 동일한 새로운 환경(Green)을 구성하여 &lt;span style=&quot;color: #ef5369;&quot;&gt;Green 환경에서 App 배포 후&lt;/span&gt; 테스트되면 트래픽을 Blue &amp;rarr; Green 환경으로 &lt;span style=&quot;color: #ef5369;&quot;&gt;전환하는 방식&lt;/span&gt; (만약 문제가 발생하면 롤백 가능)&lt;/span&gt;&lt;/blockquote&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(3) Service&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod는 클러스터 내부에서만 접근이 가능하기 때문에 &amp;rarr; 클러스터 외부에서 pod에 요청이 불가능하다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;이때 Service 오브젝트를 통해 클러스터 외부로부터 요청을 받을 수 있게 IP를 노출하게 된다 &amp;rarr; 쉽게 이해하자면 pod를 통해 실행되고 있는 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;App을 네트워크에 노출시켜주는 가상의 컴포넌트&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(4) Volume&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod 내의 컨테이너에 데이터를 저장하거나 공유하기 위한 저장 공간 &amp;rarr; pod가 접근하여 read/write 할 수 있는 곳&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;pod는 일시적으로 뜨고 사라지기 때문에 &amp;rarr; &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;pod가 종료되어도 데이터를 보존&lt;/span&gt;&lt;/b&gt;하기 위해 볼륨 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;대표적인 Volume 방식&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;1. &lt;b&gt;emptyDir :&lt;/b&gt;&amp;nbsp;pod의 라이프사이클 동안만 존재하는 임시 볼륨으로 pod가 종료되면 함께 사라짐&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;2. &lt;b&gt;hostPath :&lt;/b&gt;&amp;nbsp;pod가 올라간 Node의 path에 마운트하여 사용하는 방식&lt;/span&gt;&lt;/blockquote&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(5) Namespace&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;k8s 클러스터 내에 생성된 &lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;가상 클러스터&lt;/span&gt;&lt;/b&gt;로, 리소스들을 그룹화하여 사용할 수 있게 해주는 역할&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;팀/환경/서비스 단위 처럼 목적에 맞게 네임스페이스 구성 가능&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(6) Secret&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;암호화 데이터를 저장하는데 사용되며 비밀번호, ssh key 같은 민감 정보를 저장&lt;/span&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;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;실제 쿠버네티스에는 이 외에도 더 다양한 오브젝트들이 있다. 이번 시간에는 가장 기본적인 오브젝트가 무엇이고, 어떤 기능을 하는지에 대해서 배워보고자 했다. 앞으로 계속 쿠버네티스를 공부하면서 이러한 오브젝트들에 대해 더 깊은 내용을 하나씩 배워볼 예정이다.&lt;/span&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;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mlv9b/btsGC2BSS7D/nSEPSbB1MBodxgy71g1MO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mlv9b/btsGC2BSS7D/nSEPSbB1MBodxgy71g1MO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mlv9b/btsGC2BSS7D/nSEPSbB1MBodxgy71g1MO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmlv9b%2FbtsGC2BSS7D%2FnSEPSbB1MBodxgy71g1MO1%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;503&quot; height=&quot;215&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;참고 페이지&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;https://www.msaschool.io/operation/operation/operation-two/&lt;/span&gt;&lt;/blockquote&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/79</guid>
      <comments>https://developers-haven.tistory.com/79#entry79comment</comments>
      <pubDate>Sat, 13 Apr 2024 20:34:41 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (2)</title>
      <link>https://developers-haven.tistory.com/78</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJRQ4A/btsGAxX8Ljj/FPNtPrUNd8212thT4YDWkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJRQ4A/btsGAxX8Ljj/FPNtPrUNd8212thT4YDWkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJRQ4A/btsGAxX8Ljj/FPNtPrUNd8212thT4YDWkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJRQ4A%2FbtsGAxX8Ljj%2FFPNtPrUNd8212thT4YDWkK%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;1140&quot; height=&quot;324&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지난 시간에는 쿠버네티스에 대한 개념과 아키텍처에 대해 알아보았다. 쿠버네티스는 크게 마스터/워커 노드로 구성되어 있으며 지난 시간에는 마스터 노드의 구성과 역할에 대해서 알아보았다. 이번 시간에는 워커 노드에 대해서 자세히 알아보도록 하자.&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[&lt;b&gt;지난 시간 내용&lt;/b&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.04.13 - [[기술공부]/Kubernetes] - [k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712997036590&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;[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)&quot; data-og-description=&quot;지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다. 이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자. [지&quot; data-og-host=&quot;developers-haven.tistory.com&quot; data-og-source-url=&quot;https://developers-haven.tistory.com/77&quot; data-og-url=&quot;https://developers-haven.tistory.com/77&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bh3lgj/hyVM0cL3jL/IQqgI6O1X17kuQ42iwbMyK/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/qvjMM/hyVMQVtwYo/QkIIIn7xLYMWOobfEIlWMk/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/bx5sms/hyVPMRr3pe/XAA4KEnTXlPWFnh6WPJeIK/img.png?width=2104&amp;amp;height=1062&amp;amp;face=0_0_2104_1062&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/77&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers-haven.tistory.com/77&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bh3lgj/hyVM0cL3jL/IQqgI6O1X17kuQ42iwbMyK/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/qvjMM/hyVMQVtwYo/QkIIIn7xLYMWOobfEIlWMk/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/bx5sms/hyVPMRr3pe/XAA4KEnTXlPWFnh6WPJeIK/img.png?width=2104&amp;amp;height=1062&amp;amp;face=0_0_2104_1062');&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;[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다. 이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자. [지&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers-haven.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;
&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style8&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 id=&quot;1.-k8s(쿠버네티스)란?&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot; data-renderer-start-pos=&quot;2524&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1. k8s(쿠버네티스)란?&lt;/b&gt;&lt;/span&gt;&lt;/h1&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;646&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NnYtx/btsGAcsZhKV/874FdIw3c8fNCo6GJbjQRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NnYtx/btsGAcsZhKV/874FdIw3c8fNCo6GJbjQRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NnYtx/btsGAcsZhKV/874FdIw3c8fNCo6GJbjQRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNnYtx%2FbtsGAcsZhKV%2F874FdIw3c8fNCo6GJbjQRK%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;646&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;646&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;k8s는 컨테이너 런타임(Container Runtime, 컨테이너 실행 엔진)을 통해 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;컨테이너를 다루는 도구&lt;/b&gt;&lt;/span&gt; 중 하나이다. 노드에 컨테이너를 분산 배치하거나, 오류가 생긴 컨테이너를 교체하는 것 같은 일을 통해 &lt;b&gt;컨테이너를 관리&lt;/b&gt;해준다. 그리고 k8s는 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;선언형 인터페이스&lt;/b&gt;&lt;/span&gt;를 사용하여 &lt;b&gt;클러스터 상태를 계속 체크&lt;/b&gt;하면서 선언된 상태가 되도록 조치를 취하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;(참고) 명령형 인터페이스와 선언형 인터페이스의 차이&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;1. &lt;b&gt;명령형 인터페이스&lt;/b&gt;(CLI, Command-Line Interface) - 사용자가 직접 명령을 내리고 실행하며, 각 단계 및 세부사항을 명시해줘야 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;2. &lt;b&gt;선언형 인터페이스&lt;/b&gt;(Declarative Interface) - 사용자는 원하는 최종 상태만을 선언하고, 시스템은 해당 상태를 달성하기 위해 작업을 자동으로 처리해준다.&lt;/span&gt;&lt;/blockquote&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2974&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 id=&quot;2.-k8s-아키텍처&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2974&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;2. k8s 아키텍처&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 id=&quot;2-1.-k8s-마스터와-워커-노드-구성도&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-ke-size=&quot;size26&quot; data-renderer-start-pos=&quot;2987&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Worker Node 구성도&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 5.28.48.png&quot; data-origin-width=&quot;2104&quot; data-origin-height=&quot;872&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Fore2/btsGBPwJO4Z/fAQt369WBk95WVhzQKZfk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Fore2/btsGBPwJO4Z/fAQt369WBk95WVhzQKZfk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Fore2/btsGBPwJO4Z/fAQt369WBk95WVhzQKZfk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFore2%2FbtsGBPwJO4Z%2FfAQt369WBk95WVhzQKZfk1%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;2104&quot; height=&quot;872&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 5.28.48.png&quot; data-origin-width=&quot;2104&quot; data-origin-height=&quot;872&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 style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(1) Kube-proxy&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각 워커 노드에서 구동되는 네트워크 proxy 서버로 &lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;k8s 내부 네트워크 트래픽 관리&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;워커 노드의 네트워크 규칙을 유지 및 관리&lt;/span&gt;&lt;/b&gt;하며 클러스터 내외부 통신을 가능하게 만듦&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;구조: &lt;b&gt;1개의 워커 노드&lt;/b&gt; &amp;rarr;&lt;b&gt; 1개 이상의 pod&lt;/b&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr;&lt;/span&gt;&amp;nbsp;&lt;b&gt;각 pod 안에는 1개 이상의 컨테이너&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;워커 노드마다 Kube-proxy를 가지고 있고, 해당 워커 노드 내에는 1개 이상의 pod가 배치될 수 있다. 그리고 각 &lt;span style=&quot;color: #ef5369;&quot;&gt;pod는 저마다 고유한 IP 주소&lt;/span&gt;를 가지게 되고 &lt;span style=&quot;color: #ef5369;&quot;&gt;동일 pod 내의 컨테이너들은 해당 pod의 IP를 같이 공유&lt;/span&gt;한다. 이때, Kube-proxy를 통해 서로 다른 워커 노드에 있는 pod간의 통신이 이루어진다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;pre id=&quot;code_1712993270189&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;+----------------------------------------------------------------------------+
|                              워커 노드 (Worker Node)                         |
|                              (IP: 192.168.0.10)                            |
|                              +------------------+                          |
|                              |    kube-proxy    |                          |
|                              +------------------+                          |
|                                       |                                    |
|                                       v                                    |
|                                                                            |
|       +---------------------------+      +---------------------------+     |
|       |            파드            |      |            파드            |     |
|       |    (Pod - IP: 10.1.0.2)   |      |    (Pod - IP: 10.1.0.3)   |     |
|       |     +-----------------+   |      |     +-----------------+   |     |
|       |     | 컨테이너 1        |   |      |     | 컨테이너 1        |   |      |
|       |     | (IP: 10.1.0.2)  |   |      |     | (IP: 10.1.0.3)  |   |     |
|       |     | Port: 8080      |   |      |     | Port: 8080      |   |     |
|       |     +-----------------+   |      |     +-----------------+   |     |
|       |     | 컨테이너 2        |   |      |     | 컨테이너 2        |   |      |
|       |     | (IP: 10.1.0.2)  |   |      |     | (IP: 10.1.0.3)  |   |     |
|       |     | Port: 8081      |   |      |     | Port: 8081      |   |     |
|       |     +-----------------+   |      |     +-----------------+   |     |
|       +---------------------------+      +---------------------------+     |
+----------------------------------------------------------------------------+​&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&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;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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(2) Kubelet&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;마스터 노드의 &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;Kube-API-Server와 통신&lt;/b&gt;&lt;/span&gt;하며 서버를 통해 들어오는 신호 모니터링&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;pod 상태를 유지 및 관리(생명주기 관리)&lt;/span&gt;&lt;/b&gt;하여 pod에서 컨테이너가 정상 동작하도록 관리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쉽게 생각하면 노드의 심장처럼 모니터링하고 관리하는 역할과 같음&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;Kubelet 기능&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;(1) &lt;b&gt;pod 관리&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;: 마스터 노드로 부터 할당된 pod를 워커 노드에 배치하고 실행하는 역할 &amp;rarr; &lt;span style=&quot;color: #ef5369;&quot;&gt;pod 상태를 주기적으로 모니터링하고 관리&lt;/span&gt;하며 안정성을 유지&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;&lt;br /&gt;(2) &lt;b&gt;Container 실행&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;: &lt;span style=&quot;color: #ef5369;&quot;&gt;pod에 정의된 컨테이너를 실행하고 관리&lt;/span&gt;하는 역할 &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr; &lt;/span&gt;컨테이너 런타임(ex. Docker, Containerd)을 사용하여 컨테이너를 시작하고 중지시킴&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;&lt;br /&gt;(3) &lt;b&gt;리소스 모니터링&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;: 워커 노드의 리소스 사용량을 모니터링하며 &lt;span style=&quot;color: #ef5369;&quot;&gt;클러스터 상태 파악&lt;/span&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr; &lt;/span&gt;이러한 정보가 마스터 노드의 Kube-API-Server에 전달되어 &amp;lsquo;스케줄링&amp;rsquo;에 사용됨&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;&lt;br /&gt;(4) &lt;b&gt;상태(이벤트) 보고&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;: 마스터 노드의 &lt;span style=&quot;color: #ef5369;&quot;&gt;Kube-API-Server에 주기적으로 노드와 파드 상태 보고&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;&lt;br /&gt;(5) &lt;b&gt;노드 자동 복구&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;: 워커 노드가 비정상적으로 종료되면 &lt;span style=&quot;color: #ef5369;&quot;&gt;자동으로 복구 시도&lt;/span&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr; &lt;/span&gt;노드 장애 시 클러스터 안정성 보장 가능&lt;/span&gt;&lt;/blockquote&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;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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(3) Container Runtime Engine&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;워커 노드에서 컨테이너 실행을 담당하는 S/W (ex. Docker)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;컨테이너 이미지를 가져오고 구동시키는 엔진 역할&lt;/span&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;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;두 번의 시간에 걸쳐, 쿠버네티스의 전체적인 &lt;b&gt;아키텍처&lt;/b&gt;와 &lt;b&gt;마스터/워커 노드의 구성과 역할&lt;/b&gt;에 대해서 알아보았다. 쿠버네티스를 처음 접한다면 아키텍처를 먼저 이해하는 것이 가장 중요하다고 할 수 있다. 이제 아키텍처를 이해했다면 그 다음으로 쿠버네티스의 오브젝트에 대해서 알아보도록 하자. 오늘도 이 내용이 많은 사람들에게 도움이 되었으면 좋겠다:)&lt;/span&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;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cv6A4c/btsGA0ZRmQQ/12EsdWzXFt1UR7XVJkatok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cv6A4c/btsGA0ZRmQQ/12EsdWzXFt1UR7XVJkatok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cv6A4c/btsGA0ZRmQQ/12EsdWzXFt1UR7XVJkatok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcv6A4c%2FbtsGA0ZRmQQ%2F12EsdWzXFt1UR7XVJkatok%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;508&quot; height=&quot;217&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/78</guid>
      <comments>https://developers-haven.tistory.com/78#entry78comment</comments>
      <pubDate>Sat, 13 Apr 2024 16:40:55 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 쿠버네티스란? with 쿠버네티스 아키텍처 - (1)</title>
      <link>https://developers-haven.tistory.com/77</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nH87K/btsGCmU3DuY/lRAfuhfz40g1tlHxkUyOV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nH87K/btsGCmU3DuY/lRAfuhfz40g1tlHxkUyOV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nH87K/btsGCmU3DuY/lRAfuhfz40g1tlHxkUyOV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnH87K%2FbtsGCmU3DuY%2FlRAfuhfz40g1tlHxkUyOV1%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;1140&quot; height=&quot;324&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;지금까지 가상화 배포에서 컨테이너 배포로 바뀌게 된 배경과, 쿠버네티스가 등장하게 된 배경에 대해 알아보았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 시간에는 쿠버네티스의 개념과 아키텍처에 대해 알아보도록 하자.&lt;/span&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;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[&lt;b&gt;지난 시간 내용&lt;/b&gt;]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://developers-haven.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.04.13 - [[기술공부]/Kubernetes] - [k8s] 도커와 쿠버네티스의 관계&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712991712066&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;[k8s] 도커와 쿠버네티스의 관계&quot; data-og-description=&quot;지난 시간에는 가상화 배포 환경에서 컨테이너 배포 환경으로 바뀌게 된 이유와 컨테이너가 무엇인지에 대해서 알아보았다. 컨테이너 기술과 관련된 내용 중에 우리가 가장 많이 들어본 것이 &quot; data-og-host=&quot;developers-haven.tistory.com&quot; data-og-source-url=&quot;https://developers-haven.tistory.com/76&quot; data-og-url=&quot;https://developers-haven.tistory.com/76&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUBkoF/hyVPWT3vqH/guJCgC9v2HLpbUbznG6fkK/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/bJghFO/hyVMLzSzC9/okfbZJmpRz563fTlh9Y5jk/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/B42ZM/hyVMY0hwQu/NXoGEjESmjK7wITdtE2gZ0/img.png?width=1140&amp;amp;height=324&amp;amp;face=0_0_1140_324&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/76&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers-haven.tistory.com/76&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUBkoF/hyVPWT3vqH/guJCgC9v2HLpbUbznG6fkK/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/bJghFO/hyVMLzSzC9/okfbZJmpRz563fTlh9Y5jk/img.png?width=578&amp;amp;height=247&amp;amp;face=0_0_578_247,https://scrap.kakaocdn.net/dn/B42ZM/hyVMY0hwQu/NXoGEjESmjK7wITdtE2gZ0/img.png?width=1140&amp;amp;height=324&amp;amp;face=0_0_1140_324');&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;[k8s] 도커와 쿠버네티스의 관계&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 시간에는 가상화 배포 환경에서 컨테이너 배포 환경으로 바뀌게 된 이유와 컨테이너가 무엇인지에 대해서 알아보았다. 컨테이너 기술과 관련된 내용 중에 우리가 가장 많이 들어본 것이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers-haven.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;
&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;style8&quot; /&gt;
&lt;h1 style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot; data-renderer-start-pos=&quot;2524&quot;&gt;&amp;nbsp;&lt;/h1&gt;
&lt;h1 id=&quot;1.-k8s(쿠버네티스)란?&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: left;&quot; data-renderer-start-pos=&quot;2524&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;1. k8s(쿠버네티스)란?&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;k8s는 컨테이너 런타임(Container Runtime, 컨테이너 실행 엔진)을 통해 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;컨테이너를 다루는 도구&lt;/b&gt;&lt;/span&gt; 중 하나이다. 노드에 컨테이너를 분산 배치하거나, 오류가 생긴 컨테이너를 교체하는 것 같은 일을 통해 &lt;b&gt;컨테이너를 관리&lt;/b&gt;해준다. 그리고 k8s는 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;선언형 인터페이스&lt;/b&gt;&lt;/span&gt;를 사용하여 &lt;b&gt;클러스터 상태를 계속 체크&lt;/b&gt;하면서 선언된 상태가 되도록 조치를 취하게 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(참고) 명령형 인터페이스와 선언형 인터페이스의 차이&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. &lt;b&gt;명령형 인터페이스&lt;/b&gt;(CLI, Command-Line Interface) - 사용자가 직접 명령을 내리고 실행하며, 각 단계 및 세부사항을 명시해줘야 한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. &lt;b&gt;선언형 인터페이스&lt;/b&gt;(Declarative Interface) - 사용자는 원하는 최종 상태만을 선언하고, 시스템은 해당 상태를 달성하기 위해 작업을 자동으로 처리해준다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2974&quot;&gt;&amp;nbsp;&lt;/h1&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;h1 id=&quot;2.-k8s-아키텍처&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2974&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;2. k8s 아키텍처&lt;/b&gt;&lt;/span&gt;&lt;/h1&gt;
&lt;h2 id=&quot;2-1.-k8s-마스터와-워커-노드-구성도&quot; style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2987&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;k8s 마스터와 워커 노드 구성도&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 5.20.38.png&quot; data-origin-width=&quot;2104&quot; data-origin-height=&quot;1062&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFzfrS/btsGAxDQrSZ/m6KCeKvyzuHKqmNAlTtzqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFzfrS/btsGAxDQrSZ/m6KCeKvyzuHKqmNAlTtzqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFzfrS/btsGAxDQrSZ/m6KCeKvyzuHKqmNAlTtzqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFzfrS%2FbtsGAxDQrSZ%2Fm6KCeKvyzuHKqmNAlTtzqk%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;2104&quot; height=&quot;1062&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 5.20.38.png&quot; data-origin-width=&quot;2104&quot; data-origin-height=&quot;1062&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;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;쿠버네티스는 마스터 노드와 워커 노드로 구성된다. 쉽게 생각하면 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;마스터 노드&lt;/b&gt;&lt;/span&gt;는 &lt;b&gt;클러스터 상태를 관리 및 조정&lt;/b&gt;하는 역할, &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;워커 노드&lt;/span&gt;&lt;/b&gt;는 클러스터 내에서 &lt;b&gt;응용 프로그램을 실행&lt;/b&gt;하기 위한 컴포넌트 역할이다. 이번 시간에는 마스터 노드를 구성하는 기능들과 각 역할에 대해서 알아보도록 하자.&lt;/span&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;Master Node (= Control Plane) 구성도&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 5.15.32.png&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;1074&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbzAXq/btsGB3g8ruA/Bt4EkRL8PWQYAnWKFqPIOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbzAXq/btsGB3g8ruA/Bt4EkRL8PWQYAnWKFqPIOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbzAXq/btsGB3g8ruA/Bt4EkRL8PWQYAnWKFqPIOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbzAXq%2FbtsGB3g8ruA%2FBt4EkRL8PWQYAnWKFqPIOK%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;379&quot; height=&quot;431&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 5.15.32.png&quot; data-origin-width=&quot;944&quot; data-origin-height=&quot;1074&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3085&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3085&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(1) Kube-API-Server&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;워커 노드와 통신하는 주체&lt;/span&gt;&lt;/b&gt;로 클러스터 내의 모든 명령과 통신은 Kube-API-Server를 통해서 이루어진다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;Etcd 저장소와 직접 상호 작용&lt;/span&gt;&lt;/b&gt;하는 유일한 구성 요소이다. (Etcd는 아래에 설명)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;kubectl command는 API Sever로 전송되고 해당 서버는 명령을 처리할 수 있는 다른 컴포넌트에게 요청을 전달한다.&lt;/span&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;&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;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(2) Kube-Scheduler&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;새로운 pod가 생성되면&lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt; 이를 감지하여 &lt;/span&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;어떤 워&lt;/b&gt;커 노드로 배치할지 결정&lt;/span&gt;&lt;/b&gt;하는 작업을 &amp;lsquo;스케줄링&amp;rsquo;이라고 하며 &amp;rarr; 이러한 스케줄링을 담당하는 것이 Kube-Scheduler이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;pod의 리소스 요구사항, 노드의 가용성 등을 모두 고려하여 어떤 워커 노드로 배치될지 결정된다. (참고로, pod는 k8s에서 실행되는 기본 작업 단위)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #666666;&quot;&gt;kube-scheduler 스케줄링 알고리즘&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;br /&gt;(1)&amp;nbsp;&lt;b&gt;가중치 기반(Weighted) 알고리즘&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;: &lt;span style=&quot;color: #ef5369;&quot;&gt;노드의 리소스 용량 및 부하 상태 등을 고려하여 노드에 가중치를 부여&lt;/span&gt;하고, 이를 기반으로 스케줄링을 결정 &amp;rarr; 가중치가 높은 워커 노드에 우선적으로 pod가 할당되는 방식&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(2)&amp;nbsp;&lt;b&gt;라운드 로빈(Round Robin) 알고리즘&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;: &lt;span style=&quot;color: #ef5369;&quot;&gt;워커 노드의 순서대로 pod가 할당&lt;/span&gt;되는 방식 &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr; &lt;/span&gt;모든 워커 노드에 균등하게 pod를 배치할 수는 있지만 노드의 상태 같은 부분은 고려하지 않음&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(3)&lt;b&gt;&amp;nbsp;랜덤(Random) 알고리즘&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;: &lt;span style=&quot;color: #ef5369;&quot;&gt;워커 노드를 랜덤으로 선택하여 pod가 할당&lt;/span&gt;되는 방식 &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #fcfcfc; color: #666666; text-align: left;&quot;&gt;&amp;rarr; &lt;/span&gt;가장 간단하고 빠르게 동작하지만 노드 상태나 부하 등을 역시 고려하지 않음&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3842&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3842&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;각 스케줄링 알고리즘은 클러스터의 요구사항과 운영 환경에 따라 저마다 적합한 방식이 있다. 예를 들어,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3898&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3898&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Serif KR';&quot;&gt;&lt;i&gt;리소스 부족 상황&amp;nbsp;&lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;&amp;rarr; Weighted &lt;/span&gt;알고리즘&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3924&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Serif KR';&quot;&gt;&lt;i&gt;균형잡힌 부하 분산이 요구되는 상황&amp;nbsp;&lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;&amp;rarr;&lt;/span&gt; Round Robin 알고리즘&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3960&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666; font-family: 'Noto Serif KR';&quot;&gt;&lt;i&gt;pod 간의 우선순위가 없는 상황&amp;nbsp;&lt;span style=&quot;background-color: #fcfcfc; text-align: left;&quot;&gt;&amp;rarr;&lt;/span&gt; Random 알고리즘&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3991&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3991&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;처럼 각 클러스터 상황에 적절한 스케줄링 알고리즘을 정할 수 있다. (하지만 반드시 A상황에는 B알고리즘이 적합하다는 식으로 일반화하는 것은 No)&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3844&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3991&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3991&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3991&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;3991&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(3) Kube-Controller-Manager&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;클러스터 내에서 실행되는 &lt;b&gt;Controller를 통합 관리&lt;/b&gt;하는 프로세스&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;워커 노드를 관리하는 주체로, API Server를 통해 클러스터의 상태를 감시하고 조치하는 역할이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;(참고) &lt;b&gt;Controller&lt;/b&gt;는&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR'; letter-spacing: 0px;&quot;&gt;시스템 내의 &lt;b&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;컴포넌트들의 상태를 지속적으로 모니터링&lt;/span&gt;&lt;/b&gt;하여 &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;선언된 상태(desired state)가 유지&lt;/b&gt;&lt;/span&gt;될 수 있도록 하는 역할&lt;/span&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;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(4) Etcd&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;클러스터 상태와 설정 정보를&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;key-value로 보관&lt;/b&gt;&lt;/span&gt;하는 DB(Store) &amp;rarr; ex. 클러스터 및 리소스 정보, 상태정보 등&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;API Server가 현재 가지고 있는 선언된 상태에 대한 값을 백업해두는 곳으로 안전을 위해 분산 저장한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고로 $kubectl get pods 명령과 같은 command는 Etcd 서버로부터 정보를 가져오는 것이다.&lt;/span&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;&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;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;style6&quot; /&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이번 시간에는 쿠버네티스가 무엇인지와 아키텍처 중 마스터 노드에 대해서 알아봤다. 새로운 기술을 배우기 위해서는 그 기술의 아키텍처를 먼저 이해하는 것이 중요하다고 말할 수 있다. 아키텍처를 익히면 내부 동작이 어떻게 이뤄지는지 더 이해하기 쉽기 때문이다. 이번에는 쿠버네티스 마스터 노드에 대해서 알아보았고, 다음에는 워커 노드의 구성에 대해서 알아볼 예정이다.&lt;/span&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;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcftbl/btsGCoFlOML/vjmGyA5zVX3vOUSa9IX0w1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcftbl/btsGCoFlOML/vjmGyA5zVX3vOUSa9IX0w1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcftbl/btsGCoFlOML/vjmGyA5zVX3vOUSa9IX0w1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcftbl%2FbtsGCoFlOML%2FvjmGyA5zVX3vOUSa9IX0w1%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;522&quot; height=&quot;223&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/77</guid>
      <comments>https://developers-haven.tistory.com/77#entry77comment</comments>
      <pubDate>Sat, 13 Apr 2024 16:23:50 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 도커와 쿠버네티스의 관계</title>
      <link>https://developers-haven.tistory.com/76</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l9jnI/btsGASt8yk7/KPQJGtUCUdjqK1QpuQmOek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l9jnI/btsGASt8yk7/KPQJGtUCUdjqK1QpuQmOek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l9jnI/btsGASt8yk7/KPQJGtUCUdjqK1QpuQmOek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl9jnI%2FbtsGASt8yk7%2FKPQJGtUCUdjqK1QpuQmOek%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;1140&quot; height=&quot;324&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;지난 시간에는 가상화 배포 환경에서 컨테이너 배포 환경으로 바뀌게 된 이유와 컨테이너가 무엇인지에 대해서 알아보았다. 컨테이너 기술과 관련된 내용 중에 우리가 가장 많이 들어본 것이 도커(Docker)와 쿠버네티스(kubernetes, k8s)이다. 처음 공부를 하는 경우 도커랑 쿠버네티스를 많이 헷갈려하는데 이번에는 그 둘의 관계성에 대해서 자세히 알아보는 시간을 가져보도록 하자.&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;참고로, 쿠버네티스를 &lt;i&gt;Kubernetes&lt;/i&gt; 혹은 &lt;i&gt;k8s &lt;/i&gt;(k~s 중간에 8개의 글자가 있어서)라고도 부른다.&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[&lt;b&gt;지난 시간 내용&lt;/b&gt;]&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/75&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.04.13 - [[기술공부]/Kubernetes] - [k8s] 컨테이너 등장 배경 with 가상화 배포 환경&lt;/a&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[컨테이너 기술의 배경 with Docker &amp;amp; k8s]&lt;/span&gt;&lt;/b&gt;&lt;/h3&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;시간이 지나면서 S/W 개발과 배포 과정은 복잡해졌고, 이러한 복잡성을 관리하기 위해 &lt;b&gt;컨테이너화 기술&lt;/b&gt;이 등장하게 되었다. 이때 등장한 기술이 &lt;b&gt;Docker&lt;/b&gt;(by. Docker.Inc)이고 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;컨테이너 생성, 배포, 관리&lt;/b&gt;&lt;/span&gt;를 쉽게 하는 것을 지원해주었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1019&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;점차 컨테이너 사용이 일반화 되면서 어떻게 하면 많은 &lt;b&gt;컨테이너들을 관리하고 조율&lt;/b&gt;할 수 있을지에 대해 고민을 하기 시작했고, 이러한 부분을 해결하기 위해 등장하게 된 기술이 &lt;b&gt;Kubernetes&lt;/b&gt;(by. Google)이다.&lt;/span&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;다시 말하자면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Docker&lt;/b&gt;&lt;/span&gt;&amp;nbsp; &amp;rarr; &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;컨테이너의 생성과 배포&lt;/b&gt;&lt;/span&gt;를 단순화 시켜주는 기술&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Kubernetes&lt;/b&gt;&lt;/span&gt;&amp;nbsp; &amp;rarr; &lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;컨테이너의 생명 주기를 관리&lt;/b&gt;&lt;/span&gt;하고 스케일링 및 장애 복구를 자동 처리해주는 기술&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;처음에는 &lt;b&gt;도커와 쿠버네티스&lt;/b&gt;를 함께 사용할 때 시너지가 발생하면서 &lt;b&gt;상호 보완적인 기술&lt;/b&gt;이었고, 쿠버네티스는 도커 외의 다른 런타임 엔진은 지원하지 않았다. 하지만 도커는 컨테이너를 사용하는 사용자 경험에 집중하면서 Monolithic(단일) 아키텍처를 나누는 작업을 하면서 &lt;b&gt;도커 엔진 내에 API, CLI, Network, Storage와 같은 여러 기능이 추가&lt;/b&gt; 되었다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;결국, Docker 새로운 버전이 나올 때 마다 쿠버네티스도 함께 영향을 받게 되었고 또한 한편에서는 다른 컨테이너 런타임 엔진을 지원해달라는 요구도 나오게 되었다. 이러한 계기로 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;컨테이너 기술에 대한 표준&lt;/span&gt;&lt;/b&gt;을 정하는 &lt;b&gt;OCI(Open Container Initiative) 오픈 소스 프로젝트&lt;/b&gt;가 시작되었다. &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;본 프로젝트(OCI)를 통해 도커와 쿠버네티스는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1645&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Docker&lt;/b&gt;&lt;/span&gt; &amp;rarr; OCI 표준을 준수하는 컨테이너 런타임인 &lt;b&gt;Containerd&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1689&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #9feec3;&quot;&gt;&lt;b&gt;Kubernetes&lt;/b&gt;&lt;/span&gt; &amp;rarr; OCI 표준을 준수하는&lt;b&gt; Container Runtime Interface&lt;/b&gt;를 개발하게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;1180&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이를 통해 도커의 버전에 상관없이 모든 컨테이너 이미지를 쿠버네티스 환경에서 실행 가능하게 되었다. 그리고 &lt;b&gt;Containerd&lt;/b&gt;는 컨테이너의 생명주기를 관리하기 위한 최소한의 필요 기능만 제공하여 &lt;b&gt;가벼운 런타임 엔진&lt;/b&gt;이 될 수 있었다. 그래서 요즘 많은 회사에서 Containerd 런타임 엔진과 쿠버네티스를 함께 사용하고 있다.&lt;/span&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이 내용을 알고 나면 도커와 쿠버네티스가 다시 헷갈리진 않을 것이다. 항상 새로운 기술을 배우기 전에는 그 기술이 등장하게 된 배경에 대해서 찾아보면 이해가 더 잘 될 수 있다. 오늘도 이 내용이 많은 사람들에게 도움이 되었으면 좋겠다:)&amp;nbsp;&lt;/span&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;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFEK7o/btsGBgg0mY8/SmYxWQrokm19qEKksMaKQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFEK7o/btsGBgg0mY8/SmYxWQrokm19qEKksMaKQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFEK7o/btsGBgg0mY8/SmYxWQrokm19qEKksMaKQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFEK7o%2FbtsGBgg0mY8%2FSmYxWQrokm19qEKksMaKQK%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;545&quot; height=&quot;233&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(참고 페이지)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;https://www.linkedin.com/pulse/containerd%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%99%9C-%EC%A4%91%EC%9A%94%ED%95%A0%EA%B9%8C-sean-lee/&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>container</category>
      <category>docker</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/76</guid>
      <comments>https://developers-haven.tistory.com/76#entry76comment</comments>
      <pubDate>Sat, 13 Apr 2024 15:19:59 +0900</pubDate>
    </item>
    <item>
      <title>[k8s] 컨테이너 등장 배경 with 가상화 배포 환경</title>
      <link>https://developers-haven.tistory.com/75</link>
      <description>&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-filename=&quot;blob&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/evlYTW/btsGCxaW6NI/KbwJsmKEaCFaDAKHU2UAxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/evlYTW/btsGCxaW6NI/KbwJsmKEaCFaDAKHU2UAxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/evlYTW/btsGCxaW6NI/KbwJsmKEaCFaDAKHU2UAxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FevlYTW%2FbtsGCxaW6NI%2FKbwJsmKEaCFaDAKHU2UAxk%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;1140&quot; height=&quot;324&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1140&quot; data-origin-height=&quot;324&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;요즘 많은 기업에서 클라우드에 관심을 가지고 있고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;현재 재직중인 회사에서도 클라우드 빅데이터 플랫폼을 출시하면서 쿠버네티스 환경을 많이 사용하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;이번 기회를 통해, 쿠버네티스가 무엇이며 어떠한 구성 원리로 이루어지는지 배워보려 한다.&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;새로운 기술을 처음 배울 때는, 그 기술이 왜 등장했는지를 먼저 알게되면 이후의 내용을 이해하는데 도움이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;그래서 이번 시간에는 본격적인 쿠버네티스에 대한 내용에 들어가기 앞서,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;가상화 환경&lt;/b&gt;이 무엇이고? &lt;b&gt;컨테이너 환경이 도입된 이유&lt;/b&gt;에 대해서 알아보도록 하자.&lt;/span&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;과거에는 한 컴퓨터에 하나의 OS를 설치하고 그 위에 여러 프로그램을 실행하는 방식으로, 한 두개의 프로그램 때문에 전체 컴퓨터의 성능이 떨어지는 문제가 있었다. (&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;i&gt;어릴적 컴퓨터에 게임을 몇 개 설치했다가 컴퓨터 성능이 저하되어 잔소리를 들은 경험이 있지 않은가? &lt;/i&gt;&lt;/span&gt;) 이러한 문제를 해결하기 위해 &lt;b&gt;한 컴퓨터에 가상 컴퓨터를 여러 개 구동되는 것처럼&lt;/b&gt; 구현하기 위해 &lt;b&gt;가상화 배포(Virtualized Deployment) 방식&lt;/b&gt;이 등장하게 되었다.&lt;/span&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;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[가상화의 종류]&lt;/span&gt;&lt;/b&gt;&lt;/h3&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;1. Host OS 가상화&lt;/span&gt;&lt;/b&gt;&lt;/h4&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-filename=&quot;edited_스크린샷 2024-04-14 오후 9.05.25.png&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;1118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzgger/btsGCwDwcv7/MqT3q2TbS2ahLP5SxfSZlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzgger/btsGCwDwcv7/MqT3q2TbS2ahLP5SxfSZlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzgger/btsGCwDwcv7/MqT3q2TbS2ahLP5SxfSZlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbzgger%2FbtsGCwDwcv7%2FMqT3q2TbS2ahLP5SxfSZlk%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;373&quot; height=&quot;446&quot; data-filename=&quot;edited_스크린샷 2024-04-14 오후 9.05.25.png&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;1118&quot;/&gt;&lt;/span&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;물리머신(H/W) 위에 OS를 설치하고, 그 위에 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;가상화 S/W(ex. VirtualBox)와 가상머신&lt;/span&gt;&lt;/b&gt;을 움직이는 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;우리는 H/W 위에서 직접 동작하는 OS를 '&lt;b&gt;호스트 OS(Host OS)&lt;/b&gt;'라고 부르고, 가상머신 위에 설치된 OS를 '&lt;b&gt;게스트 OS(Guest OS)&lt;/b&gt;'라고 부른다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ex) 본인 PC에 VM S/W를 설치하고 그 위에 게스트 OS를 설치하는 방식 &amp;rarr; PC 리소스를 공유하는 방식&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;2. Hypervisor 가상화&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 3.36.16.png&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;1092&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VUhr8/btsGAAmXbyw/RHfsrPMJR6G6xAg3RQIWKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VUhr8/btsGAAmXbyw/RHfsrPMJR6G6xAg3RQIWKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VUhr8/btsGAAmXbyw/RHfsrPMJR6G6xAg3RQIWKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVUhr8%2FbtsGAAmXbyw%2FRHfsrPMJR6G6xAg3RQIWKK%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;404&quot; height=&quot;426&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 3.36.16.png&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;1092&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;호스트 OS 없이 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;H/W 위에 Hypervisor S/W를 설치하여 사용&lt;/b&gt;&lt;/span&gt;하는 가상화 방식 &amp;rarr; Hypervisor는 H/W와 가상 머신 간의 중재자 역할을 하며, Hypervisor가 직접 H/W를 관리하기 때문에 호스트 OS가 필요하지 않다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;호스트 OS가 없어서 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;가상 머신은 독립된 호스트 시스템처럼 행동&lt;/span&gt;&lt;/b&gt;할 수 있고 오버헤드가 적다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ex) H/W 위에 Hypervisor S/W를 설치하고 그 위에 게스트 OS를 설치하는 방식 &amp;rarr; 오버헤드가 적은 방식&lt;/span&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;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[가상화 배포에서 컨테이너 배포로 바뀌게 된 이유]&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 3.37.24.png&quot; data-origin-width=&quot;2124&quot; data-origin-height=&quot;1180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qD1gx/btsGBewWZpO/O5u2ZIqp3XFsOigAaaSEw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qD1gx/btsGBewWZpO/O5u2ZIqp3XFsOigAaaSEw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qD1gx/btsGBewWZpO/O5u2ZIqp3XFsOigAaaSEw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqD1gx%2FbtsGBewWZpO%2FO5u2ZIqp3XFsOigAaaSEw1%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;2124&quot; height=&quot;1180&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 3.37.24.png&quot; data-origin-width=&quot;2124&quot; data-origin-height=&quot;1180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;(참고)&lt;br /&gt;&lt;b&gt;컨테이너 &lt;/b&gt;- &lt;span style=&quot;color: #006dd7;&quot;&gt;S/W App 실행에 필요한 환경을 독립적으로 운용가능한 기술&lt;/span&gt;&lt;br /&gt;&lt;b&gt;Hypervisor&lt;/b&gt;&amp;nbsp;- 단일 시스템 위에 가상 컴퓨터(VM)을 여러 개 구동할 수 있도록 만들어주는 계층&lt;/blockquote&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;가상화 배포는 단일 물리 서버(H/W)에서 여러 가상머신(VM)을 실행할 수 있었지만, &lt;b&gt;가상머신마다 OS(게스트 OS) 설치가 필요&lt;/b&gt;하여 리소스를 너무 많이 사용하게 되면서 무거워졌다. 그래서 &lt;b&gt;컨테이너를 도입&lt;/b&gt;하며 호스트 OS와 커널을 공유하면서 이전보다 &lt;b&gt;가벼운 가상화 구현&lt;/b&gt;이 가능해지게 되었다.&lt;/span&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;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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;[컨테이너 배포]&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 3.38.30.png&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc8aqW/btsGCXgeC1m/dszawWLttlKuhU2keuz9W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc8aqW/btsGCXgeC1m/dszawWLttlKuhU2keuz9W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc8aqW/btsGCXgeC1m/dszawWLttlKuhU2keuz9W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc8aqW%2FbtsGCXgeC1m%2FdszawWLttlKuhU2keuz9W1%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;367&quot; height=&quot;428&quot; data-filename=&quot;edited_스크린샷 2024-04-13 오후 3.38.30.png&quot; data-origin-width=&quot;990&quot; data-origin-height=&quot;1154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;1. 컨테이너와 이미지의 관계&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(1) Image&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;컨테이너 실행에 필요한&lt;/span&gt;&lt;/b&gt; 파일과 실행할 애플리케이션 설정을 포함한 &lt;b&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;file 패키지&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;ex. 웹 서버를 실행하기 위한 file, 환경설정 등&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;(2) Container&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-indent-level=&quot;2&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이미지를 기반으로 생성된 인스턴스(가상 환경)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;이미지 내의 파일과 애플리케이션을 통해 구체화된 상태&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;2. 컨테이너 배포(Container Deployment)의 구성&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;App&lt;/b&gt;: 실행하려는 프로그램&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Bin&lt;/b&gt;(바이너리)/&lt;b&gt;Library&lt;/b&gt;: 프로그램이 실행하는데 필요한 환경과 관련된 file&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Container&lt;/b&gt;: App이 구동되는 환경까지 감싸서 실행할 수 있는 격리 기술&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Container Runtime&lt;/b&gt;: 컨테이너를 내려받거나 구동할 수 있도록 도와주는 컨테이너 실행 엔진(ex. Docker)&lt;/span&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;&amp;nbsp;&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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;결국, 컨테이너는 게스트 OS 없이 가벼운 가상화 구현을 가능하게 해주었고 이러한 컨테이너를 생성하고 관리하기 위한 기술들이 등장하게 되는데 이것이 흔히 아는 도커(Docker), 쿠버네티스(Kubernetes)이다. 그럼 다음 시간에는 본격적으로 쿠버네티스가 등장한 배경과 개념에 대해서 배워보도록 하자.&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvZHvf/btsGB48awpZ/rEKFoFXRGvqQjiK7sif6zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvZHvf/btsGB48awpZ/rEKFoFXRGvqQjiK7sif6zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvZHvf/btsGB48awpZ/rEKFoFXRGvqQjiK7sif6zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvZHvf%2FbtsGB48awpZ%2FrEKFoFXRGvqQjiK7sif6zK%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;426&quot; height=&quot;182&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;578&quot; data-origin-height=&quot;247&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;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(참고 페이지)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;https://www.samsungsds.com/kr/insights/220222_kubernetes1.html&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>[기술공부]/Kubernetes</category>
      <category>container</category>
      <category>K8S</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/75</guid>
      <comments>https://developers-haven.tistory.com/75#entry75comment</comments>
      <pubDate>Sat, 13 Apr 2024 14:56:18 +0900</pubDate>
    </item>
    <item>
      <title>[Airflow] Connection 연결시 [Test] 버튼 비활성화된 경우 해결하는 방법</title>
      <link>https://developers-haven.tistory.com/74</link>
      <description>&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;1280&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnaxRw/btsElJ0DY9g/nmjs4ud9opS6V5TEpqWtik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnaxRw/btsElJ0DY9g/nmjs4ud9opS6V5TEpqWtik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnaxRw/btsElJ0DY9g/nmjs4ud9opS6V5TEpqWtik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnaxRw%2FbtsElJ0DY9g%2Fnmjs4ud9opS6V5TEpqWtik%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;407&quot; height=&quot;157&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;494&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Airflow에서 Connection 연결하기 전, Connection 연결 정보가 올바르게 입력되었는지 확인하기 위해서 &lt;b&gt;[Test] 버튼&lt;/b&gt;을 눌러 확인하고 이상이 없으면&lt;b&gt; [Save] 버튼&lt;/b&gt;을 눌러 커넥션을 저장하게 된다. 하지만 상황에 따라 아래와 같이&lt;span style=&quot;color: #ef5369;&quot;&gt; [Test] 버튼이 비활성화&lt;/span&gt;될 수 있는데, 이 문제를 해결하는 방법을 알아보도록하자.&lt;/span&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;여담으로 나도 처음에는 버튼이 비활성화되어 있어서, MySQL DB 연결시 커넥션 정보가 올바른지에 대해 확인이 어려웠다. 인터넷을 찾아보던 중 Airflow 내의 설정값 수정을 통해 해결할 수 있다는 것을 알아낼 수 있었다.&lt;/span&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-filename=&quot;스크린샷 2024-02-04 오후 10.06.53.png&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;1328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kyO5U/btsEj62Ronu/B0nHXKYNh18p2qoG81umok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kyO5U/btsEj62Ronu/B0nHXKYNh18p2qoG81umok/img.png&quot; data-alt=&quot;[Test] 비활성화된 상황&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kyO5U/btsEj62Ronu/B0nHXKYNh18p2qoG81umok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkyO5U%2FbtsEj62Ronu%2FB0nHXKYNh18p2qoG81umok%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;485&quot; height=&quot;640&quot; data-filename=&quot;스크린샷 2024-02-04 오후 10.06.53.png&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;1328&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[Test] 비활성화된 상황&lt;/figcaption&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;먼저, 해결 방법을 간단히 설명하자면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Airflow webserver 컨테이너 내에서의 airflow.cfg이란 설정 파일 내의 '&lt;i&gt;test_connection = Disabled &lt;/i&gt;' 값을 '&lt;i&gt;test_connection = Enabled &lt;/i&gt;'로 수정해서 해결할 수 있으며, 한단계씩 설명해보도록 하겠다.&lt;/span&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;1. Airflow-webserver 컨테이너 접근 후 패키지 업데이트 하기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;: container 내부를 &lt;span style=&quot;color: #ef5369;&quot;&gt;root 권한&lt;/span&gt;으로 접속하여 vim을 사용하기 위해 패키지 업데이트를 진행한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707052494589&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# airflow webserver container명 확인
sudo docker ps

# airflow webserver container bash 접근
# -u root : container 내부에서의 사용자를 'root'로 지정
# sudo docker exec -it -u root ${airflow-webserver-container명} bash 
sudo docker exec -it -u root dhkim-airflow-webserver-1 bash

apt update
apt install vim&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;471aecaf-4da0-4ed0-98a9-1d3b7306c241.png&quot; data-origin-width=&quot;2684&quot; data-origin-height=&quot;1392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhoGLa/btsEnb2SYJo/Nfa2T4MDnAGory0PvUBI91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhoGLa/btsEnb2SYJo/Nfa2T4MDnAGory0PvUBI91/img.png&quot; data-alt=&quot;webserver 컨테이너 접근&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhoGLa/btsEnb2SYJo/Nfa2T4MDnAGory0PvUBI91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhoGLa%2FbtsEnb2SYJo%2FNfa2T4MDnAGory0PvUBI91%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;2684&quot; height=&quot;1392&quot; data-filename=&quot;471aecaf-4da0-4ed0-98a9-1d3b7306c241.png&quot; data-origin-width=&quot;2684&quot; data-origin-height=&quot;1392&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;webserver 컨테이너 접근&lt;/figcaption&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;2. Airflow-webserver 컨테이너 내부에서 airflow.cfg 파일을 vim 편집기로 수정하기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;: airflow.cfg 파일에서 test_connection 설정값을 &lt;span style=&quot;color: #ef5369;&quot;&gt;Disabled &amp;rarr; Enabled로 수정&lt;/span&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707052640701&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# airflow webserver container에서 airflow.cfg 파일 vim으로 열기
ls -al
vim airflow.cfg


# ------------------- airflow.cfg vim 편집 ------------------- #
# 수정할 내용: test_connection = Disabled --&amp;gt; Enabled로 수정
# 편집방법: [i]눌러서 수정모드 --&amp;gt; Enabled로 수정 --&amp;gt; [Esc]로 수정모드 종료 --&amp;gt; [:wq!] 입력 후 Enter로 저장하고 빠져나오기

...
test_connection = Enabled
...

# ------------------- airflow.cfg vim 편집 ------------------- #&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;2d16e9b1-df64-40df-8557-17f79ac8d121.png&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b04AiD/btsEmryp3jm/3GCRdJ9SKyMZiPhdMKMJk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b04AiD/btsEmryp3jm/3GCRdJ9SKyMZiPhdMKMJk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b04AiD/btsEmryp3jm/3GCRdJ9SKyMZiPhdMKMJk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb04AiD%2FbtsEmryp3jm%2F3GCRdJ9SKyMZiPhdMKMJk1%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;1418&quot; height=&quot;576&quot; data-filename=&quot;2d16e9b1-df64-40df-8557-17f79ac8d121.png&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;b6098d15-4b09-4673-acd1-5c08e5eedfe7.png&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7VgSJ/btsElIOdkAp/FFU5uk05RTt6JCn3GD8AC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7VgSJ/btsElIOdkAp/FFU5uk05RTt6JCn3GD8AC1/img.png&quot; data-alt=&quot;airflow.cfg 파일 편집 전(왼쪽), 후(오른쪽)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7VgSJ/btsElIOdkAp/FFU5uk05RTt6JCn3GD8AC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7VgSJ%2FbtsElIOdkAp%2FFFU5uk05RTt6JCn3GD8AC1%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;1792&quot; height=&quot;192&quot; data-filename=&quot;b6098d15-4b09-4673-acd1-5c08e5eedfe7.png&quot; data-origin-width=&quot;1792&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;airflow.cfg 파일 편집 전(왼쪽), 후(오른쪽)&lt;/figcaption&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;※ airflow.cfg 내부에서 test_connection 위치를 찾는 방법 2가지&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(1) vim 편집기를 열고 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;:set number&lt;/span&gt; &lt;/b&gt;입력 후 [Enter]하면 행 번호 확인 &amp;rarr; 407번 row에서 확인 가능 (참고로, airflow 버전에 따라 row 행번호가 조금 다를 수 있다)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6ced0d95-cff1-4c1a-bc63-a1be9949a23d.png&quot; data-origin-width=&quot;1551&quot; data-origin-height=&quot;809&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmcpeK/btsEmQSfLLh/wF840KgqPZBCel9YSmLYLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmcpeK/btsEmQSfLLh/wF840KgqPZBCel9YSmLYLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmcpeK/btsEmQSfLLh/wF840KgqPZBCel9YSmLYLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmcpeK%2FbtsEmQSfLLh%2FwF840KgqPZBCel9YSmLYLk%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;1551&quot; height=&quot;809&quot; data-filename=&quot;6ced0d95-cff1-4c1a-bc63-a1be9949a23d.png&quot; data-origin-width=&quot;1551&quot; data-origin-height=&quot;809&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(2) vim 편집기를 열고 &lt;b&gt;&lt;span style=&quot;color: #0593d3;&quot;&gt;/test_connection&lt;/span&gt;&lt;/b&gt; 입력 후 [Enter]하면 해당 텍스트로 바로 접근 가능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2b0fc84f-222d-445f-8d83-fc4d9d8899f5.png&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bpghx/btsEn1eBSrN/IyZC2A9Jf4Pfy0ckXKzlk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bpghx/btsEn1eBSrN/IyZC2A9Jf4Pfy0ckXKzlk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bpghx/btsEn1eBSrN/IyZC2A9Jf4Pfy0ckXKzlk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBpghx%2FbtsEn1eBSrN%2FIyZC2A9Jf4Pfy0ckXKzlk1%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;1456&quot; height=&quot;808&quot; data-filename=&quot;2b0fc84f-222d-445f-8d83-fc4d9d8899f5.png&quot; data-origin-width=&quot;1456&quot; data-origin-height=&quot;808&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;3. Airflow-webserver 컨테이너에서 빠져나와서 컨테이너 재시작&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;: webserver 컨테이너를 재시작하면 &lt;span style=&quot;color: #ef5369;&quot;&gt;Connection [Test] 버튼이 활성화&lt;/span&gt;된 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1707052945021&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# container에서 나오기
exit

# container 재시작
# sudo docker restart ${airflow-webserver-container명}
sudo docker restart dhkim-airflow-webserver-1&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;77c8a774-44e1-4efd-9db2-d6f112e71f98.png&quot; data-origin-width=&quot;2228&quot; data-origin-height=&quot;1354&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbL3Mj/btsEqWjAPbp/QBXqLCqUKO4eae88TzfDA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbL3Mj/btsEqWjAPbp/QBXqLCqUKO4eae88TzfDA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbL3Mj/btsEqWjAPbp/QBXqLCqUKO4eae88TzfDA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbL3Mj%2FbtsEqWjAPbp%2FQBXqLCqUKO4eae88TzfDA0%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;2228&quot; height=&quot;1354&quot; data-filename=&quot;77c8a774-44e1-4efd-9db2-d6f112e71f98.png&quot; data-origin-width=&quot;2228&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;&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;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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위의 과정을 통해 Airflow 웹페이지에서의 Connection 진행시 [Test] 버튼이 비활성화된 것을 해결할 수 있었다. 처음에는 내 컴퓨터의 오류인가?라고 생각했었는데 알고보니 &lt;b&gt;Airflow-webserver 컨테이너 내부 설정값&lt;/b&gt;이 원인이었다. 나와 같은 문제를 접한 사람들에게 이 글이 많은 도움이 되었으면 좋겠다:)&lt;/span&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;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pDSuh/btsEpnhsz4B/81iFGEQBA4mzs6eFMnZPj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pDSuh/btsEpnhsz4B/81iFGEQBA4mzs6eFMnZPj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pDSuh/btsEpnhsz4B/81iFGEQBA4mzs6eFMnZPj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpDSuh%2FbtsEpnhsz4B%2F81iFGEQBA4mzs6eFMnZPj1%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;148&quot; height=&quot;148&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&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;</description>
      <category>[기술공부]/Apache Airflow</category>
      <category>Airflow</category>
      <category>docker</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/74</guid>
      <comments>https://developers-haven.tistory.com/74#entry74comment</comments>
      <pubDate>Sun, 4 Feb 2024 22:36:41 +0900</pubDate>
    </item>
    <item>
      <title>[Airflow] docker-compose.yaml로 Jupyter 컨테이너 올리기 - (2)</title>
      <link>https://developers-haven.tistory.com/73</link>
      <description>&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;1280&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciuSZW/btsDT1svoVr/yF627f8hvh3AW0NO2d2fVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciuSZW/btsDT1svoVr/yF627f8hvh3AW0NO2d2fVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciuSZW/btsDT1svoVr/yF627f8hvh3AW0NO2d2fVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciuSZW%2FbtsDT1svoVr%2FyF627f8hvh3AW0NO2d2fVk%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;464&quot; height=&quot;179&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;494&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;지난 시간에는 docker-compose.yaml 파일을 이용하여 Jupyter 컨테이너를 올려보는 과정을 알아보았다. 이번에는 Jupyter에서 Mariadb 컨테이너 데이터를 불러오는 과정을 진행해보고자 한다.&lt;/span&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 style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[지난 시간 내용 - Jupyter 컨테이너 올리기]&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/72&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.01.23 - [[기술공부]/Apache Airflow] - [Airflow] docker-compose.yaml로 Jupyter 컨테이너 올리기 - (1)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706004814443&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;[Airflow] docker-compose.yaml로 Jupyter 컨테이너 올리기 - (1)&quot; data-og-description=&quot;지난 시간에 Mariadb 컨테이너를 올리고 테스트 데이터를 만들어보았다. 이번 시간에는 Jupyter 컨테이너를 올리는 과정을 알아보고, 다음 시간에는 Jupyter에서 Mariadb 컨테이너 데이터를 불러오는 방&quot; data-og-host=&quot;developers-haven.tistory.com&quot; data-og-source-url=&quot;https://developers-haven.tistory.com/72&quot; data-og-url=&quot;https://developers-haven.tistory.com/72&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFN8tt/hyU8PWBrgu/H3fMtbFhkPnzsLD03FiBik/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/G8bhC/hyU82O99oO/kxe4rl6lGuK1EusQCE8gT1/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/e2FP9/hyU84TKJwL/vxFYboocNKH26G9GMh5zKK/img.png?width=1784&amp;amp;height=722&amp;amp;face=0_0_1784_722&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/72&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers-haven.tistory.com/72&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFN8tt/hyU8PWBrgu/H3fMtbFhkPnzsLD03FiBik/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/G8bhC/hyU82O99oO/kxe4rl6lGuK1EusQCE8gT1/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/e2FP9/hyU84TKJwL/vxFYboocNKH26G9GMh5zKK/img.png?width=1784&amp;amp;height=722&amp;amp;face=0_0_1784_722');&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;[Airflow] docker-compose.yaml로 Jupyter 컨테이너 올리기 - (1)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;지난 시간에 Mariadb 컨테이너를 올리고 테스트 데이터를 만들어보았다. 이번 시간에는 Jupyter 컨테이너를 올리는 과정을 알아보고, 다음 시간에는 Jupyter에서 Mariadb 컨테이너 데이터를 불러오는 방&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers-haven.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;(설명) 전체적으로 아래와 같은 아키텍처를 구축하려고 하며, 3번 과정에서 Mariadb 데이터를 Jupyter로 불러오는 과정을 진행해보고자 한다.&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;1280&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXe6o/btsDQeM3oAG/Suqzq99gCLq9pMKivo3Ad0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXe6o/btsDQeM3oAG/Suqzq99gCLq9pMKivo3Ad0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXe6o/btsDQeM3oAG/Suqzq99gCLq9pMKivo3Ad0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXe6o%2FbtsDQeM3oAG%2FSuqzq99gCLq9pMKivo3Ad0%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;690&quot; height=&quot;406&quot; data-origin-width=&quot;1280&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;내용에 들어가기 앞서, docker-compose.yaml에 추가한 Jupyter 컨테이너 내용을 짚고 넘어가자.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706001233072&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker-compose.yaml
services:
  jupyter:
    image: jupyter/base-notebook:latest
    container_name: jupyter-container
    environment:
      # Jupyter notebook 접속시 사용할 패스워드
      - JUPYTER_TOKEN=${password}
    volumes:
      - ./notebooks:/home/jovyan/work
    restart: always
    ports:
      - 8888:8888
    networks:
      network_custom:
        ipv4_address: 172.28.0.2
        
networks:
  network_custom:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16
          gateway: 172.28.0.1&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;1280&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZKZx8/btsDUbV2Vv0/9OAzPQTEvpgrZnBccHgRFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZKZx8/btsDUbV2Vv0/9OAzPQTEvpgrZnBccHgRFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZKZx8/btsDUbV2Vv0/9OAzPQTEvpgrZnBccHgRFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZKZx8%2FbtsDUbV2Vv0%2F9OAzPQTEvpgrZnBccHgRFK%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;492&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;492&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;※ 바인드 마운트 방식이란?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1706001688807&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;volumes:
      - ./notebooks:/home/jovyan/work&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;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;호스트 머신의 로컬 디렉터리(./notebooks)를 jupyter 컨테이너 내부 디렉터리(/home/jovyan/work)에 연결하는 바인드 마운트 방식&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;즉, &lt;span style=&quot;color: #ef5369;&quot;&gt;사용자가 호스트 머신의 특정 경로를 컨테이너에 직접 연결&lt;/span&gt;시키는 방식이며, &lt;span style=&quot;color: #ef5369;&quot;&gt;호스트 머신의 파일 시스템에 직접 액세스&lt;/span&gt;하여 데이터를 수정할 수 있게 된다. (해당 변경 사항은 실시간으로 양쪽에 반영된다)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;DB 데이터와 달리 ipynb 파일에 직접 접근하고 수정해야하는 상황이 있을 수 있기에 직접 로컬 디렉터리 위치를 지정해주는 바인드 마운트 방식을 적용했다.&lt;/span&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;&amp;nbsp;&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;style5&quot; /&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-renderer-start-pos=&quot;2581&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;1. Jupyter notebook 접속&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #172b4d; text-align: start;&quot; data-indent-level=&quot;1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;http://localhost:8888/lab/workspaces/auto-R&quot; data-renderer-mark=&quot;true&quot; data-testid=&quot;link-with-safety&quot;&gt;http://localhost:8888/&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;Password&amp;nbsp;or&amp;nbsp;Token&lt;/b&gt;&amp;nbsp;&amp;rarr;&amp;nbsp;docker-compose.yaml에서&amp;nbsp;jupyter&amp;nbsp;컨테이너에서&amp;nbsp;설정한&amp;nbsp;토큰&amp;nbsp;or&amp;nbsp;패스워드&amp;nbsp;입력&amp;nbsp;후&amp;nbsp;[Log&amp;nbsp;in]&amp;nbsp;클릭&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/egeeHW/btsDUKRqOfe/3aSKCpf4igSXWQ4MD3lKSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/egeeHW/btsDUKRqOfe/3aSKCpf4igSXWQ4MD3lKSK/img.png&quot; data-alt=&quot;토큰 or 패스워드 입력&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/egeeHW/btsDUKRqOfe/3aSKCpf4igSXWQ4MD3lKSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FegeeHW%2FbtsDUKRqOfe%2F3aSKCpf4igSXWQ4MD3lKSK%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;518&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;토큰 or 패스워드 입력&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zrUk2/btsDUgXfQx4/UefPQ0xW7Pl8komWpjMWe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zrUk2/btsDUgXfQx4/UefPQ0xW7Pl8komWpjMWe1/img.png&quot; data-alt=&quot;Jupyter 브라우저 접속 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zrUk2/btsDUgXfQx4/UefPQ0xW7Pl8komWpjMWe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzrUk2%2FbtsDUgXfQx4%2FUefPQ0xW7Pl8komWpjMWe1%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;704&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Jupyter 브라우저 접속 완료&lt;/figcaption&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;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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;2. Jupyter notebook에서 Mariadb 컨테이너 데이터 불러오기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;이전 시간에 Mariadb 컨테이너를 올리고 샘플 데이터를 적재하는 과정까지 완료했었다. 만약 이 내용을 아직 보지 못했다면 아래 페이지를 참고하도록 하자.&lt;/span&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 style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[참고 - Mariadb 컨테이너 올리고 데이터 적재하기]&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://developers-haven.tistory.com/69&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2024.01.18 - [[기술공부]/Apache Airflow] - [Airflow] docker-compose.yaml로 mariaDB 컨테이너 올리기 &amp;amp; DBeaver 연결하기&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706001405247&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;[Airflow] docker-compose.yaml로 mariaDB 컨테이너 올리기 &amp;amp; DBeaver 연결하기&quot; data-og-description=&quot;이번 시간에는 docker-compose.yaml 스크립트를 이용하여 mariaDB 컨테이너를 올리고 DBeaver 연결까지 하는 방법을 알아보도록 하자. [1단계 - mariaDB 컨테이너 올리기] 1. 컨테이너가 사용하고 있는 default n&quot; data-og-host=&quot;developers-haven.tistory.com&quot; data-og-source-url=&quot;https://developers-haven.tistory.com/69&quot; data-og-url=&quot;https://developers-haven.tistory.com/69&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/TY3Kc/hyU81Jsado/orp1k5ARfDMW0uKvEgQs70/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/EVk1z/hyU8Rmx66v/STOReIJrAGtWP4xEggQMpk/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/EaYNX/hyU8YlGAY9/NOKLjlCkRyVIxNrd0EIYA0/img.png?width=2130&amp;amp;height=1037&amp;amp;face=0_0_2130_1037&quot;&gt;&lt;a href=&quot;https://developers-haven.tistory.com/69&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers-haven.tistory.com/69&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/TY3Kc/hyU81Jsado/orp1k5ARfDMW0uKvEgQs70/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/EVk1z/hyU8Rmx66v/STOReIJrAGtWP4xEggQMpk/img.png?width=700&amp;amp;height=700&amp;amp;face=0_0_700_700,https://scrap.kakaocdn.net/dn/EaYNX/hyU8YlGAY9/NOKLjlCkRyVIxNrd0EIYA0/img.png?width=2130&amp;amp;height=1037&amp;amp;face=0_0_2130_1037');&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;[Airflow] docker-compose.yaml로 mariaDB 컨테이너 올리기 &amp;amp; DBeaver 연결하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 시간에는 docker-compose.yaml 스크립트를 이용하여 mariaDB 컨테이너를 올리고 DBeaver 연결까지 하는 방법을 알아보도록 하자. [1단계 - mariaDB 컨테이너 올리기] 1. 컨테이너가 사용하고 있는 default n&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers-haven.tistory.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-filename=&quot;811249b8-a145-4fb2-a4af-490f84d8dac6.png&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;866&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4oDCo/btsDUMhpen8/KGzjOJBT6NqFmkvPWfbpDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4oDCo/btsDUMhpen8/KGzjOJBT6NqFmkvPWfbpDK/img.png&quot; data-alt=&quot;Mariadb container - 샘플 데이터&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4oDCo/btsDUMhpen8/KGzjOJBT6NqFmkvPWfbpDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4oDCo%2FbtsDUMhpen8%2FKGzjOJBT6NqFmkvPWfbpDK%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;564&quot; height=&quot;382&quot; data-filename=&quot;811249b8-a145-4fb2-a4af-490f84d8dac6.png&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;866&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Mariadb container - 샘플 데이터&lt;/figcaption&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;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;(2-1) Jupyter 컨테이너 접속해서 필요한 라이브러리 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1706001490283&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# jupyter 컨테이너 접근
# sudo docker exec -it ${container명} bash
sudo docker exec -it jupyter-container bash

# bash
pip install mysql-connector-python&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;b4f48ec9-5c83-4699-a162-f51284b0a587.png&quot; data-origin-width=&quot;1847&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgk8fY/btsDLsLZ6EY/8HUPPl1gllrZVZJjMDqKF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgk8fY/btsDLsLZ6EY/8HUPPl1gllrZVZJjMDqKF0/img.png&quot; data-alt=&quot;라이브러리 설치 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgk8fY/btsDLsLZ6EY/8HUPPl1gllrZVZJjMDqKF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbgk8fY%2FbtsDLsLZ6EY%2F8HUPPl1gllrZVZJjMDqKF0%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;1847&quot; height=&quot;331&quot; data-filename=&quot;b4f48ec9-5c83-4699-a162-f51284b0a587.png&quot; data-origin-width=&quot;1847&quot; data-origin-height=&quot;331&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;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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;&lt;b&gt;(2-2) Jupyter 화면에서 &lt;b&gt;work 폴더 더블 클릭 &amp;gt; python3 notebook 선택 &amp;gt; test.ipynb 생성&lt;/b&gt; &lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;Jupyter notebook의 컨테이너 디렉터리를 &lt;b&gt;/home/jovyan/work&lt;/b&gt;로 설정했으므로 work 디렉터리에 들어가서 코드를 생성해야한다.&lt;/span&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-filename=&quot;f9539091-06b3-482d-8264-5e0194034104.png&quot; data-origin-width=&quot;1761&quot; data-origin-height=&quot;977&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmDjcU/btsDNG39L98/78zkvvPqP69dy5ObPp54t1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmDjcU/btsDNG39L98/78zkvvPqP69dy5ObPp54t1/img.png&quot; data-alt=&quot;work 폴더 내에서 ipynb 코드 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmDjcU/btsDNG39L98/78zkvvPqP69dy5ObPp54t1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmDjcU%2FbtsDNG39L98%2F78zkvvPqP69dy5ObPp54t1%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;1761&quot; height=&quot;977&quot; data-filename=&quot;f9539091-06b3-482d-8264-5e0194034104.png&quot; data-origin-width=&quot;1761&quot; data-origin-height=&quot;977&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;work 폴더 내에서 ipynb 코드 생성&lt;/figcaption&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;(2-3) test.ipynb에 아래 코드 작성 후 실행&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1706001571541&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import mysql.connector
from mysql.connector import Error

# mariadb container 접속정보
# docker-compose.yaml에 추가한 mariadb 컨테이너 정보
db_config = {
	'host': 'mariadb-container', # mariadb 컨테이너명
	'port': 3306, # mariadb 컨테이너접속포트
	'database': 'mariadb', # mariadb 데이터베이스명
	'user': '${DBeaver_Username}', # mariadb 접속정보 유저명
	'password': '${DBeaver_Password}' # mariadb 접속정보 패스워드
}

query = &quot;SELECT * FROM test_table&quot;

try:
	with mysql.connector.connect(**db_config) as connection:
		with connection.cursor() as cursor:
			cursor.execute(query)
			result = cursor.fetchall()
			print(result)
except Error as e:
	print(f&quot;Error: {e}&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;# 코드 설명&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶db_config 정보를 이용하여 mariadb 컨테이너를 연결하고, &quot;SELECT * FROM test_table&quot; 쿼리를 실행하여 결과를 가져오는 코드&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶try~except를 통해서 모든 과정이 올바르면 데이터를 가져오고, 만약 문제가 발생하면 에러 메세지 표시&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;# db_config 설명 (모든 내용은 아래 &lt;span style=&quot;color: #ef5369;&quot;&gt;docker-compose.yaml&lt;/span&gt;에 추가한 내용 기반&lt;/b&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;host&lt;/span&gt;&lt;/b&gt;: mariadb 컨테이너명&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;port&lt;/span&gt;&lt;/b&gt;: mariadb 컨테이너 접속 포트&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;database&lt;/span&gt;&lt;/b&gt;: mariadb 데이터베이스명 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;${MYSQL_DATABASE}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;user&lt;/span&gt;&lt;/b&gt;: mariadb 접속 유저명 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;${MYSQL_USER}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;▶&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;password&lt;/span&gt;&lt;/b&gt;: mariadb 접속 패스워드 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;i&gt;${MYSQL_PASSWORD}&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;※ (참고) docker-compose.yaml의 Mariadb 컨테이너 정보&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1706003964427&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;services:
  mariadb:
    image: mariadb:10
    container_name: mariadb-container
    environment:
      MYSQL_USER: ${user}
      MYSQL_PASSWORD: ${passwd}
      MYSQL_ROOT_PASSWORD: ${root_passwd}
      MYSQL_DATABASE: ${db_name}
      TZ: Asia/Seoul
    volumes:
      - mariadb-db-volume:/var/lib/mysql
    restart: always
    ports:
      - 3307:3306
    networks:
      network_custom:
        ipv4_address: 172.28.0.2&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;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;(2-4) Mariadb 컨테이너 내의 test_table 테이블 데이터 불러오기 완료&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;참고로, 이전 시간에 서비스들 간의 고정 IP를 지정해주었고 이 과정은 Mariadb, Jupyter 간에 같은 네트워크를 사용하고 있기에 통신이 가능한 것이다.&lt;/span&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-filename=&quot;66dfcc6f-a745-4d49-875c-0ef121e65787.png&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;849&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6W34n/btsDKAcpvzX/WErNLPHxdcYLFjXxxxUsk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6W34n/btsDKAcpvzX/WErNLPHxdcYLFjXxxxUsk1/img.png&quot; data-alt=&quot;Mariadb 컨테이너 데이터 불러오기 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6W34n/btsDKAcpvzX/WErNLPHxdcYLFjXxxxUsk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6W34n%2FbtsDKAcpvzX%2FWErNLPHxdcYLFjXxxxUsk1%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;1908&quot; height=&quot;849&quot; data-filename=&quot;66dfcc6f-a745-4d49-875c-0ef121e65787.png&quot; data-origin-width=&quot;1908&quot; data-origin-height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Mariadb 컨테이너 데이터 불러오기 완료&lt;/figcaption&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;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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;b&gt;3. (선택사항) 바인드 마운트가 정상 작동하는지 확인&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;&lt;b&gt;(3-1) &lt;b&gt;호스트 머신 local directory 확인&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start; color: #333333;&quot;&gt; &amp;rarr; test.ipynb 파일 존재 확인&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #006dd7;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start; color: #333333;&quot;&gt;로컬 디렉터리 내에서 test.ipynb 파일이 존재하는 것을 확인할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1706001780827&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 현재위치: docker-compose.yaml 스크립트가 있는 위치
pwd

cd notebooks/
ls&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;3a7bc8de-b1e7-4434-b47f-82924f19d97a.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l3WVB/btsDUapiCRF/euefN5rbNG0oPq5bGlukwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l3WVB/btsDUapiCRF/euefN5rbNG0oPq5bGlukwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l3WVB/btsDUapiCRF/euefN5rbNG0oPq5bGlukwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl3WVB%2FbtsDUapiCRF%2FeuefN5rbNG0oPq5bGlukwk%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;1720&quot; height=&quot;244&quot; data-filename=&quot;3a7bc8de-b1e7-4434-b47f-82924f19d97a.png&quot; data-origin-width=&quot;1720&quot; data-origin-height=&quot;244&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;(3-2) container 내부 확인&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; text-align: start;&quot;&gt; &amp;rarr; test.ipynb 파일 존재 확인&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;컨테이너 내부에서 test.ipynb 파일이 존재하는 것을 확인할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706001807586&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# jupyter 컨테이너 접근
# sudo docker exec -it ${container명} bash
sudo docker exec -it jupyter-container bash

# bash
cd work/
ls&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;7f22c297-0d49-4e7e-838c-0b7a9fdf7540.png&quot; data-origin-width=&quot;1579&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/toXQ5/btsDKNvWl8J/Vng72kVV78GqyuchjjARxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/toXQ5/btsDKNvWl8J/Vng72kVV78GqyuchjjARxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/toXQ5/btsDKNvWl8J/Vng72kVV78GqyuchjjARxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtoXQ5%2FbtsDKNvWl8J%2FVng72kVV78GqyuchjjARxk%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;1579&quot; height=&quot;248&quot; data-filename=&quot;7f22c297-0d49-4e7e-838c-0b7a9fdf7540.png&quot; data-origin-width=&quot;1579&quot; data-origin-height=&quot;248&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;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt; &lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; Jupyter 컨테이너의 바인드 마운트 방식이 올바르게 적용되었음을 확인했고, &lt;span style=&quot;color: #ef5369;&quot;&gt;컨테이너 재기동 여부와 상관없이 ipynb 파일은 계속 남아&lt;/span&gt;있게 된다. 바인드 마운트 방식은 &lt;span style=&quot;color: #ef5369;&quot;&gt;호스트, 컨테이너 디렉터리에 모두 접근&lt;/span&gt;할 수 있으며 서로 간의 데이터 변경이 발생하면 실시간으로 동기화된다.&lt;/span&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;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;※ (참고) 볼륨과 바인드 마운트 방식의 차이?&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;Mariadb, Jupyter 컨테이너를 올리기 위해서 각각 볼륨과 바인드 마운트 방식을 사용했는데 왜 서로 다르게 지정했을까?&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1706001975093&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# docker-compose.yaml

services:
  jupyter:
    volumes:
      # 바인드 마운트 방식
      - ./notebooks:/home/jovyan/work

  mariadb:
    volumes:
      # 볼륨 방식
      - mariadb-db-volume:/var/lib/mysql
      
...

volumes:
  mariadb-db-volume:&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;1893&quot; data-origin-height=&quot;1230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eltdfn/btsDQchxfRJ/uy70ibm5BruRiD19k1HO91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eltdfn/btsDQchxfRJ/uy70ibm5BruRiD19k1HO91/img.png&quot; data-alt=&quot;docker-compose.yaml에서 설정한 컨테이너 내용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eltdfn/btsDQchxfRJ/uy70ibm5BruRiD19k1HO91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feltdfn%2FbtsDQchxfRJ%2Fuy70ibm5BruRiD19k1HO91%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;1893&quot; height=&quot;1230&quot; data-origin-width=&quot;1893&quot; data-origin-height=&quot;1230&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;docker-compose.yaml에서 설정한 컨테이너 내용&lt;/figcaption&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;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;◎ 볼륨(volume) - Mariadb&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;볼륨은 &lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;도커가&lt;/b&gt; &lt;b&gt;직접&lt;/b&gt; 호스트 파일 시스템(로컬) 일부에 &lt;b&gt;데이터 저장 공간을 지정하여 관리&lt;/b&gt;&lt;/span&gt;하는 방식으로, 컨테이너 생명 주기와 상관없이 데이터를 독립적으로 유지할 수 있다. (컨테이너를 재기동해도 데이터가 남아있다)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;위의 yaml 파일 기준으로 mariadb-db-volume 볼륨이 컨테이너 내부 디렉터리(/var/lib/mysql)에 마운트되는 방식이다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;◎&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;바인드 마운트(bind mount) - Jupyter&lt;/span&gt;&lt;/b&gt;&lt;/h4&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&lt;span style=&quot;color: #ef5369;&quot;&gt;&lt;b&gt;사용자가 직접&lt;/b&gt; 호스트 머신(로컬)의 &lt;b&gt;특정 디렉터리를 컨테이너와 연결&lt;/b&gt;&lt;/span&gt;시키는 방식으로, 호스트 머신의 파일 시스템에 직접 액세스하여 데이터를 수정할 수 있다. (변경 시 실시간으로 양쪽에 반영된다)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;위의 yaml 파일 기준으로 호스트 머신의 로컬 디렉터리(./notebooks)를 컨테이너 내부 디렉터리(/home/jovyan/work)에 연결하는 방식이다.&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;&amp;rarr; 쉽게 생각하면 볼륨은 &lt;b&gt;도커가 로컬 디렉터리 일부의 저장 공간을 관리&lt;/b&gt;할 수 있도록 하는 것이고, &lt;b&gt;바인드 마운트는 사용자가 직접 로컬 디렉터리를 지정하여 관리&lt;/b&gt;하게 되는 것이다. DB 데이터와 달리 분석용 노트북 ipynb 파일은 내가 직접 접근하고 수정하는 상황이 있을 수 있다고 생각하여 바인드 마운트 방식을 사용하게 되었다.&lt;/span&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;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;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;지금까지 Jupyter 컨테이너를 올리고 Mariadb 컨테이너의 데이터를 불러오는 과정까지 정리해보았다. 그리고 볼륨과 바인드 마운&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;트 방식의 차이에 대해서도 알아볼 수 있었다. 오늘도 이 내용이 많은 사람들에게 도움이 되었으면 좋겠다:)&lt;/span&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;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;700&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F5nUl/btsDUMn9SXn/21btWKzCAMr6PH2Y2LeNzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F5nUl/btsDUMn9SXn/21btWKzCAMr6PH2Y2LeNzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F5nUl/btsDUMn9SXn/21btWKzCAMr6PH2Y2LeNzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF5nUl%2FbtsDUMn9SXn%2F21btWKzCAMr6PH2Y2LeNzk%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;183&quot; height=&quot;183&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;700&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;</description>
      <category>[기술공부]/Apache Airflow</category>
      <category>Airflow</category>
      <category>docker</category>
      <author>DH&amp;rsquo;s Blog</author>
      <guid isPermaLink="true">https://developers-haven.tistory.com/73</guid>
      <comments>https://developers-haven.tistory.com/73#entry73comment</comments>
      <pubDate>Tue, 23 Jan 2024 18:33:47 +0900</pubDate>
    </item>
  </channel>
</rss>