<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>날아가는 개발자</title>
    <link>https://sjpyo.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 6 Jul 2026 19:59:40 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>수달형아</managingEditor>
    <item>
      <title>서비스</title>
      <link>https://sjpyo.tistory.com/132</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Service&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;파드의&amp;nbsp;IP&amp;nbsp;구성정보 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;파드마다&amp;nbsp;특정&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;할당받음&amp;nbsp;(고정되지&amp;nbsp;않음) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;매번(재부팅/파드재시작&amp;nbsp;자동으로&amp;nbsp;생성)&amp;nbsp;변경 &lt;br /&gt;-&amp;nbsp;어플리케이션&amp;nbsp;접근을&amp;nbsp;위해&amp;nbsp;고정된&amp;nbsp;주소가&amp;nbsp;필요&amp;nbsp;(어플리케이션&amp;nbsp;하나&amp;nbsp;당&amp;nbsp;IP&amp;nbsp;주소&amp;nbsp;하나) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt;&amp;nbsp;컨트롤러에&amp;nbsp;의해&amp;nbsp;실행되는&amp;nbsp;파드들&amp;nbsp;전체에&amp;nbsp;대해&amp;nbsp;하나 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;개념&amp;nbsp;:&amp;nbsp;&lt;b&gt;파드&amp;nbsp;/&amp;nbsp;외부&amp;nbsp;간의&amp;nbsp;통신을&amp;nbsp;위해&amp;nbsp;고정된&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;할당&lt;/b&gt;하는&amp;nbsp;오브젝트 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;노드에&amp;nbsp;구애받지&amp;nbsp;않고&amp;nbsp;여러&amp;nbsp;파드(동일&amp;nbsp;컨트롤러)에&amp;nbsp;주소&amp;nbsp;하나 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;파드에&amp;nbsp;대한&amp;nbsp;&lt;b&gt;로드벨런싱&amp;nbsp;기능&amp;nbsp;등을&amp;nbsp;제공&lt;/b&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;파드&amp;nbsp;하나에&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;서비스가&amp;nbsp;연결될&amp;nbsp;수도&amp;nbsp;있다. &lt;br /&gt;&lt;br /&gt;컨트롤러의&amp;nbsp;셀렉터&amp;nbsp;=&amp;nbsp;파드&amp;nbsp;레이블 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;서비스의&amp;nbsp;셀렉터&amp;nbsp;=&amp;nbsp;파드&amp;nbsp;레이블 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;컨트롤러의&amp;nbsp;셀렉터&amp;nbsp;!=&amp;nbsp;서비스의&amp;nbsp;셀렉터&amp;nbsp;(&amp;nbsp;꼭&amp;nbsp;같을&amp;nbsp;필요는&amp;nbsp;없음&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;종류 &lt;br /&gt;1. ClusterIP&amp;nbsp;-&amp;nbsp;&lt;b&gt;내부용&lt;/b&gt;(파드끼리)&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;사용 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 내부용&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;굳이&amp;nbsp;사용하는&amp;nbsp;이유&amp;nbsp;:&amp;nbsp;고정IP&amp;nbsp;,&amp;nbsp;로드밸런싱 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 파드와&amp;nbsp;연결&amp;nbsp;시&amp;nbsp;label&amp;nbsp;/&amp;nbsp;selector&amp;nbsp;사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---------------------------------&lt;br /&gt;2. NodePort&amp;nbsp;-&amp;nbsp;물리적인&amp;nbsp;시스템(노드)의&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;사용하면서&amp;nbsp;&lt;b&gt;포트포워딩&lt;/b&gt;&amp;nbsp;설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. LoadBalancer&amp;nbsp;-&amp;nbsp;쿠버네티스&amp;nbsp;클러스터&amp;nbsp;외부에&amp;nbsp;로드벨런싱&amp;nbsp;장치를&amp;nbsp;연결해서&amp;nbsp;구성&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt;&amp;nbsp;클라우드&amp;nbsp;환경은&amp;nbsp;자체적인&amp;nbsp;LB&amp;nbsp;사용 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt;&amp;nbsp;온프레미스&amp;nbsp;환경에서는&amp;nbsp;MetalLB&amp;nbsp;등을&amp;nbsp;사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt; &lt;b&gt;클라우드에서 제공하는 로드밸런서와 파드를 연결&lt;/b&gt;한 후 해당 로드밸런서 IP 이용해 접근&lt;br /&gt;---------------------------------&amp;nbsp;외부용(쿠버네티스&amp;nbsp;클러스터&amp;nbsp;외부에서도&amp;nbsp;접근&amp;nbsp;가능) &lt;br /&gt;&lt;br /&gt;ExternalName&amp;nbsp;- &lt;b&gt;안에서 외부로&lt;/b&gt;&amp;nbsp;접근할&amp;nbsp;때&amp;nbsp;사용할&amp;nbsp;이름주소를&amp;nbsp;제공 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 내부적으로&amp;nbsp;사용하는&amp;nbsp;FQDN&amp;nbsp;을&amp;nbsp;통해서&amp;nbsp;외부의&amp;nbsp;시스템으로&amp;nbsp;접근&amp;nbsp;(CNAME) &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;서비스&amp;nbsp;FQDN &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;각&amp;nbsp;서비스는&amp;nbsp;이름에&amp;nbsp;따라&amp;nbsp;할당된&amp;nbsp;FQDN&amp;nbsp;을&amp;nbsp;보유 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;SERVICENAME&amp;nbsp;.&amp;nbsp;NAMESPACE&amp;nbsp;.&amp;nbsp;svc&amp;nbsp;.&amp;nbsp;cluster&amp;nbsp;.&amp;nbsp;local &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;svc&amp;nbsp;:&amp;nbsp;오브젝트&amp;nbsp;종류 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;cluster.local&amp;nbsp;:&amp;nbsp;쿠버네티스&amp;nbsp;클러스터의&amp;nbsp;도메인&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;Kube-proxy&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;역할&amp;nbsp;:&amp;nbsp;파드&amp;nbsp;간의&amp;nbsp;통신을&amp;nbsp;담당&amp;nbsp;(네트워크&amp;nbsp;구성) &lt;br /&gt;-&amp;nbsp;방식&amp;nbsp;:&amp;nbsp;userspace&amp;nbsp;/&amp;nbsp;iptables&amp;nbsp;/&amp;nbsp;IPVS &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; userspace&amp;nbsp;-&amp;gt;&amp;nbsp;iptables&amp;nbsp;(&amp;nbsp;성능&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kube-proxy&amp;nbsp;가&amp;nbsp;아닌&amp;nbsp;iptables&amp;nbsp;를&amp;nbsp;통해&amp;nbsp;트래픽을&amp;nbsp;전달받고&amp;nbsp;전달하는&amp;nbsp;방식 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kube-proxy&amp;nbsp;는&amp;nbsp;iptables&amp;nbsp;를&amp;nbsp;관리 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C1&amp;nbsp;=&amp;nbsp;&amp;nbsp;10.233.101.145 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C2&amp;nbsp;=&amp;nbsp;&amp;nbsp;10.233.103.86&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C1&amp;nbsp;컨테이너(파드)에서&amp;nbsp;C2&amp;nbsp;주소로&amp;nbsp;요청 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C1&amp;nbsp;컨테이너&amp;nbsp;-&amp;gt;&amp;nbsp;브릿지(쿠버네티스)&amp;nbsp;-&amp;gt;&amp;nbsp;1번&amp;nbsp;노드(물리인터페이스) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt;&amp;nbsp;Dest&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;파드에서&amp;nbsp;노드&amp;nbsp;변경&amp;nbsp;(&amp;nbsp;Netfilter&amp;nbsp;+&amp;nbsp;iptables&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt;&amp;nbsp;노드는&amp;nbsp;파드의&amp;nbsp;주소를&amp;nbsp;모를&amp;nbsp;수&amp;nbsp;있으니까&amp;nbsp;동일한&amp;nbsp;네트워크인&amp;nbsp;노드의&amp;nbsp;주소로&amp;nbsp;변경 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt;&amp;nbsp;1번&amp;nbsp;노드에서&amp;nbsp;라우터로&amp;nbsp;전달&amp;nbsp;-&amp;gt;&amp;nbsp;라우팅&amp;nbsp;테이블&amp;nbsp;확인&amp;nbsp;-&amp;gt;&amp;nbsp;해당노드(2번)로&amp;nbsp;전달 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt;&amp;nbsp;Dest&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;노드에서&amp;nbsp;파드&amp;nbsp;변경&amp;nbsp;(&amp;nbsp;Netfilter&amp;nbsp;+&amp;nbsp;iptables&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt;&amp;nbsp;노드&amp;nbsp;-&amp;gt;&amp;nbsp;브릿지&amp;nbsp;-&amp;gt;&amp;nbsp;C2컨테이너&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;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;ClusterIP&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- yaml 파일 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spec.ports.port: 서비스가 생성할 Port&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spec.ports.tragetPort: 서비스가 접근할 Pod의 Port (기본 : port랑 동일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spec.selector: 서비스가 접근할 Pod의 label 조건&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spec.type: 서비스 타입; (default: ClusterIP)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spec.clusterIP: 10.0.10.10 (default: 자동설정)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I59w9/btrxB36d4lr/emsrciJzApVkkjwKgUwRe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I59w9/btrxB36d4lr/emsrciJzApVkkjwKgUwRe1/img.png&quot; data-alt=&quot;ClusterIP 서비스 작성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I59w9/btrxB36d4lr/emsrciJzApVkkjwKgUwRe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI59w9%2FbtrxB36d4lr%2FemsrciJzApVkkjwKgUwRe1%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;273&quot; height=&quot;600&quot; data-origin-width=&quot;273&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ClusterIP 서비스 작성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m9wLV/btrxHXw06Q0/lPACmj7UkRaFWpcNd77nQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m9wLV/btrxHXw06Q0/lPACmj7UkRaFWpcNd77nQk/img.png&quot; data-alt=&quot;작성한 ClusterIP 접속하는 서비스 작성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m9wLV/btrxHXw06Q0/lPACmj7UkRaFWpcNd77nQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm9wLV%2FbtrxHXw06Q0%2FlPACmj7UkRaFWpcNd77nQk%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;401&quot; height=&quot;409&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;작성한 ClusterIP 접속하는 서비스 작성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3ll8p/btrxIMIOrtI/JnbVoz1SnkBuOMbFhJmho0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3ll8p/btrxIMIOrtI/JnbVoz1SnkBuOMbFhJmho0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3ll8p/btrxIMIOrtI/JnbVoz1SnkBuOMbFhJmho0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3ll8p%2FbtrxIMIOrtI%2FJnbVoz1SnkBuOMbFhJmho0%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;586&quot; height=&quot;355&quot; data-origin-width=&quot;586&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NodePort&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;244&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/87Rxf/btrxGc2xbv4/7f6ky4oZvRoHAN9Tr9FXTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/87Rxf/btrxGc2xbv4/7f6ky4oZvRoHAN9Tr9FXTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/87Rxf/btrxGc2xbv4/7f6ky4oZvRoHAN9Tr9FXTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F87Rxf%2FbtrxGc2xbv4%2F7f6ky4oZvRoHAN9Tr9FXTK%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;207&quot; height=&quot;244&quot; data-origin-width=&quot;207&quot; data-origin-height=&quot;244&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZSOEA/btrxIL4dNrH/cl6y8t8Ym1nbnk8cKoEwi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZSOEA/btrxIL4dNrH/cl6y8t8Ym1nbnk8cKoEwi1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZSOEA/btrxIL4dNrH/cl6y8t8Ym1nbnk8cKoEwi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZSOEA%2FbtrxIL4dNrH%2Fcl6y8t8Ym1nbnk8cKoEwi1%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;658&quot; height=&quot;91&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LoadBalancer&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;231&quot; data-origin-height=&quot;221&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPHlst/btrxr5iGWht/ciL2CwRaiXm2aRvYhpkU60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPHlst/btrxr5iGWht/ciL2CwRaiXm2aRvYhpkU60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPHlst/btrxr5iGWht/ciL2CwRaiXm2aRvYhpkU60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPHlst%2Fbtrxr5iGWht%2FciL2CwRaiXm2aRvYhpkU60%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;231&quot; height=&quot;221&quot; data-origin-width=&quot;231&quot; data-origin-height=&quot;221&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>MLOps/K8S</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/132</guid>
      <comments>https://sjpyo.tistory.com/132#entry132comment</comments>
      <pubDate>Mon, 28 Mar 2022 23:35:23 +0900</pubDate>
    </item>
    <item>
      <title>컨트롤러 (Daemonset, Statefulset, Job, CronJob)</title>
      <link>https://sjpyo.tistory.com/131</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Daemonset&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클러스터 &lt;b&gt;전체 노드에 특정 파드 실행&lt;/b&gt;할 때 사용하는 컨트롤러&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt; 모니터링용 데몬 등 클러스터 전체에 항상 실행시켜두어야 하는 파드에 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;업데이트&amp;nbsp;정책&amp;nbsp;변경&amp;nbsp;가능 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RollingUpdate :&amp;nbsp;수정&amp;nbsp;시&amp;nbsp;바로&amp;nbsp;반영&amp;nbsp;(파드를&amp;nbsp;자동으로&amp;nbsp;재생성) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;OnDelete&amp;nbsp;:&amp;nbsp;수정&amp;nbsp;시&amp;nbsp;반영X&amp;nbsp;(파드를&amp;nbsp;수동으로&amp;nbsp;삭제하면&amp;nbsp;재생성&amp;nbsp;시&amp;nbsp;반영) &lt;br /&gt;-&amp;nbsp;노드&amp;nbsp;추가/제거&amp;nbsp;시&amp;nbsp;파드도&amp;nbsp;자동으로&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;삭제 &lt;br /&gt;-&amp;nbsp;노드셀렉터라는&amp;nbsp;값을&amp;nbsp;설정하면&amp;nbsp;노드를&amp;nbsp;지정할&amp;nbsp;수&amp;nbsp;있음&amp;nbsp;(모든&amp;nbsp;리소스&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;Statefulset&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;기본적으로&amp;nbsp;파드는&amp;nbsp;상태를&amp;nbsp;저장하지&amp;nbsp;않는다. &lt;br /&gt;-&amp;nbsp;&lt;b&gt;파드의&amp;nbsp;상태를&amp;nbsp;유지&lt;/b&gt;&amp;nbsp;(&amp;nbsp;파드이름,&amp;nbsp;네트워크,&amp;nbsp;스토리지&amp;nbsp;) &lt;br /&gt;-&amp;nbsp;파드&amp;nbsp;배포&amp;nbsp;및&amp;nbsp;복제본&amp;nbsp;개수&amp;nbsp;유지&amp;nbsp;(스케일링) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;파드의&amp;nbsp;순서&amp;nbsp;/&amp;nbsp;고유속성을&amp;nbsp;유지 &lt;br /&gt;-&amp;nbsp;각각의&amp;nbsp;파드마다&amp;nbsp;고유한&amp;nbsp;볼륨을&amp;nbsp;연결 &lt;br /&gt;-&amp;nbsp;기본적으로&amp;nbsp;스테이트풀셋은&amp;nbsp;파드를&amp;nbsp;순서대로&amp;nbsp;하나씩&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;삭제&amp;nbsp;(배포/스케일링) &lt;br /&gt;-&amp;nbsp;병렬설정&amp;nbsp;시&amp;nbsp;배포&amp;nbsp;및&amp;nbsp;스케일링&amp;nbsp;작업&amp;nbsp;시&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;실행 &amp;nbsp;(.spec.podManagementPolicy: Parallel)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;업데이트&amp;nbsp;정책은&amp;nbsp;별개&amp;nbsp;(기본값: rollingUpdate) &lt;br /&gt;-&amp;nbsp;롤링업데이트&amp;nbsp;시&amp;nbsp;기존&amp;nbsp;파드를&amp;nbsp;하나씩&amp;nbsp;삭제&amp;nbsp;후&amp;nbsp;생성 &lt;br /&gt;-&amp;nbsp;업데이트&amp;nbsp;정책은 rollingUpdate와&amp;nbsp;on-delete&amp;nbsp;방식&amp;nbsp;선택&amp;nbsp;(데몬셋과&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;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biiZqW/btrxvLc4J8G/LCSTnz0AEGIkrvCzKykAH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biiZqW/btrxvLc4J8G/LCSTnz0AEGIkrvCzKykAH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biiZqW/btrxvLc4J8G/LCSTnz0AEGIkrvCzKykAH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiiZqW%2FbtrxvLc4J8G%2FLCSTnz0AEGIkrvCzKykAH1%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;352&quot; height=&quot;636&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;254&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nPgfP/btrxILwix7f/Y0sOokTzimdkqeREuMffN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nPgfP/btrxILwix7f/Y0sOokTzimdkqeREuMffN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nPgfP/btrxILwix7f/Y0sOokTzimdkqeREuMffN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnPgfP%2FbtrxILwix7f%2FY0sOokTzimdkqeREuMffN1%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;722&quot; height=&quot;254&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;254&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파트 제거 및 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ kubectl edit stateful web&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ .spec.replicas: 2로 변경&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;111&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUMsEF/btrxoGpVFwR/CGSxP4cQqSLT4geBOh3XX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUMsEF/btrxoGpVFwR/CGSxP4cQqSLT4geBOh3XX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUMsEF/btrxoGpVFwR/CGSxP4cQqSLT4geBOh3XX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUMsEF%2FbtrxoGpVFwR%2FCGSxP4cQqSLT4geBOh3XX0%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;348&quot; height=&quot;111&quot; data-origin-width=&quot;348&quot; data-origin-height=&quot;111&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Parallel로 변경하면 파드들이 순서 없이 &lt;b&gt;병렬로 실행&lt;/b&gt;되거나 종료되게 할 수 있음&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/N9mhk/btrxGcBqwnY/8w6P8fMQUZ3jdONHcABkD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/N9mhk/btrxGcBqwnY/8w6P8fMQUZ3jdONHcABkD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/N9mhk/btrxGcBqwnY/8w6P8fMQUZ3jdONHcABkD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FN9mhk%2FbtrxGcBqwnY%2F8w6P8fMQUZ3jdONHcABkD0%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;312&quot; height=&quot;136&quot; data-origin-width=&quot;312&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Job&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;파드(어플리케이션)의&amp;nbsp;상태가&amp;nbsp;완료/종료&amp;nbsp;(일회성) &lt;br /&gt;-&amp;nbsp;&lt;b&gt;실행&amp;nbsp;후&amp;nbsp;완료&amp;nbsp;시&amp;nbsp;파드를&amp;nbsp;종료&lt;/b&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;완료로&amp;nbsp;카운트되기&amp;nbsp;전에&amp;nbsp;파드를&amp;nbsp;제거하거나&amp;nbsp;문제가&amp;nbsp;생기면&amp;nbsp;새로운&amp;nbsp;파드&amp;nbsp;생성 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;하지만,&amp;nbsp;완료&amp;nbsp;카운트&amp;nbsp;후에는&amp;nbsp;제거해도&amp;nbsp;다시&amp;nbsp;만들지&amp;nbsp;않음 &lt;br /&gt;-&amp;nbsp;완료&amp;nbsp;횟수를&amp;nbsp;지정&amp;nbsp;가능 &lt;br /&gt;-&amp;nbsp;레이블/셀렉터가&amp;nbsp;사용&amp;nbsp;가능하긴&amp;nbsp;하지만&amp;nbsp;권장하지&amp;nbsp;않음 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;컨트롤러에&amp;nbsp;부여된&amp;nbsp;고유값(UUID) &lt;br /&gt;-&amp;nbsp;restartPolicy&amp;nbsp;속성이&amp;nbsp;기본값은&amp;nbsp;Always &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;정상종료/비정상종료&amp;nbsp;관계없이&amp;nbsp;종료하면&amp;nbsp;재시작 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt;&amp;nbsp;Onfailure&amp;nbsp;속성으로&amp;nbsp;설정하는&amp;nbsp;것을&amp;nbsp;권장 &lt;br /&gt;-&amp;nbsp;parallerism&amp;nbsp;항목으로&amp;nbsp;동시&amp;nbsp;생성&amp;nbsp;파드의&amp;nbsp;개수&amp;nbsp;지정 &lt;br /&gt;-&amp;nbsp;작업&amp;nbsp;실패&amp;nbsp;처리 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;activeDeadlineSeconds&amp;nbsp;항목으로&amp;nbsp;실패/성공&amp;nbsp;여부&amp;nbsp;결정을&amp;nbsp;할&amp;nbsp;판단&amp;nbsp;시간 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;backofflimit&amp;nbsp;항목으로&amp;nbsp;실패&amp;nbsp;시&amp;nbsp;재시도&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;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTudS8/btrxNYuTBMv/JZJVcPjOSqq99HH4yMSG01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTudS8/btrxNYuTBMv/JZJVcPjOSqq99HH4yMSG01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTudS8/btrxNYuTBMv/JZJVcPjOSqq99HH4yMSG01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTudS8%2FbtrxNYuTBMv%2FJZJVcPjOSqq99HH4yMSG01%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;555&quot; height=&quot;241&quot; data-origin-width=&quot;555&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;239&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cph6TE/btrxHZ9bXBM/DsHcV2wIszxsLq9uP4hkL0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cph6TE/btrxHZ9bXBM/DsHcV2wIszxsLq9uP4hkL0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cph6TE/btrxHZ9bXBM/DsHcV2wIszxsLq9uP4hkL0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcph6TE%2FbtrxHZ9bXBM%2FDsHcV2wIszxsLq9uP4hkL0%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;439&quot; height=&quot;239&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;239&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;CronJob&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;잡을&amp;nbsp;주기적으로&amp;nbsp;반복&amp;nbsp;실행하는&amp;nbsp;방식 &lt;br /&gt;-&amp;nbsp;리눅스의&amp;nbsp;크론탭처럼&amp;nbsp;반복&amp;nbsp;주기를&amp;nbsp;설정 &lt;br /&gt;-&amp;nbsp;작업&amp;nbsp;완료&amp;nbsp;시간과&amp;nbsp;반복&amp;nbsp;주기에&amp;nbsp;대한&amp;nbsp;고려가&amp;nbsp;필요 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;startingDeadlineSeconds&amp;nbsp;:&amp;nbsp;예약된&amp;nbsp;시각에&amp;nbsp;실행을&amp;nbsp;못할&amp;nbsp;경우&amp;nbsp;기다릴&amp;nbsp;시간&amp;nbsp;(중복허용X) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; =&amp;gt;&amp;nbsp;기다려도&amp;nbsp;실행할&amp;nbsp;수&amp;nbsp;없을&amp;nbsp;경우에는&amp;nbsp;해당&amp;nbsp;시각의&amp;nbsp;작업은&amp;nbsp;포기 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;concurrencyPolicy&amp;nbsp;:&amp;nbsp;동시&amp;nbsp;실행&amp;nbsp;여부 &lt;br /&gt;-&amp;nbsp;작업이&amp;nbsp;완료해도&amp;nbsp;파드를&amp;nbsp;바로&amp;nbsp;제거하지&amp;nbsp;않음 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;시간&amp;nbsp;설정(schedule) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;분&amp;nbsp; 시&amp;nbsp; 일&amp;nbsp; 월&amp;nbsp; 요일&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; * &amp;nbsp; * &amp;nbsp; &amp;nbsp;* &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp;* =&amp;gt;&amp;nbsp;1분&amp;nbsp;단위로&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */1&amp;nbsp; * &amp;nbsp; &amp;nbsp;* &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp;* =&amp;gt;&amp;nbsp;1분&amp;nbsp;단위로&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; */2&amp;nbsp; * &amp;nbsp; * &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp;* =&amp;gt;&amp;nbsp;2분&amp;nbsp;단위로&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;*&amp;nbsp; */2&amp;nbsp; * &amp;nbsp; * &amp;nbsp; &amp;nbsp; &amp;nbsp;* =&amp;gt;&amp;nbsp;2시간&amp;nbsp;단위로&amp;nbsp;실행 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp;1 &amp;nbsp; &amp;nbsp;1&amp;nbsp; 1 &amp;nbsp; &amp;nbsp; &amp;nbsp;* =&amp;gt;&amp;nbsp;매년&amp;nbsp;1월&amp;nbsp;1일&amp;nbsp;1시&amp;nbsp;정각 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp;1 -3&amp;nbsp; 1&amp;nbsp; 1 &amp;nbsp; * =&amp;gt;&amp;nbsp;매년&amp;nbsp;1월&amp;nbsp;1일&amp;nbsp;1시&amp;nbsp;정각.&amp;nbsp;2시,&amp;nbsp;3시&amp;nbsp;정각에&amp;nbsp;실행 &lt;/p&gt;</description>
      <category>MLOps/K8S</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/131</guid>
      <comments>https://sjpyo.tistory.com/131#entry131comment</comments>
      <pubDate>Mon, 28 Mar 2022 22:21:18 +0900</pubDate>
    </item>
    <item>
      <title>컨트롤러 (ReplicaSet, Deployment)</title>
      <link>https://sjpyo.tistory.com/130</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;컨트롤러&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개념 : &lt;u&gt;파드를 관리하는 오브젝트&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파드 관리 방식 : Label과 Selector 사용 ( Label은 파드에 설정. Selector는 컨트롤러에 설정 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 종류 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;레플리카셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;디플로이먼트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;데몬셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;스테이트풀셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;잡&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파드의 &lt;b&gt;정해진 수 만큼 복제하고 관리&lt;/b&gt;&lt;br /&gt;- 레플리케이션&amp;nbsp;컨트롤러의&amp;nbsp;업그레이드&amp;nbsp;버전&amp;nbsp;(균등기반+집합기반) &lt;br /&gt;&lt;br /&gt;- 기존버전&amp;nbsp;(레플리케이션&amp;nbsp;컨트롤러&amp;nbsp;사용) &lt;br /&gt;- 기능&amp;nbsp;:&amp;nbsp;업데이트&amp;nbsp;+&amp;nbsp;복제본&amp;nbsp;관리(등호기반) &lt;br /&gt;&lt;br /&gt;- 현재&amp;nbsp;(레플리카셋) &lt;br /&gt;- 기능&amp;nbsp;:&amp;nbsp;복제본&amp;nbsp;관리&amp;nbsp;(집합기반) &lt;br /&gt;- 업데이트&amp;nbsp;기능은&amp;nbsp;디플로이먼트로&amp;nbsp;관리 &lt;br /&gt;=&amp;gt;&amp;nbsp;&lt;b&gt;디플로이먼트를&amp;nbsp;통해서&amp;nbsp;레플리카셋&amp;nbsp;및&amp;nbsp;파드를&amp;nbsp;생성하고&amp;nbsp;관리: 실전에서는 주로 Deployment 사용&lt;/b&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;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elH9f0/btrxkNhFfke/g0NEJf9a8N7xHEQtd31ZV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elH9f0/btrxkNhFfke/g0NEJf9a8N7xHEQtd31ZV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elH9f0/btrxkNhFfke/g0NEJf9a8N7xHEQtd31ZV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelH9f0%2FbtrxkNhFfke%2Fg0NEJf9a8N7xHEQtd31ZV0%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;251&quot; height=&quot;362&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcSpQI/btrxgxzZGas/vzIKCNlu2MbQiKGZRgMf2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcSpQI/btrxgxzZGas/vzIKCNlu2MbQiKGZRgMf2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcSpQI/btrxgxzZGas/vzIKCNlu2MbQiKGZRgMf2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcSpQI%2FbtrxgxzZGas%2FvzIKCNlu2MbQiKGZRgMf2K%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;601&quot; height=&quot;188&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D1dky/btrxkfrW3vo/4KbHZN2wyZ8nTkrrGoPZ21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D1dky/btrxkfrW3vo/4KbHZN2wyZ8nTkrrGoPZ21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D1dky/btrxkfrW3vo/4KbHZN2wyZ8nTkrrGoPZ21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD1dky%2FbtrxkfrW3vo%2F4KbHZN2wyZ8nTkrrGoPZ21%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;480&quot; height=&quot;123&quot; data-origin-width=&quot;480&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;디플로이먼트&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;&lt;b&gt;레플리카셋을&amp;nbsp;관리&lt;/b&gt;해주는&amp;nbsp;컨트롤러 &lt;br /&gt;-&amp;nbsp;&lt;b&gt;업데이트&amp;nbsp;정책(배포&amp;nbsp;방식)을&amp;nbsp;지원&lt;/b&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;롤링업데이트&lt;/u&gt;&amp;nbsp;-&amp;nbsp;새로운&amp;nbsp;RS&amp;nbsp;및&amp;nbsp;파드&amp;nbsp;생성&amp;nbsp;(순차적으로&amp;nbsp;하나씩) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxSurge :&amp;nbsp;파드&amp;nbsp;생성&amp;nbsp;시&amp;nbsp;비율(개수)&amp;nbsp;지정 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxUnavailable :&amp;nbsp;오류가&amp;nbsp;발생한&amp;nbsp;파드의&amp;nbsp;허용&amp;nbsp;비율(개수) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;u&gt;리크리에이트&lt;/u&gt;&amp;nbsp;-&amp;nbsp;기존의&amp;nbsp;파드&amp;nbsp;제거&amp;nbsp;후&amp;nbsp;새로운&amp;nbsp;RS&amp;nbsp;및&amp;nbsp;파드&amp;nbsp;생성 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;버전관리를&amp;nbsp;위한&amp;nbsp;목적이&amp;nbsp;크다. &lt;br /&gt;-&amp;nbsp;수정&amp;nbsp;작업&amp;nbsp;시&amp;nbsp;명령어 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;&amp;nbsp;set&amp;nbsp;image :&amp;nbsp;이미지를&amp;nbsp;변경 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;&amp;nbsp;edit&amp;nbsp; :&amp;nbsp;이미지&amp;nbsp;포함&amp;nbsp;설정&amp;nbsp;변경&amp;nbsp;가능 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;&amp;nbsp;apply :&amp;nbsp;템플릿파일&amp;nbsp;수정&amp;nbsp;및&amp;nbsp;배포 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;리비전&amp;nbsp;넘버는&amp;nbsp;항상&amp;nbsp;증가 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;따로&amp;nbsp;이유는&amp;nbsp;기록되지&amp;nbsp;않음&amp;nbsp;(관리가&amp;nbsp;힘들&amp;nbsp;수&amp;nbsp;있다) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--record&amp;nbsp;옵션으로&amp;nbsp;명령어&amp;nbsp;자체를&amp;nbsp;기록 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;혹은&amp;nbsp;annotations&amp;nbsp;항목에서&amp;nbsp;kubernetes.io/change-cause&amp;nbsp;를&amp;nbsp;설정하면&amp;nbsp;원하는&amp;nbsp;메시지를&amp;nbsp;기록&amp;nbsp;가능 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;리비전&amp;nbsp;넘버는&amp;nbsp;항상&amp;nbsp;증가&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt;&amp;nbsp;undo&amp;nbsp;명령어로&amp;nbsp;롤백&amp;nbsp;시에도&amp;nbsp;증가 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;기존의&amp;nbsp;리비전넘버는&amp;nbsp;제거 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;rollout&amp;nbsp;명령어&amp;nbsp;정리 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;rollout&amp;nbsp;history :&amp;nbsp;업데이트&amp;nbsp;기록 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;rollout&amp;nbsp;status :&amp;nbsp;현재&amp;nbsp;배포&amp;nbsp;작업의&amp;nbsp;상태 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;rollout&amp;nbsp;undo :&amp;nbsp;지정한&amp;nbsp;상태로&amp;nbsp;롤백&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ kubectl rollout pause, resume, restart: 일시정지, 계속진행, 재시작&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 생성 및 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mRQEh/btrxkKxRWzh/K0HrSAk8LYWO1u6N14QKLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mRQEh/btrxkKxRWzh/K0HrSAk8LYWO1u6N14QKLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mRQEh/btrxkKxRWzh/K0HrSAk8LYWO1u6N14QKLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmRQEh%2FbtrxkKxRWzh%2FK0HrSAk8LYWO1u6N14QKLk%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;251&quot; height=&quot;378&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vjP5d/btrxj7UjH5i/kb5eu3aCMc4kYLcK0626nK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vjP5d/btrxj7UjH5i/kb5eu3aCMc4kYLcK0626nK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vjP5d/btrxj7UjH5i/kb5eu3aCMc4kYLcK0626nK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvjP5d%2Fbtrxj7UjH5i%2Fkb5eu3aCMc4kYLcK0626nK%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;630&quot; height=&quot;191&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이미지 교체 및 확인 (set image)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ kubectl set image&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ kubectl edit deploy nginx-deployment&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; 위의 명령어는 vi편집기 바로 실행하여 종료 시 적용&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;259&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOGwNm/btrxiWNgXgM/EvZbdx14pW7KmIrMEGm5Tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOGwNm/btrxiWNgXgM/EvZbdx14pW7KmIrMEGm5Tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOGwNm/btrxiWNgXgM/EvZbdx14pW7KmIrMEGm5Tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOGwNm%2FbtrxiWNgXgM%2FEvZbdx14pW7KmIrMEGm5Tk%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;678&quot; height=&quot;259&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;259&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- rollout 명령어로 업데이트 내역 확인 / 취소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$ kubectl rollout undo deploy nginx-deployment --to-revision=1 도 사용 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;374&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZ2UFx/btrxkMQDTKH/6nK9QgHXKJMJ9ncVxIH7Ak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZ2UFx/btrxkMQDTKH/6nK9QgHXKJMJ9ncVxIH7Ak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZ2UFx/btrxkMQDTKH/6nK9QgHXKJMJ9ncVxIH7Ak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZ2UFx%2FbtrxkMQDTKH%2F6nK9QgHXKJMJ9ncVxIH7Ak%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;509&quot; height=&quot;374&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;374&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- annotation 설정 / --record&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/M8j4g/btrxkfrZhlS/1P7cZI6nOvNxY8FQQYIqS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/M8j4g/btrxkfrZhlS/1P7cZI6nOvNxY8FQQYIqS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/M8j4g/btrxkfrZhlS/1P7cZI6nOvNxY8FQQYIqS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FM8j4g%2FbtrxkfrZhlS%2F1P7cZI6nOvNxY8FQQYIqS1%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;329&quot; height=&quot;107&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;107&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- strategy 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;spec 아래에 추가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;306&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciBJO6/btrxiYdeppy/gFkIXPsZrzUeS6ba11jOS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciBJO6/btrxiYdeppy/gFkIXPsZrzUeS6ba11jOS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciBJO6/btrxiYdeppy/gFkIXPsZrzUeS6ba11jOS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciBJO6%2FbtrxiYdeppy%2FgFkIXPsZrzUeS6ba11jOS0%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;381&quot; height=&quot;306&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;306&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>MLOps/K8S</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/130</guid>
      <comments>https://sjpyo.tistory.com/130#entry130comment</comments>
      <pubDate>Sat, 26 Mar 2022 16:44:13 +0900</pubDate>
    </item>
    <item>
      <title>파드 관리</title>
      <link>https://sjpyo.tistory.com/129</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;파드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;쿠버네티스에서&amp;nbsp;컨테이너를&amp;nbsp;관리하는&amp;nbsp;최소&amp;nbsp;단위 &lt;br /&gt;-&amp;nbsp;컨테이너가&amp;nbsp;하나&amp;nbsp;이상 &lt;br /&gt;-&amp;nbsp;하나의&amp;nbsp;목적을&amp;nbsp;위해서&amp;nbsp;하나의&amp;nbsp;파드를&amp;nbsp;구성 &lt;br /&gt;-&amp;nbsp;목적을&amp;nbsp;위해서&amp;nbsp;필요한&amp;nbsp;기능이&amp;nbsp;여러&amp;nbsp;가지 &lt;br /&gt;-&amp;nbsp;파드의&amp;nbsp;목적으로는&amp;nbsp;컨테이너&amp;nbsp;간의&amp;nbsp;리소스를&amp;nbsp;서로&amp;nbsp;공유 &lt;br /&gt;-&amp;nbsp;여러&amp;nbsp;컨테이너(동일목적)를&amp;nbsp;동시에&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;Pending : 스케줄링,&amp;nbsp;이미지&amp;nbsp;다운로드&amp;nbsp;및&amp;nbsp;컨테이너&amp;nbsp;실행&amp;nbsp;(모든&amp;nbsp;컨테이너가&amp;nbsp;실행되기&amp;nbsp;전)&lt;br /&gt;2.&amp;nbsp;Running : 모든&amp;nbsp;컨테이너가&amp;nbsp;정상&amp;nbsp;실행&lt;br /&gt;3.&amp;nbsp;Succeeded&amp;nbsp;/&amp;nbsp;Failed : 작업이&amp;nbsp;성공적으로&amp;nbsp;완료, 실패&lt;br /&gt;4.&amp;nbsp;Unknown : 파드의&amp;nbsp;상태를&amp;nbsp;확인할&amp;nbsp;수&amp;nbsp;없을&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;파드의&amp;nbsp;상태를&amp;nbsp;확인해주는&amp;nbsp;방식/상태&amp;nbsp;-&amp;gt;&amp;nbsp;유지 &lt;br /&gt;-&amp;nbsp;종류 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; livenessProbe&amp;nbsp;:&amp;nbsp;컨테이너의&amp;nbsp;실행여부를&amp;nbsp;확인해서&amp;nbsp;오류&amp;nbsp;발생&amp;nbsp;시&amp;nbsp;재실행&amp;nbsp;기능&amp;nbsp;지원 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; readinessProbe&amp;nbsp;:&amp;nbsp;컨테이너&amp;nbsp;내부의&amp;nbsp;어플리케이션이&amp;nbsp;응답&amp;nbsp;가능한지&amp;nbsp;확인&amp;nbsp;및&amp;nbsp;재실행 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; startupProbe&amp;nbsp;:&amp;nbsp;컨테이너&amp;nbsp;내부의&amp;nbsp;어플리케이션이&amp;nbsp;실행했는지&amp;nbsp;확인 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;장점&amp;nbsp;:&amp;nbsp;상태를&amp;nbsp;확인하고&amp;nbsp;유지해줄&amp;nbsp;수&amp;nbsp;있다. &lt;br /&gt;-&amp;nbsp;확인&amp;nbsp;방식 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Exec&amp;nbsp;:&amp;nbsp;지정한&amp;nbsp;프로그램(명령어)을&amp;nbsp;실행해서&amp;nbsp;결과값으로&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Http&amp;nbsp;:&amp;nbsp;Get으로&amp;nbsp;요청해서&amp;nbsp;응답코드로&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;TCP&amp;nbsp;:&amp;nbsp;특정&amp;nbsp;포트에&amp;nbsp;대한&amp;nbsp;요청으로&amp;nbsp;포트&amp;nbsp;확인 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;진단&amp;nbsp;결과 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Success&amp;nbsp;:&amp;nbsp;정상&amp;nbsp;(&amp;nbsp;exec&amp;nbsp;-&amp;nbsp;리턴코드&amp;nbsp;0&amp;nbsp;,&amp;nbsp;http&amp;nbsp;-&amp;nbsp;2xx&amp;nbsp;/&amp;nbsp;3xx&amp;nbsp;,&amp;nbsp;tcp&amp;nbsp;-&amp;nbsp;open&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Failure&amp;nbsp;:&amp;nbsp;오류&amp;nbsp;(&amp;nbsp;exec&amp;nbsp;-&amp;nbsp;리턴코드&amp;nbsp;0이&amp;nbsp;아닐&amp;nbsp;때&amp;nbsp;,&amp;nbsp;http&amp;nbsp;-&amp;nbsp;400이상&amp;nbsp;,&amp;nbsp;tcp&amp;nbsp;-&amp;nbsp;close&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Unknown&amp;nbsp;:&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;확인&amp;nbsp;후&amp;nbsp;컨테이너의&amp;nbsp;재시작&amp;nbsp;정책에&amp;nbsp;따라&amp;nbsp;처리&amp;nbsp;(기본값은&amp;nbsp;항상&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;초기화 컨테이너 (init Container)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;파드&amp;nbsp;실행&amp;nbsp;시&amp;nbsp;우선적으로&amp;nbsp;실행해야&amp;nbsp;하는&amp;nbsp;컨테이너를&amp;nbsp;지정 &lt;br /&gt;-&amp;nbsp;순서대로&amp;nbsp;실행 &lt;br /&gt;-&amp;nbsp;프로브&amp;nbsp;사용&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;인프라 컨테이너 (infra Container)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;/pause&amp;nbsp;를&amp;nbsp;실행하는&amp;nbsp;컨테이너 &lt;br /&gt;-&amp;nbsp;파드&amp;nbsp;생성&amp;nbsp;시&amp;nbsp;기본적으로&amp;nbsp;함께&amp;nbsp;생성 &lt;br /&gt;-&amp;nbsp;IP&amp;nbsp;주소를&amp;nbsp;할당&amp;nbsp;(파드의&amp;nbsp;어플리케이션&amp;nbsp;컨테이너가&amp;nbsp;재시작해도&amp;nbsp;IP주소를&amp;nbsp;유지, &amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;컨테이너가&amp;nbsp;존재해도&amp;nbsp;모두&amp;nbsp;동일&amp;nbsp;IP&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;일반적인&amp;nbsp;파드는&amp;nbsp;kube-apiserver&amp;nbsp;를&amp;nbsp;통해서&amp;nbsp;파드를&amp;nbsp;관리 &lt;br /&gt;-&amp;nbsp;kube-apiserver&amp;nbsp;를&amp;nbsp;통하지&amp;nbsp;않고&amp;nbsp;만들고&amp;nbsp;관리하는&amp;nbsp;파드 &lt;br /&gt;-&amp;nbsp;쿠버네티스의&amp;nbsp;구성요소(컴포넌트)들도&amp;nbsp;파드&amp;nbsp;형태로&amp;nbsp;관리 &lt;br /&gt;-&amp;nbsp;kubelet&amp;nbsp;이&amp;nbsp;직접&amp;nbsp;관리 &lt;br /&gt;-&amp;nbsp;노드&amp;nbsp;변경&amp;nbsp;없이&amp;nbsp;동일한&amp;nbsp;노드에서만&amp;nbsp;재실행 &lt;br /&gt;-&amp;nbsp;클러스터(쿠버네티스시스템)&amp;nbsp;환경을&amp;nbsp;구성하는&amp;nbsp;데에&amp;nbsp;필요한&amp;nbsp;파드들을&amp;nbsp;주로&amp;nbsp;설정 &lt;br /&gt;-&amp;nbsp;/etc/kubernetes/manifest&amp;nbsp;디렉토리에&amp;nbsp;yaml&amp;nbsp;파일로&amp;nbsp;작성 &lt;br /&gt;-&amp;nbsp;각&amp;nbsp;컨트롤플레인&amp;nbsp;및&amp;nbsp;노드마다&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;쿠버네티스에서는&amp;nbsp;컨테이너를&amp;nbsp;파드&amp;nbsp;단위로&amp;nbsp;관리 &lt;br /&gt;-&amp;nbsp;따라서&amp;nbsp;리소스&amp;nbsp;설정도&amp;nbsp;파드&amp;nbsp;단위로&amp;nbsp;구성 &lt;br /&gt;-&amp;nbsp;limit&amp;nbsp;:&amp;nbsp;최대&amp;nbsp;사용&amp;nbsp;가능한&amp;nbsp;리소스(제한) &lt;br /&gt;-&amp;nbsp;request&amp;nbsp;:&amp;nbsp;최소&amp;nbsp;사용&amp;nbsp;가능한&amp;nbsp;리소스(보장) &lt;br /&gt;-&amp;nbsp;cpu&amp;nbsp;/&amp;nbsp;memory&amp;nbsp;에&amp;nbsp;대한&amp;nbsp;설정 &lt;br /&gt;-&amp;nbsp;memory&amp;nbsp;는&amp;nbsp;사이즈를&amp;nbsp;기준으로&amp;nbsp;설정 &lt;br /&gt;-&amp;nbsp;cpu&amp;nbsp;는&amp;nbsp;코어개수(퍼센트)로&amp;nbsp;설정 &lt;br /&gt;-&amp;nbsp;할당한&amp;nbsp;리소스에&amp;nbsp;따라&amp;nbsp;파드의&amp;nbsp;실행이&amp;nbsp;어려울&amp;nbsp;수&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; &amp;nbsp; &amp;nbsp; &amp;nbsp;테스트&amp;nbsp;시나리오 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1.&amp;nbsp;최대사용량을&amp;nbsp;실제&amp;nbsp;노드의&amp;nbsp;스펙보다&amp;nbsp;크게&amp;nbsp;설정했을&amp;nbsp;때&amp;nbsp;생성&amp;nbsp;가능한&amp;nbsp;지&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2.&amp;nbsp;최소보장&amp;nbsp;크기가&amp;nbsp;오버했을&amp;nbsp;때&amp;nbsp;생성&amp;nbsp;여부 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3.&amp;nbsp;사용량이&amp;nbsp;실제&amp;nbsp;최대까지만&amp;nbsp;사용되는지&amp;nbsp;확인 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;4.&amp;nbsp;추가적인&amp;nbsp;파드를&amp;nbsp;생성했을&amp;nbsp;때&amp;nbsp;제한&amp;nbsp;조건&amp;nbsp;(&amp;nbsp;실제&amp;nbsp;2G&amp;nbsp;,&amp;nbsp;사용량&amp;nbsp;1.5G&amp;nbsp;,&amp;nbsp;새로운&amp;nbsp;파드의&amp;nbsp;최소&amp;nbsp;1G가&amp;nbsp;필요한&amp;nbsp;경우&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;top&amp;nbsp;node/pod&amp;nbsp;:&amp;nbsp;각&amp;nbsp;대상에&amp;nbsp;대한&amp;nbsp;사용량&amp;nbsp;확인&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;파드&amp;nbsp;실행&amp;nbsp;시&amp;nbsp;컨테이너&amp;nbsp;내부에서&amp;nbsp;사용할&amp;nbsp;환경변수&amp;nbsp;설정&amp;nbsp;가능 &lt;br /&gt;-&amp;nbsp;값을&amp;nbsp;템플릿에서&amp;nbsp;직접&amp;nbsp;지정&amp;nbsp;가능&amp;nbsp;(&amp;nbsp;value&amp;nbsp;) &lt;br /&gt;-&amp;nbsp;오브젝트의&amp;nbsp;설정값을&amp;nbsp;불러와서&amp;nbsp;지정&amp;nbsp;(&amp;nbsp;valueFrom.fieldRef&amp;nbsp;) &lt;br /&gt;-&amp;nbsp;컨테이너의&amp;nbsp;리소스&amp;nbsp;할당량을&amp;nbsp;값으로&amp;nbsp;지정&amp;nbsp;(&amp;nbsp;valueFrom.resourceFieldRef&amp;nbsp;) &lt;br /&gt;-&amp;nbsp;컨피그맵&amp;nbsp;또는&amp;nbsp;시크릿의&amp;nbsp;값도&amp;nbsp;사용&amp;nbsp;가능&lt;br /&gt;-&amp;nbsp;명령어로&amp;nbsp;파드&amp;nbsp;실행&amp;nbsp;시에도&amp;nbsp;환경변수&amp;nbsp;설정&amp;nbsp;가능&amp;nbsp;(&amp;nbsp;kubectl&amp;nbsp;run&amp;nbsp;--env&amp;nbsp;이름=값&amp;nbsp;) &lt;br /&gt;-&amp;nbsp;확인은&amp;nbsp;kubectl&amp;nbsp;describe&amp;nbsp;로&amp;nbsp;가능&amp;nbsp;(직접&amp;nbsp;컨테이너&amp;nbsp;내부에서&amp;nbsp;확인도&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;사이드카&amp;nbsp;:&amp;nbsp;확장된&amp;nbsp;기능을&amp;nbsp;위한&amp;nbsp;구성&amp;nbsp;(리소스공유) &lt;br /&gt;-&amp;nbsp;엠베서더&amp;nbsp;:&amp;nbsp;프록시&amp;nbsp;컨테이너로&amp;nbsp;간접접근&amp;nbsp;및&amp;nbsp;로드밸런싱&amp;nbsp;역할 &lt;br /&gt;-&amp;nbsp;어뎁터&amp;nbsp;:&amp;nbsp;어플리케이션이&amp;nbsp;동작하는&amp;nbsp;컨테이너에&amp;nbsp;대한&amp;nbsp;접근&amp;nbsp;및&amp;nbsp;데이터&amp;nbsp;수집&amp;nbsp;(모니터링&amp;nbsp;등) &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt;&amp;nbsp;다양한&amp;nbsp;패턴으로&amp;nbsp;파드&amp;nbsp;내부의&amp;nbsp;컨테이너가&amp;nbsp;구성된다. &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;관리&amp;nbsp;시에는&amp;nbsp;파드&amp;nbsp;단위로&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;사용법 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;생성 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;run :&amp;nbsp;파드의&amp;nbsp;특성을&amp;nbsp;명령어&amp;nbsp;라인에서&amp;nbsp;정의하고&amp;nbsp;실행&amp;nbsp;(재사용성이&amp;nbsp;떨어짐) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;create -f FILE :&amp;nbsp;파드를&amp;nbsp;포함한&amp;nbsp;여러&amp;nbsp;오브젝트를&amp;nbsp;생성&amp;nbsp;(템플릿&amp;nbsp;사용&amp;nbsp;-&amp;gt;&amp;nbsp;새로&amp;nbsp;생성) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;apply -f FILE :&amp;nbsp;파드를&amp;nbsp;포함한&amp;nbsp;여러&amp;nbsp;오브젝트를&amp;nbsp;생성&amp;nbsp;(템플릿&amp;nbsp;사용&amp;nbsp;-&amp;gt;&amp;nbsp;새로&amp;nbsp;생성&amp;nbsp;+&amp;nbsp;수정) &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;삭제 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;delete&amp;nbsp; :&amp;nbsp;종류와&amp;nbsp;이름을&amp;nbsp;직접&amp;nbsp;지정하거나&amp;nbsp;생성&amp;nbsp;시&amp;nbsp;사용한&amp;nbsp;파일을&amp;nbsp;이용해서&amp;nbsp;삭제&amp;nbsp;가능 &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;확인 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;get :&amp;nbsp;간단한&amp;nbsp;확인&amp;nbsp;(&amp;nbsp;-o&amp;nbsp;옵션으로&amp;nbsp;출력방식&amp;nbsp;지정&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;describe :&amp;nbsp;조금&amp;nbsp;더&amp;nbsp;상세한&amp;nbsp;정보&amp;nbsp;확인&amp;nbsp;(&amp;nbsp;대상을&amp;nbsp;지정해서&amp;nbsp;보는&amp;nbsp;경우가&amp;nbsp;많음&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;explain :&amp;nbsp;템플릿의&amp;nbsp;작성&amp;nbsp;방식&amp;nbsp;(설정항목)&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;api-resources&amp;nbsp;:&amp;nbsp;템플릿에서&amp;nbsp;정의할&amp;nbsp;대상의&amp;nbsp;kind&amp;nbsp;/&amp;nbsp;api-version&amp;nbsp;(&amp;nbsp;kubectl&amp;nbsp;api-versions&amp;nbsp;) &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;$&amp;nbsp;kubectl&amp;nbsp;logs :&amp;nbsp;파드의&amp;nbsp;동작&amp;nbsp;내역&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;- yaml 파일 작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 아래의 내용에 따라 kubectl explain 명령어 사용하여 내용 확인 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DyZFU/btrxrcAr6um/FylbNKWQRgB7IBFT5Iakv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DyZFU/btrxrcAr6um/FylbNKWQRgB7IBFT5Iakv1/img.png&quot; data-alt=&quot;출처:&amp;amp;amp;nbsp;https://subicura.com/k8s/guide/pod.html#yaml로-설정파일spec-작성하기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DyZFU/btrxrcAr6um/FylbNKWQRgB7IBFT5Iakv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDyZFU%2FbtrxrcAr6um%2FFylbNKWQRgB7IBFT5Iakv1%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;565&quot; height=&quot;220&quot; data-origin-width=&quot;565&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처:&amp;amp;nbsp;https://subicura.com/k8s/guide/pod.html#yaml로-설정파일spec-작성하기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Azby/btrxmAviaL7/clkXSiJVuRSf0kKDvJpr6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Azby/btrxmAviaL7/clkXSiJVuRSf0kKDvJpr6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Azby/btrxmAviaL7/clkXSiJVuRSf0kKDvJpr6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Azby%2FbtrxmAviaL7%2FclkXSiJVuRSf0kKDvJpr6K%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;162&quot; height=&quot;197&quot; data-origin-width=&quot;162&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- yaml 기반으로 파드 실행 및 확인&lt;/p&gt;
&lt;pre id=&quot;code_1648275499631&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 실행
kubectl apply -f sample.yml

# 확인
kubectl get pods

# 종료
kubectl delete pod nginx&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;334&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dp5VkS/btrxrcf8YaF/XW5KxhgufV6URbHF8hi0CK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dp5VkS/btrxrcf8YaF/XW5KxhgufV6URbHF8hi0CK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dp5VkS/btrxrcf8YaF/XW5KxhgufV6URbHF8hi0CK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdp5VkS%2Fbtrxrcf8YaF%2FXW5KxhgufV6URbHF8hi0CK%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;334&quot; height=&quot;58&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- LivenessProbe 실습 예시&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRK7x/btrxj8r9Du1/JWkO78bzYXEFKdx6MIQgP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRK7x/btrxj8r9Du1/JWkO78bzYXEFKdx6MIQgP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRK7x/btrxj8r9Du1/JWkO78bzYXEFKdx6MIQgP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRK7x%2Fbtrxj8r9Du1%2FJWkO78bzYXEFKdx6MIQgP1%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;334&quot; height=&quot;329&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>MLOps/K8S</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/129</guid>
      <comments>https://sjpyo.tistory.com/129#entry129comment</comments>
      <pubDate>Sat, 26 Mar 2022 15:34:21 +0900</pubDate>
    </item>
    <item>
      <title>아키텍쳐 및 명령어 기본</title>
      <link>https://sjpyo.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;도커&amp;nbsp;-&amp;nbsp;하나의&amp;nbsp;시스템에서&amp;nbsp;컨테이너를&amp;nbsp;하나씩&amp;nbsp;관리 &lt;br /&gt;도커&amp;nbsp;컴포즈&amp;nbsp;-&amp;nbsp;하나의&amp;nbsp;시스템에서&amp;nbsp;컨테이너를&amp;nbsp;여러&amp;nbsp;개를&amp;nbsp;묶어서&amp;nbsp;관리 &lt;br /&gt;쿠버네티스&amp;nbsp;-&amp;nbsp;여러&amp;nbsp;대의&amp;nbsp;시스템에서&amp;nbsp;여러&amp;nbsp;컨테이너를&amp;nbsp;묶어서&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개념&amp;nbsp;-&amp;nbsp;여러&amp;nbsp;시스템에서&amp;nbsp;동작하는&amp;nbsp;여러&amp;nbsp;개의&amp;nbsp;컨테이너들을&amp;nbsp;세트로&amp;nbsp;관리 &lt;br /&gt;&lt;br /&gt;구성환경&amp;nbsp;-&amp;nbsp;온프레미스&amp;nbsp;/&amp;nbsp;클라우드&amp;nbsp;(&amp;nbsp;직접구성&amp;nbsp;/&amp;nbsp;관리형&amp;nbsp;쿠버네티스&amp;nbsp;) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;=&amp;gt;&amp;nbsp;관리형&amp;nbsp;쿠버네티스&amp;nbsp;사용&amp;nbsp;시&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;장점은&amp;nbsp;사용하기&amp;nbsp;편리,&amp;nbsp;초기&amp;nbsp;구성&amp;nbsp;비용이&amp;nbsp;없음 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;단점은&amp;nbsp;유지비용이&amp;nbsp;증가,&amp;nbsp;세부항목에&amp;nbsp;대한&amp;nbsp;관리가&amp;nbsp;어려움 &lt;br /&gt;&lt;br /&gt;설치&amp;nbsp;방식 &lt;br /&gt;-&amp;nbsp;kops&amp;nbsp;:&amp;nbsp;클라우드(AWS)에서&amp;nbsp;쿠버네티스&amp;nbsp;환경&amp;nbsp;구성 &lt;br /&gt;-&amp;nbsp;kubeadm&amp;nbsp;:&amp;nbsp;온프레미스&amp;nbsp;환경에서&amp;nbsp;쿠버네티스를&amp;nbsp;구성&amp;nbsp;(명령어를&amp;nbsp;사용) =&amp;gt;&amp;nbsp;버전&amp;nbsp;관리가&amp;nbsp;어려움 &lt;br /&gt;-&amp;nbsp;kubespray&amp;nbsp;:&amp;nbsp;kubeadm&amp;nbsp;+&amp;nbsp;ansible =&amp;gt;&amp;nbsp;각종&amp;nbsp;플레이북&amp;nbsp;/&amp;nbsp;변수파일&amp;nbsp;/&amp;nbsp;인벤토리&amp;nbsp;등을&amp;nbsp;설정 &lt;br /&gt;-&amp;nbsp;docker-desktop&amp;nbsp;:&amp;nbsp;리눅스컨테이너를&amp;nbsp;윈도우&amp;nbsp;등에서&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;환경을&amp;nbsp;구성 &lt;br /&gt;-&amp;nbsp;minikube&amp;nbsp;:&amp;nbsp;테스트환경을&amp;nbsp;구성하기&amp;nbsp;좋은&amp;nbsp;간소화된&amp;nbsp;쿠버네티스&amp;nbsp;환경&amp;nbsp;배포&amp;nbsp;(기본은&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;워크로드&amp;nbsp;:&amp;nbsp;컨테이너를&amp;nbsp;관리하는&amp;nbsp;방식 &lt;br /&gt;- 파드&amp;nbsp;:&amp;nbsp;컨테이너를&amp;nbsp;관리하는&amp;nbsp;최소&amp;nbsp;단위 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;하나&amp;nbsp;이상의&amp;nbsp;컨테이너로&amp;nbsp;구성&amp;nbsp;(목적) &lt;br /&gt;- 컨트롤러&amp;nbsp;:&amp;nbsp;파드를&amp;nbsp;관리&amp;nbsp;(관리&amp;nbsp;방식에&amp;nbsp;따라&amp;nbsp;여러&amp;nbsp;종류) &lt;br /&gt;- 레플리카셋 : 복제본의&amp;nbsp;개수를&amp;nbsp;관리 &lt;br /&gt;- 디플로이먼트&amp;nbsp;:&amp;nbsp;레플리카셋의&amp;nbsp;업데이트&amp;nbsp;정책&amp;nbsp;관리 &lt;br /&gt;- 데몬셋&amp;nbsp;:&amp;nbsp;노드마다&amp;nbsp;파드를&amp;nbsp;실행 &lt;br /&gt;- 스테이트풀셋&amp;nbsp;:&amp;nbsp;상태&amp;nbsp;저장을&amp;nbsp;위해&amp;nbsp;사용 &lt;br /&gt;- 잡&amp;nbsp;:&amp;nbsp;일회성&amp;nbsp;작업을&amp;nbsp;한번&amp;nbsp;실행 &lt;br /&gt;- 크론잡&amp;nbsp;:&amp;nbsp;일회성&amp;nbsp;작업을&amp;nbsp;반복&amp;nbsp;실행 &lt;br /&gt;&lt;br /&gt;-&amp;nbsp;서비스&amp;nbsp;:&amp;nbsp;컨테이너에&amp;nbsp;대한&amp;nbsp;네트워크&amp;nbsp;연결 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ClusterIP &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NodePort &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LoadBalancer&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;쿠버네티스&amp;nbsp;클러스터&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;control-plane&amp;nbsp;을&amp;nbsp;클러스터&amp;nbsp;구성 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1대로도&amp;nbsp;동작은&amp;nbsp;가능&amp;nbsp;(HA&amp;nbsp;기능&amp;nbsp;없음) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;기본&amp;nbsp;3대&amp;nbsp;권장&amp;nbsp;(HA&amp;nbsp;기능&amp;nbsp;제공) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;최대&amp;nbsp;7대&amp;nbsp;권장 &lt;br /&gt;-&amp;nbsp;node&amp;nbsp;(worker)&amp;nbsp;는&amp;nbsp;필요에&amp;nbsp;따라&amp;nbsp;개수&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;쿠버네티스&amp;nbsp;특징&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;선언적&amp;nbsp;API&amp;nbsp;:&amp;nbsp;상태를&amp;nbsp;정의해서&amp;nbsp;유지 &lt;br /&gt;-&amp;nbsp;커뮤니티가&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;Control-plane&amp;nbsp;(master) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kube-apiserver :&amp;nbsp;각각의&amp;nbsp;컴포넌트&amp;nbsp;및&amp;nbsp;리소스&amp;nbsp;제어를&amp;nbsp;위해&amp;nbsp;접근하는&amp;nbsp;포인트(전달자) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kube-controller-manager :&amp;nbsp;각각의&amp;nbsp;컨트롤러(파드)를&amp;nbsp;관리/제어 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;etcd :&amp;nbsp;쿠버네티스&amp;nbsp;환경(클러스터)&amp;nbsp;구성에&amp;nbsp;필요한&amp;nbsp;정보들을&amp;nbsp;저장 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kube-scheduler :&amp;nbsp;컨테이너를&amp;nbsp;실행할&amp;nbsp;위치(노드)를&amp;nbsp;지정 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;(cloud-controller-manager) :&amp;nbsp;클라우드&amp;nbsp;환경에서&amp;nbsp;컨트롤러&amp;nbsp;등의&amp;nbsp;개체를&amp;nbsp;제어/관리 &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Node&amp;nbsp;(worker) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kube-proxy :&amp;nbsp;컨테이너의&amp;nbsp;네트워크&amp;nbsp;구성 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kubelet :&amp;nbsp;명령어&amp;nbsp;등을&amp;nbsp;통해&amp;nbsp;전달한&amp;nbsp;내역을&amp;nbsp;전달받고,&amp;nbsp;컨테이너를&amp;nbsp;생성&amp;nbsp;및&amp;nbsp;상태유지 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;container-runtime&amp;nbsp;(docker) :&amp;nbsp;컨테이너&amp;nbsp;생성&amp;nbsp;및&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;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp;kubectl&amp;nbsp;명령어&amp;nbsp;사용 &lt;br /&gt;-&amp;nbsp;수동으로&amp;nbsp;설치가&amp;nbsp;필요할&amp;nbsp;수&amp;nbsp;있음&amp;nbsp;(kubeadm/kubespray&amp;nbsp;등은&amp;nbsp;자동설치) &lt;br /&gt;-&amp;nbsp;root사용자(설치를&amp;nbsp;진행한)&amp;nbsp;로만&amp;nbsp;설정 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;추가&amp;nbsp;구성&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1)&amp;nbsp;다른사용자에서&amp;nbsp;명령어&amp;nbsp;설정 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;/etc/kubernetest/admin.conf&amp;nbsp;파일을&amp;nbsp;~/.kube/config&amp;nbsp;파일로&amp;nbsp;복사&amp;nbsp;(소유권) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2)&amp;nbsp;자동완성기능 &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;kubectl&amp;nbsp;completion&amp;nbsp;bash&amp;nbsp;&amp;gt;&amp;nbsp;/etc/bash_completion.d/XXXX (재접속)&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;kubectl 동작 대상 이름 옵션 &lt;br /&gt;&lt;br /&gt;$&amp;nbsp;kubectl&amp;nbsp;explain&amp;nbsp;대상 :&amp;nbsp;대상에&amp;nbsp;대한&amp;nbsp;템플릿&amp;nbsp;설정&amp;nbsp;방법&amp;nbsp;확인 &lt;br /&gt;$&amp;nbsp;kubectl&amp;nbsp;api-resources :&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있는&amp;nbsp;리소스&amp;nbsp;목록&amp;nbsp;확인 &lt;br /&gt;$&amp;nbsp;kubectl&amp;nbsp;api-versions :&amp;nbsp;사용할&amp;nbsp;리소스의&amp;nbsp;버전&amp;nbsp;확인 &lt;br /&gt;&lt;br /&gt;-&amp;gt;&amp;nbsp;kubectl&amp;nbsp;create&amp;nbsp;/&amp;nbsp;apply :&amp;nbsp;템플릿으로&amp;nbsp;리소스&amp;nbsp;배포&amp;nbsp;(많이사용) &lt;br /&gt;&lt;br /&gt;$&amp;nbsp;kubectl&amp;nbsp;run :&amp;nbsp;간단하게&amp;nbsp;파드&amp;nbsp;배포 &lt;br /&gt;$&amp;nbsp;kubectl&amp;nbsp;expose :&amp;nbsp;간단하게&amp;nbsp;서비스&amp;nbsp;배포 &lt;br /&gt;$&amp;nbsp;kubectl&amp;nbsp;create :&amp;nbsp;컨트롤러&amp;nbsp;배포&amp;nbsp;(템플릿&amp;nbsp;없이도&amp;nbsp;가능)&lt;/p&gt;</description>
      <category>MLOps/K8S</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/128</guid>
      <comments>https://sjpyo.tistory.com/128#entry128comment</comments>
      <pubDate>Sat, 26 Mar 2022 14:57:50 +0900</pubDate>
    </item>
    <item>
      <title>도커 네트워크</title>
      <link>https://sjpyo.tistory.com/127</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;도커 네트워크&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 도커는 컨테이너를 이용해서 어플리케이션을 격리된 환경에서 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대부분의 어플리케이션은 외부의 사용자에게 서비스 제공이 목적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서비스를 제공하기 위해 네트워크 구성이 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어플리케이션 (컨테이너)끼리 서로 연동 시에도 필요&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가상 브릿지와 가상 네트워크 인터페이스 등을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨테이너 생성 시 기본적으로 bridge 네트워크로 설정&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;네트워크 종류 (driver)&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 기본제공&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- bridge: 내부적으로 컨테이너끼리 서로 연결되어 있으며 가상브릿지 (docker0)를 통해 외부와 연결 (추가 가능)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;- 기본 설정일 경우 외부에서 컨테이너로 접속 제한&lt;br /&gt;- 필요에 따라 docker run 명령어에서 -p 옵션으로 포트포워딩 설정&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- host: 호스트 (물리적인 시스템)의 네트워크 인터페이스 (스택)을 공유하는 형태&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;- 현재 시스템의 IP 주소를 통해 접근 가능&lt;br /&gt;- 단, 포트 번호가 겹치는 이미지를 함께 사용할 수 없음&lt;br /&gt;- 별도의 설정 없이 외부에서 컨테이너 접근 가능&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- null (none): 네트워크를 사용하지 않는 형태&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;2) 추가 제공&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- macvlan: mac 주소를 별도로 할당하는 방식&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;- 컨테이너에 mac 주소 할당해서 외부에서는 호스트에 물리적인 인터페이스를 추가한 것처럼 인식하도록 IP주소 따로 할당&lt;br /&gt;- 실제 IP주소가 필요하고 인터페이스의 부하 증가, 보인 위험 증가&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ipvlan: macvlan과 유사한 형태 (기능적으로 경량화)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- overlay: docker swarm을 사용할 경우 필요&lt;/p&gt;</description>
      <category>MLOps/Docker</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/127</guid>
      <comments>https://sjpyo.tistory.com/127#entry127comment</comments>
      <pubDate>Tue, 15 Mar 2022 11:56:22 +0900</pubDate>
    </item>
    <item>
      <title>도커 볼륨 관리 실습</title>
      <link>https://sjpyo.tistory.com/126</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 컨테이너에 디렉토리 연결&lt;/h2&gt;
&lt;pre id=&quot;code_1647242802683&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -v HOST Path:CONTAINER Path --name NAME ubuntu:latest&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 볼륨 생성 및 연결&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) contents 라는 이름의 볼륨 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1647242838693&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker volume create contents
# /var/lib/docker/volumes/contents&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) httpd 이미지로 컨테이너 실행&lt;/h4&gt;
&lt;pre id=&quot;code_1647242873219&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run -d -v contents:/usr/local/apache2/htdocs:ro httpd:latest&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 볼륨에서 파일 확인 및 curl 명령어로 컨테이너 접속 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1647242912304&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ls /var/lib/docker/volumes/contents/_data/

docker container inspect NAME

curl 172.17.0.X&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) centos 이미지로 컨테이너 실행&lt;/h4&gt;
&lt;pre id=&quot;code_1647242936142&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run -itd -v contents:/mnt --name os1 centos:7&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5) centos 컨테이너에서 파일 내용 확인 및 수정&lt;/h4&gt;
&lt;pre id=&quot;code_1647242980678&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container exec os1 ls /mnt

docker attach os1
ls /mnt
echo &quot;test volume&quot; &amp;gt; /mnt/index.html&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 컨테이너 및 볼륨 제거&lt;/h2&gt;
&lt;pre id=&quot;code_1647243034309&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container rm -f

docker volume prune&lt;/code&gt;&lt;/pre&gt;</description>
      <category>MLOps/Docker</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/126</guid>
      <comments>https://sjpyo.tistory.com/126#entry126comment</comments>
      <pubDate>Mon, 14 Mar 2022 16:30:49 +0900</pubDate>
    </item>
    <item>
      <title>도커 이미지 및 도커파일 관리 실습</title>
      <link>https://sjpyo.tistory.com/125</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 이미지 백업&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 현재 모든 이미지를 test.tar 파일로 백업&lt;/h4&gt;
&lt;pre id=&quot;code_1647242090439&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image save test.tar -o XXXX # 태그 생략 시 모든 태크&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 모든 이미지 삭제&lt;/h4&gt;
&lt;pre id=&quot;code_1647242107493&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image prune -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) test.tar 파일 이용해서 모든 이미지 복원&lt;/h4&gt;
&lt;pre id=&quot;code_1647242132368&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image load -i test.tar&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 이미지 수정&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) httpd:lastest 이미지를 web 이라는 이름의 컨테이너로 실행&lt;/h4&gt;
&lt;pre id=&quot;code_1647242187930&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --name web -d httpd:latest&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) web 컨테이너에 쉘을 실행하고 index.html 파일 내용 수정&lt;/h4&gt;
&lt;pre id=&quot;code_1647242204192&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container exec web bash&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 쉘을 종료하고 web 컨테이너를 httpd:custom 이름의 이미지로 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1647242216809&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container commit web httpd:custom&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) httpd:custom 이미지를 web02 컨테이너로 실행하고 index.html 파일 내용 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1647242234495&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --name web02 -d httpd:custom&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Dockerfile 사용법&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) centos:7 이미지를 컨테이너로 실행하고 파일시스템 구조만 뽑아서 이미지로 생성&lt;/h4&gt;
&lt;pre id=&quot;code_1647242320643&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --name os1 -itd centos:7

docker container export os1 -o FILE

docker image import &amp;lt;file name&amp;gt; &amp;lt;iamge name&amp;gt;​&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) Dockerfile 작성하면서 위 이미지를 베이스 이미지로 사용&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) httpd 서비스가 동작하는 이미지 생성 (패키지설치, 서비스 실행, index.html 복사)&lt;/h4&gt;
&lt;pre id=&quot;code_1647242426259&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo &quot;test dockerfile&quot; &amp;gt; index.html

vi Dockerfile

&quot;&quot;&quot;Dockerfile&quot;&quot;&quot;
FROM	base
RUN		yum install -y httpd
CMD		httpd -D FOREGROUND
COPY	index.html /var/www/html/
&quot;&quot;&quot;End Dockerfile&quot;&quot;&quot;

docker image build -t &amp;lt;docker file name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) 다음 조건에 맞는 이미지 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- testuser 사용자생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- /mnt 디렉토리를 볼륨으로 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 환경변수 VARS=abc 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 작업디렉토리 /mnt 디렉토리 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 접속 시 사용자를 testuser로 지정&lt;/p&gt;
&lt;pre id=&quot;code_1647242519023&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;Dockerfile&quot;&quot;&quot;
FROM	base
RUN		useradd testuser
VOLUME	/mnt
ENV		VARS=abc
WORKDIR	/mnt
USER	testuser
&quot;&quot;&quot;End Dockerfile&quot;&quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5) 지시어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FROM: 사용할 베이스 이미지 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CMD: 이미지로 컨테이너를 실행하면 동작할 내용 (프로세스)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ENTRYPOINT: 이미지로 컨테이너를 실행하면 동작할 내용 (프로세스)&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;- ENTRYPOINT의 우선순위가 더 높음&lt;br /&gt;- 둘 다 설정하면 ENTRYPOINT를 실행하면서 인자값으로 CMD 사용&lt;br /&gt;- 하나만 설정할 경우, CMD만 설정하면 이미지를 실행할 때 명령어 대체 가능; ENTRYPOINT는 명령어 대체 불가능&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- RUN: 이미지 생성 전 해야할 작업&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;- COPY: 파일 / 디렉토리를 이미지에 추가 (로컬)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ADD: 파일 / 디렉토리를 이미지에 추가 (로컬 / 원격)&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;- EXPOSE: 이미지에서 사용하는 포트 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- VOLUME: 이미지 자체적으로 볼륨이 필요한 디렉토리 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ENV: 환경 변수&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;- USER: 사용자 이름 지정 (사용자가 만들어진 상태에서 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- WORKDIR: 작업 디렉토리 지정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SHELL: 컨테이너에서 사용할 기본 쉘&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;- LABEL: 에몯&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ARG: Dockerfile 내부에서 사용할 변수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- ONBUILD: 새로 만든 이미지를 베이스 이미지로 지정할 때 사용할 구문 (예약)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- STOPSIGNAL: 시스템 콜 설정&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;- HEALTHCHECK: 상태 확인&lt;/p&gt;</description>
      <category>MLOps/Docker</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/125</guid>
      <comments>https://sjpyo.tistory.com/125#entry125comment</comments>
      <pubDate>Mon, 14 Mar 2022 16:22:55 +0900</pubDate>
    </item>
    <item>
      <title>도커 컨테이너 관리 실습</title>
      <link>https://sjpyo.tistory.com/124</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 이미지 다운로드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- httpd:latest, centos:7, ubuntu:latest&lt;/p&gt;
&lt;pre id=&quot;code_1647241045021&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image pull httpd

docker image pull centos:7

docker image pull ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 다운로드 한 이미지 확인&lt;/h2&gt;
&lt;pre id=&quot;code_1647241083481&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker image ls
# docker image inspect ubuntu:latest&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 이미지를 이용해서 컨테이너 실행&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) create 명령어와 start 명령어로 centos:7 이미지 실행 - 이름: centos&lt;/h4&gt;
&lt;pre id=&quot;code_1647241210468&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container create -it --name centos -it centos:7
docker container start centos

# 만약 start 명령어 사용 시 -ai 옵션으로 연결한다면, Ctrl + p + q 사용하여 연결만 해제&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) create 명령어와 start 명령어로 httpd:latest 이미지가 정상 동작하도록 실행 - 이름: web1&lt;/h4&gt;
&lt;pre id=&quot;code_1647241308940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container create --name web1 httpd:latest
docker container start web1&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) run 명령어로 ubuntu:latest 이미지 실행 - 이름: ubuntu&lt;/h4&gt;
&lt;pre id=&quot;code_1647241333956&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --itd --name ubuntu ubuntu:latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4) run 명령어로 httpd:latest 이미지 실행 - 이름: web2&lt;/h4&gt;
&lt;pre id=&quot;code_1647241353269&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --name web2 -d httpd:latest&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 컨테이너 상태 확인&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 동작 중인 컨테이너 상태 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1647241483354&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 모든 컨테이너 상태 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1647241494459&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container ps -a&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3) 특정 컨테이너 하나 자세한 정보 확인&lt;/h4&gt;
&lt;pre id=&quot;code_1647241512224&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container inspect &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 컨테이너 동작 확인&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) ubuntu 컨테이너 중지&lt;/h4&gt;
&lt;pre id=&quot;code_1647241525532&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container stop ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) web1 컨테이너 강제 삭제&lt;/h4&gt;
&lt;pre id=&quot;code_1647241534803&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container rm -f web1&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 컨테이너에 다른 어플리케이션 실행&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) centos 이미지로 ls 명령어 실행&lt;/h4&gt;
&lt;pre id=&quot;code_1647241549116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --name centos_ls centos:7 ls&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) httpd 이미지로 bash 실행&lt;/h4&gt;
&lt;pre id=&quot;code_1647241565586&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker container run --name web_bash -itd httpd:latest bash&lt;/code&gt;&lt;/pre&gt;</description>
      <category>MLOps/Docker</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/124</guid>
      <comments>https://sjpyo.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 14 Mar 2022 16:08:26 +0900</pubDate>
    </item>
    <item>
      <title>Apache 웹 서버</title>
      <link>https://sjpyo.tistory.com/123</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Web Server&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 소개&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 네트워크를 이용해서 사용자가 요청한 컨텐츠를 제공 (정적인 컨텐츠; html, image 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 동적인 컨텐츠 제공 (별도의 구성 또는 어플리케이션 서버 / 데이터베이스 등을 연동) -&amp;gt; WAS&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Apache / Nginx / IIS 등의 구성방식이 존재&lt;/p&gt;
&lt;pre id=&quot;code_1643871553175&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 기본구성
# 패키지 설치
yum -y install httpd

# 시작
systemctl enable httpd.service
systemctl start httpd
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

# 확인
firefox http://127.0.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;866&quot; data-origin-height=&quot;411&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUHMWV/btrslVEKBdZ/mKqxaUS2R3S2j8B8xr9vEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUHMWV/btrslVEKBdZ/mKqxaUS2R3S2j8B8xr9vEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUHMWV/btrslVEKBdZ/mKqxaUS2R3S2j8B8xr9vEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUHMWV%2FbtrslVEKBdZ%2FmKqxaUS2R3S2j8B8xr9vEk%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;643&quot; height=&quot;305&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;411&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) 3 Tier 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 클라이언트가 요청하면 응답해줄 웹서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹서버 동작에 필요한 어플리케이션 서버&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 어플리케이션이 동작할 때 사용할 데이터가 저장되어 있는 데이터베이스 서버&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;웹서버 구성 시 팁&lt;br /&gt;1. 로드벨런서를 구성해서 웹서버 이중화&lt;br /&gt;2. 웹서버를 통해서만 어플리케이션 서버에 접근할 수 있게 보안 설정&lt;br /&gt;3. 어플리케이션을 통해서만 데이터베이스에 접근할 수 있게 보안 설정&lt;br /&gt;4. 데이터베이스도 이중화 구성&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;3) Apache 서버 구성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설정파일: /etc/httpd 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨텐츠파일: /var/www 디렉토리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 샘플파일: /usr/share/doc/http-XXX 디렉토리&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;2. 가상 호스트 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하나의 물리적인 서버에서 여러 컨텐츠를 IP주소/포트번호/DNS주소 등에 따라서 서로 다르게 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- /etc/httpd/conf.d/XXX.conf 파일 작성 -&amp;gt; 확인 순서는 가나다순&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 설정파일 내용물로는 ServerName, DocumentRoot, Directory 블록 등을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 일반적으로 이름 기반의 가상호스트를 사용 -&amp;gt; DNS서비스 제공 필수 (/etc/hosts 파일)&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;1) 이름 기반 (Name-base virtual host)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- cat /etc/httpd/conf.d/test.conf&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7d5MA/btrsqB6yn1E/z1D5pK0sBH0KetSSv0Gff1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7d5MA/btrsqB6yn1E/z1D5pK0sBH0KetSSv0Gff1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7d5MA/btrsqB6yn1E/z1D5pK0sBH0KetSSv0Gff1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7d5MA%2FbtrsqB6yn1E%2Fz1D5pK0sBH0KetSSv0Gff1%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;327&quot; height=&quot;156&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- DocumentRoot는 각 가상호스트가 사용할 웹 페이지 파일의 경로&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;2) IP 기반 (IP-base virtual host)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 웹 서버가 하나 이상의 네트워크 인터페이스를 가지고 있으면 인터페이스별로 들어온 요청 구분 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7X8Mt/btrskvsLe0R/28RIuuFKHUvkEiQnWYYIH0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7X8Mt/btrskvsLe0R/28RIuuFKHUvkEiQnWYYIH0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7X8Mt/btrskvsLe0R/28RIuuFKHUvkEiQnWYYIH0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7X8Mt%2FbtrskvsLe0R%2F28RIuuFKHUvkEiQnWYYIH0%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;329&quot; height=&quot;157&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 별도의 포트 지정이 없으면 기본 포트 80/TCP 포트 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- nmcli connection modify Static +ipv4.addresses 192.168.100.11/24로 포트 추가&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;3) 포트 기반 (Port-base virtual host)&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbHd9I/btrskum9VRM/sM3fYyYmVphUsXqOObVnsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbHd9I/btrskum9VRM/sM3fYyYmVphUsXqOObVnsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbHd9I/btrskum9VRM/sM3fYyYmVphUsXqOObVnsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbHd9I%2Fbtrskum9VRM%2FsM3fYyYmVphUsXqOObVnsK%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;330&quot; height=&quot;159&quot; data-origin-width=&quot;330&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/K6oKa/btrssBLKE82/Rs5xkuK10ZOXg5IFWYByA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/K6oKa/btrssBLKE82/Rs5xkuK10ZOXg5IFWYByA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/K6oKa/btrssBLKE82/Rs5xkuK10ZOXg5IFWYByA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FK6oKa%2FbtrssBLKE82%2FRs5xkuK10ZOXg5IFWYByA0%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;193&quot; data-origin-width=&quot;545&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- /etc/httpd/conf/httpd.conf 파일의 Listen 설정에 포트 설정을 추가해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 방화벽 수정도 요구됨 (firewall-cmd --add-port=8080/tcp --permanent&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;3. HTTPS&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터를 암호화 해서 주고받는 방식의 프로토콜&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 대칭키 / 비대칭키 암호화 방식을 이용 (하이브리드)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1) 동작 방식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가) Client Hello(클라): 웹 브라우저를 통해 https연결 요청&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나) Server Hello(서버): 서버가 가지고 있는 인증서 전달 (공개키 포함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다) 인증서 확인 및 대칭키 전송 (서버): 서버의 인증서 검증 &amp;amp; 공개키를 서버의 공개키로 암호화하여 전송&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라) 컨텐츠 전송(서버): 서버의 개인키로 복호화 하여 획득 &amp;amp; 연결 종료 시 까지 모든 컨텐츠 대칭키로 암호화하여 전송&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;암호화 방식&lt;br /&gt;원격접속: telnet -&amp;gt; ssh&lt;br /&gt;파일전송: rcp -&amp;gt; scp&lt;br /&gt;웹: http -&amp;gt; https&lt;/blockquote&gt;</description>
      <category>MLOps/Linux</category>
      <author>수달형아</author>
      <guid isPermaLink="true">https://sjpyo.tistory.com/123</guid>
      <comments>https://sjpyo.tistory.com/123#entry123comment</comments>
      <pubDate>Thu, 3 Feb 2022 16:30:41 +0900</pubDate>
    </item>
  </channel>
</rss>