<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>YOOANT</title>
    <link>https://tokyoant.tistory.com/</link>
    <description>学習と記録</description>
    <language>ko</language>
    <pubDate>Mon, 1 Jun 2026 17:59:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>YOOANT</managingEditor>
    <image>
      <title>YOOANT</title>
      <url>https://tistory1.daumcdn.net/tistory/4896025/attach/828f912b4b274c89a57ecdf42711f850</url>
      <link>https://tokyoant.tistory.com</link>
    </image>
    <item>
      <title>접근제어</title>
      <link>https://tokyoant.tistory.com/148</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;/p&gt;</description>
      <category>Linux/モダーンリナックス</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/148</guid>
      <comments>https://tokyoant.tistory.com/148#entry148comment</comments>
      <pubDate>Sun, 17 May 2026 14:49:48 +0900</pubDate>
    </item>
    <item>
      <title>シェルおよびスクリプト</title>
      <link>https://tokyoant.tistory.com/147</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CLI관점에서 리눅스와 상호 작용하는 방법은 두 가지가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 방법은 수동이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉 사 용자가 터미널 앞에 앉아 대화식으로 명령을 입력하고 출력값을 받는 것이다. 이런 즉흥적인 상호 작용은 다음과 같이 매일 셸에서 수행하는 대부분의 작업에 해당한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;디렉터리 몰록 출력, 파일 찾기, 파일 내부 내용 찾기&lt;/li&gt;
&lt;li&gt;디렉터리 간 혹은 원격 시스템 간 파일 복사&lt;/li&gt;
&lt;li&gt;이메일이나 뉴스를 읽거나 터미널에서 트윗 보내기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 방법은 셸이 해석하고 차례로 실행할 수 있는 특수한 종류의 파일에 있는 일련의 명령을 자동으로 처리하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모드를 일컬어 흔히 셸 스크립팅 또는 그냥 스클립팅 이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;▪️터미널&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널, 또는 터미널 에뮤레이터, 또는 소프트 터미널로 불린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널은 텍스트로 된 사용자 인터페이스(UI)를 제공하는 프로그램이다. 즉 터미널은 키보드에서 문자를 읽어 화면에 표시하는 기능을 지원한다. 기본적인 문자 중심의 입려과 출력 외에도 터미널은 커서, 화면 처리, 그리고 잠재적으로 색상 지원이 가능하도록 이스케이프 시퀀스 또는 이스케이프 코드를 지원한다. 예를 들어 Ctrl+H를 누르면 백스페이스가 실행되어 커서 왼쪽에 있는 문자가 삭제된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;▪️셸&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널 내부에서 실행되며 명령 ①&lt;b&gt;인터프리터&lt;/b&gt; 역할을 하는 프로그램이다. 셸은 스트림을 통해 입력,출력을 처리하고, 변수를 지원하며, 사용 가능한 내장 명령이 몇 가지 있으며, 명령 실행 및 상태를 처리하고, 일반적으로 대화식 사용과 스크립트 사용을 모두 지원한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본셸(sh)이 많이 쓰였지만, 최근에는 배시셸(bash)가 많이 쓰인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①명령어 한 줄 입력하면, 그 즉시 읽어서 실행해버리는 방식. 엔터를 치는 순간 셸인터프리터가 그 명령을 해석해서 커널에게 요청한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.스트림&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력과 출력, 줄여서 I/O라고 한다.프로그램에 어떻게 입력을 제공할 수 있을까? 프로그램의 출력값과 터미널이나 파일에 도달하는 위치를 어떻게 제어할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, 셸은 입력과 출력을 위한 세 가지 기본 파일 디스크립터를 모든 프로세스에 제공한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;stdin（FD 0）&lt;/li&gt;
&lt;li&gt;stdout（FD 1）&lt;/li&gt;
&lt;li&gt;stderr（FD 2）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;551&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Sudd/dJMcaiQRh3V/yhEWLWECClmi9weIjS9QFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Sudd/dJMcaiQRh3V/yhEWLWECClmi9weIjS9QFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Sudd/dJMcaiQRh3V/yhEWLWECClmi9weIjS9QFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Sudd%2FdJMcaiQRh3V%2FyhEWLWECClmi9weIjS9QFk%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;400&quot; height=&quot;275&quot; data-origin-width=&quot;801&quot; data-origin-height=&quot;551&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셸이 제공하는 기본값을 사용하지 않으려면(예: stderr이 화면에 출력되지 않고 파일에 저장하려는경우) 스트림을 재지정 할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1778934500215&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// stdout과 stderr을 모두 /dev/null로 재지정해 모든 출력값을 버린다.
$ curl https://example.com &amp;amp;&amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778934620489&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 출력값과 상태값을 다른 파일로 재지정한다.
$ curl https://example.com &amp;gt; /tmp/content.txt 2&amp;gt; /tmp/curl-status&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/tmp/content.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n5YAY/dJMcaayzOWZ/HS7a0VRmOgrPnraG5VRWOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n5YAY/dJMcaayzOWZ/HS7a0VRmOgrPnraG5VRWOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n5YAY/dJMcaayzOWZ/HS7a0VRmOgrPnraG5VRWOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn5YAY%2FdJMcaayzOWZ%2FHS7a0VRmOgrPnraG5VRWOK%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;947&quot; height=&quot;74&quot; data-origin-width=&quot;947&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/tmp/curl-status&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;62&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crp7zH/dJMcagZNXzH/JG9LjxQukyRpYb64sKwtC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crp7zH/dJMcagZNXzH/JG9LjxQukyRpYb64sKwtC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crp7zH/dJMcagZNXzH/JG9LjxQukyRpYb64sKwtC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcrp7zH%2FdJMcagZNXzH%2FJG9LjxQukyRpYb64sKwtC1%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;569&quot; height=&quot;62&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;62&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778934940597&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 대화식으로 값을 입력하고 파일에 저장한다. Ctrl+D를 사용해 캡처를 중지하고 콘텐츠를 저장한다.
$ cat &amp;gt; /tmp/interactive-input.txt&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/tmp/interactvie-input.txt&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;87&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMzomO/dJMcabEee0l/TM5rU0DJmsWK3KaAhxb5SK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMzomO/dJMcabEee0l/TM5rU0DJmsWK3KaAhxb5SK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMzomO/dJMcabEee0l/TM5rU0DJmsWK3KaAhxb5SK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMzomO%2FdJMcabEee0l%2FTM5rU0DJmsWK3KaAhxb5SK%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;301&quot; height=&quot;87&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;87&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778935073601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// stdin에서 값을 읽는 tr 명령을 사용해 모든 단어를 소문자로 만든다.
$ tr &amp;lt; /tmp/curl-status [A-Z] [a-z]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;58&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYsiTm/dJMcacDawDu/BCXtY8wytacDgToEDY4tLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYsiTm/dJMcacDawDu/BCXtY8wytacDgToEDY4tLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYsiTm/dJMcacDawDu/BCXtY8wytacDgToEDY4tLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYsiTm%2FdJMcacDawDu%2FBCXtY8wytacDgToEDY4tLK%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;560&quot; height=&quot;58&quot; data-origin-width=&quot;560&quot; data-origin-height=&quot;58&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778935634050&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// curl을 사용해 URL을 다운로드하고 stderr에서 출력하는 상태값을 버린다. curl의 stdout값은 -l 옵션을 사용하여 행의 개수를 계산하는 wc의 stdin에 제공된다.
$ curl https://example.com 2&amp;gt; /dev/null | \
wc -l&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFU1rC/dJMcaja5TWU/BhfJK0FfSrtXT1JkcMSKF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFU1rC/dJMcaja5TWU/BhfJK0FfSrtXT1JkcMSKF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFU1rC/dJMcaja5TWU/BhfJK0FfSrtXT1JkcMSKF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFU1rC%2FdJMcaja5TWU%2FBhfJK0FfSrtXT1JkcMSKF1%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;365&quot; height=&quot;45&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.변수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셸과 관련해 자주&amp;nbsp; 접하게 되는 용어가 변수다. 값을 하드코딩하고 싶지 않거나 불가능할 때는 언제든 변수를 사용해 값을 저장하고 변경할 수 있다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;리눅스가 노출하는 구성 항목을 처리하려는 경우(예: 셸이 $PATH 변수에 저장된 실행 파일을 찾는 위치). 이는 변수를 읽기/쓰기할 수 있는 일종의 인터페이스다.&lt;/li&gt;
&lt;li&gt;스크립트에서 사용자에게 값을 대화 형식으로 질문하려는 경우&lt;/li&gt;
&lt;li&gt;긴 값을 한 번 정의해 입력을 줄이려는 경우(예:HTTP API의 URL).이 사용 사례는 변수를 선언한 후 값을 변경하지 않기 때문에 대략적으로 프로그램 언어의 const값에 해당한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수는 다음과 같이 두 가지 종류로 나뉜다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-1.환경변수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셸 전체의 설정. env 명령어로 목록을 나열한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2-2.셸 변수&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 실행 상황에서 유효하다. bash에서 set 명령어로 목록을 나열할 수 있다. 하위 프로세스는 셸 변수를 상속하지 않는다.&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;bash에서 export 명령어를 사용해 환경변수를 만들 수 있다. 변수의 값에 접근하고 싶을 때는 앞에 $를 붙이고, 변수를 제거하고 싶을 때는 unset을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1778936409986&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MY_VAR이라는 셸 변수를 생성하고 값을 42로 지정한다.
$ MY_VAR=42
// 셸 변수를 나열하고 MY_VAR를 필터링한다.
$ set | grep MY_VAR&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;28&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VqQQo/dJMcaak0g7c/LRdL7KlkbDdRVY52hPZXn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VqQQo/dJMcaak0g7c/LRdL7KlkbDdRVY52hPZXn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VqQQo/dJMcaak0g7c/LRdL7KlkbDdRVY52hPZXn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVqQQo%2FdJMcaak0g7c%2FLRdL7KlkbDdRVY52hPZXn1%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;200&quot; height=&quot;28&quot; data-origin-width=&quot;200&quot; data-origin-height=&quot;28&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778936713910&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MY_GLOBAL_VAR이라는 새 환경변수를 만든다.
$ export MY_GLOBAL_VAR=&quot;fun with vars&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778936939484&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 셸 변수를 나열하고 MY_로 시작하는 모든 변수를 필터링해본다. 예상대로 이전 단계에서 만든 두 변수가 모두 표시된다.
$ set | grep 'MY_*'
// 환경변수를 나열한다. 예상대로 MY_GLOBAL_VAR이 표시된다.
$ env | grep 'MY_*'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;214&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SJQuz/dJMcacwomA1/DqrfEqM9kPAlz8f8kwJkYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SJQuz/dJMcacwomA1/DqrfEqM9kPAlz8f8kwJkYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SJQuz/dJMcacwomA1/DqrfEqM9kPAlz8f8kwJkYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSJQuz%2FdJMcacwomA1%2FDqrfEqM9kPAlz8f8kwJkYk%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;214&quot; height=&quot;45&quot; data-origin-width=&quot;214&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;214&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ADjfX/dJMcaffBAaJ/hxVdPIziPLXFKMkzqOHCl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ADjfX/dJMcaffBAaJ/hxVdPIziPLXFKMkzqOHCl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ADjfX/dJMcaffBAaJ/hxVdPIziPLXFKMkzqOHCl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FADjfX%2FdJMcaffBAaJ%2FhxVdPIziPLXFKMkzqOHCl0%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;214&quot; height=&quot;29&quot; data-origin-width=&quot;214&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778937321233&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 새 셸 세션, 즉 MY_VAR를 상속하지 않은 현재 셸 세션의 자식 프로세스를 만든다.
$ zsh (MacOS)
$ bash
// 현재 자식 프로세스에 있기 때문에 셸 변수를 나열하면 MY_GLOBAL_VAR만 나온다.
$ set | grep &quot;MY_*&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccrZ0P/dJMcafGEz8f/7iExoCNrnHc3olRG36Cc6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccrZ0P/dJMcafGEz8f/7iExoCNrnHc3olRG36Cc6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccrZ0P/dJMcafGEz8f/7iExoCNrnHc3olRG36Cc6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccrZ0P%2FdJMcafGEz8f%2F7iExoCNrnHc3olRG36Cc6k%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;493&quot; height=&quot;157&quot; data-origin-width=&quot;493&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.종료상태&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셸은 종료 상태 라고 하는 것을 사용해 명령 실행 완료를 명령 호출자에게 알린다. 일반적으로 리눅스 명령은 종료될 때 상태를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종료 상태값 0은 명령이 오류 없이 성공적으로 실행됐음을 의미하는 반면, 1에서 255 사이의 값은 실패를 나타낸다. 종료 상태를 확인 하려면 echo $?를 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;4.내장명령어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셸에는 여러 내장 명령어가 있다. 몇 가지 유용한 예로는 yes,echo,cat,read가 있다. help명령어를 사용하면 내장 명령어 목록을 나열할 수 있다. 그러나 그 외 모든 것은 보통 /usr/bin(사용자 명령의 겨우)이나 /usr/sbin(관리 명령의 경우)에 있는 셸 외부 프로그램이라는 점을 기억하자. 실행 파일을 어디에서 찾을지 어떻게 알 수 있을까? 다음과 같은 몇 가지 방법이 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1778938790650&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ which ls&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;138&quot; data-origin-height=&quot;29&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkWy9x/dJMcaayzPT9/7Stjg6ranSYPOkLkM1SYlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkWy9x/dJMcaayzPT9/7Stjg6ranSYPOkLkM1SYlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkWy9x/dJMcaayzPT9/7Stjg6ranSYPOkLkM1SYlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkWy9x%2FdJMcaayzPT9%2F7Stjg6ranSYPOkLkM1SYlk%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;138&quot; height=&quot;29&quot; data-origin-width=&quot;138&quot; data-origin-height=&quot;29&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1778938826017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ type ls&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kM97d/dJMcahkbJmb/LA4vkOvINQF83YJYdTBAxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kM97d/dJMcahkbJmb/LA4vkOvINQF83YJYdTBAxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kM97d/dJMcahkbJmb/LA4vkOvINQF83YJYdTBAxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkM97d%2FdJMcahkbJmb%2FLA4vkOvINQF83YJYdTBAxk%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;168&quot; height=&quot;30&quot; data-origin-width=&quot;168&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;5.작업제어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업제어는 대부분의 셸이 지원하는 기능이다. 기본적으로 명령을 입력하면 그 명령은 일반적으로 화면과 키보드를 제어하며, 이를 '포어그라운드에서 실행된다'고 한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778995581159&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 명령 끝에 &amp;amp;를 넣으면 백그라운드에서 명령이 실행된다.
$ watch -n 5 &quot;ls&quot; &amp;amp;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;199&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6f23v/dJMcagldSj5/a1An0BqyLCePcf9wqE0Rv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6f23v/dJMcagldSj5/a1An0BqyLCePcf9wqE0Rv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6f23v/dJMcagldSj5/a1An0BqyLCePcf9wqE0Rv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6f23v%2FdJMcagldSj5%2Fa1An0BqyLCePcf9wqE0Rv1%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;199&quot; height=&quot;32&quot; data-origin-width=&quot;199&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778995720859&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 모든 작업(job)의 목록을 출력한다.
$ jobs&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JRsV0/dJMcahqWqpu/vhQ5cKyp08wQvRdHQRDD30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JRsV0/dJMcahqWqpu/vhQ5cKyp08wQvRdHQRDD30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JRsV0/dJMcahqWqpu/vhQ5cKyp08wQvRdHQRDD30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJRsV0%2FdJMcahqWqpu%2FvhQ5cKyp08wQvRdHQRDD30%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;328&quot; height=&quot;33&quot; data-origin-width=&quot;328&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1778995797617&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// fg명령을 사용하면 프로세스를 포어그라운드로 가져올 수 있다. watch 명령을 종료하려면 Ctrl+C를 사용한다.
$ fg&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;935&quot; data-origin-height=&quot;159&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IuFLq/dJMcagFz7N6/WdGNckZTRurhZKzgVsjPIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IuFLq/dJMcagFz7N6/WdGNckZTRurhZKzgVsjPIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IuFLq/dJMcagFz7N6/WdGNckZTRurhZKzgVsjPIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIuFLq%2FdJMcagFz7N6%2FWdGNckZTRurhZKzgVsjPIK%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;935&quot; height=&quot;159&quot; data-origin-width=&quot;935&quot; data-origin-height=&quot;159&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;▪️일반작업&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1.자주 사용하는 명령어 단축하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스의 기본 개념 중 한 가지는 가장 자주 사용하는 명령은 빠르게 입력해야 하므로 최소한의 노력만 들여야 한다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우에는 쿠버네티스의 &quot;kubectl&quot;을 많이 사용하기 때문에, &quot;kubectl&quot; 대신 &quot;k&quot;를 입력한다. 이런 방법을 일컬어 배시 셸에서는 앨리어스라고 부른다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.행 탐색과 조작&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;셸 프롬포트에 명령을 입력할 때는 행을 탐색하거나 행을 조작하는등 다양한 작업을 하곤 한다. 하기의 표는 일반적으로 사용되는 셸의 단축키 목록이다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 306px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;동작&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;명령어&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;비고&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;행의 시작으로 커서 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+a&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;행의 마지막으로 커서 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+e&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서를 한 문자 앞으로 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+f&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서를 한 문자 뒤로 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+b&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서를 한 단어 앞으로 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Alt+f&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;왼쪽 Alt 키에서만 작동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서를 한 단어 뒤로 이동&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Alt+b&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;현재 문자 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+d&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서 왼쪽 문자 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+h&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서 왼쪽 단어 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+w&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서 오른쪽의 모든 항목 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+k&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;커서 왼쪽의 모든 항목 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+u&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;화면 지우기&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+l&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;명령어 취소&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+c&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;실행 취소&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+_&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;기록 검색&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+r&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;검색 취소&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;Ctrl+g&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.파일 내용 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단 한 행의 텍스트를 추가하기 위해 매번 vi 같은 편집기를 실행하고 싶지는 않을 것이다. 또한 가끔은 편집기 사용이 불가능할 때도 있다. 하기는 텍스트 내용을 조작하는 몇 가지 방법이다.&lt;/p&gt;
&lt;pre id=&quot;code_1779103610138&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// echo 출력을 재지정해 파일을 생성한다.
$ echo &quot;First line&quot; &amp;gt; ./something&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;72&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s3ZXG/dJMcagyLKwM/cvSr0x8YkqUAiUZ4k91041/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s3ZXG/dJMcagyLKwM/cvSr0x8YkqUAiUZ4k91041/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s3ZXG/dJMcagyLKwM/cvSr0x8YkqUAiUZ4k91041/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3ZXG%2FdJMcagyLKwM%2FcvSr0x8YkqUAiUZ4k91041%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;301&quot; height=&quot;72&quot; data-origin-width=&quot;301&quot; data-origin-height=&quot;72&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1779103800128&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// &amp;gt;&amp;gt; 연산자를 사용해 파일에 한 행을 추가한 후 내용을 확인한다.
$ echo &quot;Second line&quot; &amp;gt;&amp;gt; ./something &amp;amp;&amp;amp; \
cat something&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;61&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b83sWK/dJMb99TXyuV/n6ji3svuucOpzbijOBMdw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b83sWK/dJMb99TXyuV/n6ji3svuucOpzbijOBMdw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b83sWK/dJMb99TXyuV/n6ji3svuucOpzbijOBMdw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb83sWK%2FdJMb99TXyuV%2Fn6ji3svuucOpzbijOBMdw0%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;343&quot; height=&quot;61&quot; data-origin-width=&quot;343&quot; data-origin-height=&quot;61&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1779103880611&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// sed를 사용해 파일 내용을 바꾸고 stdout으로 출력한다.
$ sed 's/line/LINE/' ./something&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;47&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HO1y9/dJMcaiQSwPG/snRRYfGAa7Rp2lEZDCr7E1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HO1y9/dJMcaiQSwPG/snRRYfGAa7Rp2lEZDCr7E1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HO1y9/dJMcaiQSwPG/snRRYfGAa7Rp2lEZDCr7E1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHO1y9%2FdJMcaiQSwPG%2FsnRRYfGAa7Rp2lEZDCr7E1%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;292&quot; height=&quot;47&quot; data-origin-width=&quot;292&quot; data-origin-height=&quot;47&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1779103981877&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// here 문서를 사용해 파일을 생성한다.
$ cat &amp;lt;&amp;lt; 'EOF' &amp;gt; ./another
First line
Second line
Thrid line
EOF&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mK5kl/dJMcadPxw9D/KkdqwXkL6kmanWxfFP7JkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mK5kl/dJMcadPxw9D/KkdqwXkL6kmanWxfFP7JkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mK5kl/dJMcadPxw9D/KkdqwXkL6kmanWxfFP7JkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmK5kl%2FdJMcadPxw9D%2FKkdqwXkL6kmanWxfFP7JkK%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;127&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1779104144543&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 생성한 파일의 차이점을 보여준다.
$ diff -y ./something ./another&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;59&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chqwcZ/dJMcaak1ooh/sKAXgPgJBQrXYAaAJmGL01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chqwcZ/dJMcaak1ooh/sKAXgPgJBQrXYAaAJmGL01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chqwcZ/dJMcaak1ooh/sKAXgPgJBQrXYAaAJmGL01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchqwcZ%2FdJMcaak1ooh%2FsKAXgPgJBQrXYAaAJmGL01%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;534&quot; height=&quot;59&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;59&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4.긴 파일 보기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;긴 파일, 즉 셸의 한 화면에 표시할 수 없을 만큼 행 수가 많은 파일의 경우 less 또는 bat과 같은 페이저를 사용할 수 있다.페이지 나누기 기능을 활용하면 프로그램은 출력을 분할해서 화면에 나타낼 수 있는 분량에 맞게 페이지를 나눠 표시하고, 각 페이지를 탐색할 수 있는 명령어를 제공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;긴 파일을 처리하는 또 다른 방법은 예를들어 처음 몇 행처럼 파일의 선택 영역만 표시하는 것이다. 이럴 때 편리하게 쓸 수 있는 명령은 두 가지가 있다. 바로 head와 tail이다.&lt;/p&gt;
&lt;pre id=&quot;code_1779104416450&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ for i in {1..100} ; do echo $i &amp;gt;&amp;gt; ./longfile ; done
$ head -5 ./longfile&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;100&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HqHVX/dJMcaiclnU3/K5OTg9s2iDxkPHKm3rPjbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HqHVX/dJMcaiclnU3/K5OTg9s2iDxkPHKm3rPjbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HqHVX/dJMcaiclnU3/K5OTg9s2iDxkPHKm3rPjbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHqHVX%2FdJMcaiclnU3%2FK5OTg9s2iDxkPHKm3rPjbk%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;436&quot; height=&quot;100&quot; data-origin-width=&quot;436&quot; data-origin-height=&quot;100&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1779104561287&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// tail을 이용해 로그의 파일의 마지막을 출력한다. -f 옵션은 따르다(follow)라는 의미로, 결과를 지속적으로 확인하거나 자동 업데이트함을 의미한다.
$ sudo tail -f &amp;lt;log파일등&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5.날짜와 시간 처리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;date 명령은 고유한 파일 이름을 생성할 때 유용하다. 유닉스 타임스탬프등 여러 형식으로 날짜를 생성하고 다양한 날짜와 시간 형식 간에 변환할 수도 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1779104633262&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 유닉스 타임스탬프를 생성한다.
$ date +%s&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxhWBC/dJMcahYKT70/0lH1GRkYLjbYtnKckaLEj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxhWBC/dJMcahYKT70/0lH1GRkYLjbYtnKckaLEj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxhWBC/dJMcahYKT70/0lH1GRkYLjbYtnKckaLEj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxhWBC%2FdJMcahYKT70%2F0lH1GRkYLjbYtnKckaLEj1%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;142&quot; height=&quot;33&quot; data-origin-width=&quot;142&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;pre id=&quot;code_1779104736103&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 유닉스 타임스탬프를 사람이 읽을 수 있는 날짜로 변환한다.
$ date '+%Y/%m/%d %H:%M:%S'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;30&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbWqpE/dJMcaaSTo0l/EQj7Hl0CKaM1nlwiFS5VK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbWqpE/dJMcaaSTo0l/EQj7Hl0CKaM1nlwiFS5VK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbWqpE/dJMcaaSTo0l/EQj7Hl0CKaM1nlwiFS5VK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbWqpE%2FdJMcaaSTo0l%2FEQj7Hl0CKaM1nlwiFS5VK1%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;259&quot; height=&quot;30&quot; data-origin-width=&quot;259&quot; data-origin-height=&quot;30&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&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;/p&gt;</description>
      <category>Linux/モダーンリナックス</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/147</guid>
      <comments>https://tokyoant.tistory.com/147#entry147comment</comments>
      <pubDate>Sat, 16 May 2026 17:59:35 +0900</pubDate>
    </item>
    <item>
      <title>ExternalName</title>
      <link>https://tokyoant.tistory.com/146</link>
      <description></description>
      <category>k8s/APP公開</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/146</guid>
      <comments>https://tokyoant.tistory.com/146#entry146comment</comments>
      <pubDate>Wed, 13 May 2026 23:45:24 +0900</pubDate>
    </item>
    <item>
      <title>NodePort、LoadBalancer</title>
      <link>https://tokyoant.tistory.com/145</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.NodePort&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;524&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXtT9U/dJMcaiQONly/a7hk9vKvDxI83kpTEB30hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXtT9U/dJMcaiQONly/a7hk9vKvDxI83kpTEB30hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXtT9U/dJMcaiQONly/a7hk9vKvDxI83kpTEB30hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXtT9U%2FdJMcaiQONly%2Fa7hk9vKvDxI83kpTEB30hk%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;989&quot; height=&quot;524&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;524&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;1024&quot; data-origin-height=&quot;566&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnwdmZ/dJMcagMiLid/5W7GanAKe3bedOmtvsr0Pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnwdmZ/dJMcagMiLid/5W7GanAKe3bedOmtvsr0Pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnwdmZ/dJMcagMiLid/5W7GanAKe3bedOmtvsr0Pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnwdmZ%2FdJMcagMiLid%2F5W7GanAKe3bedOmtvsr0Pk%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;1024&quot; height=&quot;566&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;566&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;セレクター（spec.selector）とテンプレート（spec.template.metadata.labels）は、&lt;b data-index-in-node=&quot;60&quot; data-path-to-node=&quot;0&quot;&gt;必ず一致していなければならない&lt;/b&gt;。Deploymentはこのセレクターを通じて、自分が管理すべきPodを探し出すからだ。もしこれらが異なっていると、デプロイ時にバリデーションエラー（Validation Error）が発生する。&lt;/li&gt;
&lt;li&gt;一つのYAMLファイル内に複数のリソース（DeploymentやServiceなど）を定義する場合、&lt;b data-index-in-node=&quot;50&quot; data-path-to-node=&quot;1&quot;&gt;「---」（ダッシュ3つ）は必須&lt;/b&gt;である。&lt;/li&gt;
&lt;li&gt;Serviceの spec.selector は、Deploymentによって生成された&lt;b data-index-in-node=&quot;44&quot; data-path-to-node=&quot;2&quot;&gt;Podのラベル（template.metadata.labels）を指す必要がある&lt;/b&gt;。Deployment自体のラベルではなく、「Pod」のラベルであるという点が核心だ。なぜなら、ServiceはDeploymentという「管理者」を見るのではなく、実際に稼働している「Pod」たちを直接見ているからである。&lt;/li&gt;
&lt;/ul&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.LoadBalancer&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddR9Xh/dJMcaakYdD3/UvleN0DGxAXWUfp5H8Ihn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddR9Xh/dJMcaakYdD3/UvleN0DGxAXWUfp5H8Ihn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddR9Xh/dJMcaakYdD3/UvleN0DGxAXWUfp5H8Ihn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddR9Xh%2FdJMcaakYdD3%2FUvleN0DGxAXWUfp5H8Ihn0%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;997&quot; height=&quot;545&quot; data-origin-width=&quot;997&quot; data-origin-height=&quot;545&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;1000&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ET8mG/dJMcadooM9I/DLdtsUeBJGN5Xvke0XUlPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ET8mG/dJMcadooM9I/DLdtsUeBJGN5Xvke0XUlPK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ET8mG/dJMcadooM9I/DLdtsUeBJGN5Xvke0XUlPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FET8mG%2FdJMcadooM9I%2FDLdtsUeBJGN5Xvke0XUlPK%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;1000&quot; height=&quot;541&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;541&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>k8s/APP公開</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/145</guid>
      <comments>https://tokyoant.tistory.com/145#entry145comment</comments>
      <pubDate>Tue, 12 May 2026 21:56:36 +0900</pubDate>
    </item>
    <item>
      <title>Port-forward、HostPort、hostNetwork</title>
      <link>https://tokyoant.tistory.com/144</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;0&quot;&gt;手軽にアプリを公開する方法。&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-1.Port-forward&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-1.検証pod作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778586717114&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: fwd-chk-hn
spec:
  containers:
  - name: chk-hn 
    image: sysnet4admin/chk-hn&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-2.pod確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ajh8I/dJMcabRFhkQ/Bvm2AAuKIzzH9hpFjRul3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ajh8I/dJMcabRFhkQ/Bvm2AAuKIzzH9hpFjRul3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ajh8I/dJMcabRFhkQ/Bvm2AAuKIzzH9hpFjRul3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAjh8I%2FdJMcabRFhkQ%2FBvm2AAuKIzzH9hpFjRul3K%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;335&quot; height=&quot;76&quot; data-origin-width=&quot;335&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-3.port-forward設定&lt;/h4&gt;
&lt;pre id=&quot;code_1778586933935&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;・Terminal①
# k port-forward fwd-chk-hn 8080:80&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-4.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;・Terminal②&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s3tUS/dJMcaciJ2JK/tYw9o7rnPmes76JmRyKksK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s3tUS/dJMcaciJ2JK/tYw9o7rnPmes76JmRyKksK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s3tUS/dJMcaciJ2JK/tYw9o7rnPmes76JmRyKksK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs3tUS%2FdJMcaciJ2JK%2FtYw9o7rnPmes76JmRyKksK%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;221&quot; height=&quot;147&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;・Terminal①&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;102&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddAT40/dJMcaiwvYZd/ZhmyqwcSLxSoJNUa9hlxf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddAT40/dJMcaiwvYZd/ZhmyqwcSLxSoJNUa9hlxf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddAT40/dJMcaiwvYZd/ZhmyqwcSLxSoJNUa9hlxf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FddAT40%2FdJMcaiwvYZd%2FZhmyqwcSLxSoJNUa9hlxf0%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;257&quot; height=&quot;102&quot; data-origin-width=&quot;257&quot; data-origin-height=&quot;102&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※port-forwardは運用（Production）のためのツールではなく、徹底して「デバッグ」や「開発」のための、一時的な通信路である。&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-2.Hostport&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-2-1.検証pod作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778588568988&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: hp-chk-hn 
spec:
  containers:
  - name: chk-hn
    image: sysnet4admin/chk-hn
    ports:
    - containerPort: 80
      hostPort: 8080&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-2-2.pod確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctPiR5/dJMcai4jcZQ/pz6UIk8wMDLiE5U7UA570K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctPiR5/dJMcai4jcZQ/pz6UIk8wMDLiE5U7UA570K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctPiR5/dJMcai4jcZQ/pz6UIk8wMDLiE5U7UA570K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctPiR5%2FdJMcai4jcZQ%2Fpz6UIk8wMDLiE5U7UA570K%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;331&quot; height=&quot;74&quot; data-origin-width=&quot;331&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-2-3.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※&lt;b data-path-to-node=&quot;2&quot; data-index-in-node=&quot;0&quot;&gt;この方式で検証を行うには、Podがどのノードに配置されたかを把握し、該当ノードのIPアドレスを特定する必要がある。&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-path-to-node=&quot;2&quot; data-index-in-node=&quot;58&quot;&gt;したがって、hostportは（実用的には）使用できず、概念として残るのみとなっている。&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①配置ノードの確認&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dna/zOIyq/dJMcabYuQ10/AAAAAAAAAAAAAAAAAAAAAN0hfqIJ96-I3Kn6eT8fT6innDioOsYTwZDGWOzTmy6I/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=CuhBgBWy87%2BUn%2BgqAzL0N5ZQllw%3D&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;50&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;②k8s-worker-1のIP確認&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/otB9n/dJMcafNn5vJ/LlAqcfoK5njsPda19n5GO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/otB9n/dJMcafNn5vJ/LlAqcfoK5njsPda19n5GO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/otB9n/dJMcafNn5vJ/LlAqcfoK5njsPda19n5GO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FotB9n%2FdJMcafNn5vJ%2FLlAqcfoK5njsPda19n5GO1%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;933&quot; height=&quot;127&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;127&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;243&quot; data-origin-height=&quot;33&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chbX3B/dJMb997qI2k/bJxgvjEPJNaFc6x4zEKkVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chbX3B/dJMb997qI2k/bJxgvjEPJNaFc6x4zEKkVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chbX3B/dJMb997qI2k/bJxgvjEPJNaFc6x4zEKkVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchbX3B%2FdJMb997qI2k%2FbJxgvjEPJNaFc6x4zEKkVK%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;243&quot; height=&quot;33&quot; data-origin-width=&quot;243&quot; data-origin-height=&quot;33&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-3.HostNetwork&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3-1.検証pod作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778589260261&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  name: hnet-chk-hn
spec:
  hostNetwork: true
  containers:
    - name: chk-hn
      image: sysnet4admin/chk-hn&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3-2.pod確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byMmoV/dJMcai4jc8F/lWquZsyFMjckAmSIb3wNJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byMmoV/dJMcai4jc8F/lWquZsyFMjckAmSIb3wNJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byMmoV/dJMcai4jc8F/lWquZsyFMjckAmSIb3wNJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyMmoV%2FdJMcai4jc8F%2FlWquZsyFMjckAmSIb3wNJK%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;344&quot; height=&quot;73&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3-3.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;2&quot;&gt;この方式で検証を行うには、Podがどのノードに配置されたかを把握し、該当ノードのIPアドレスを特定する必要がある。&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;58&quot; data-path-to-node=&quot;2&quot;&gt;したがって、hostNetworkは（実用的には）使用できず、概念として残るのみとなっている。&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①配置ノードの確認&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;※hostNetworkはノードのIPを占有して使用するため、PodのIPはPodが配置されたノードのIP（ホストIP）となる。&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dna/cRJv8k/dJMcaciJ3cu/AAAAAAAAAAAAAAAAAAAAAAhfxXmdXtm0mZ2G8ZH7AkteNRXfINAMeyiSSanXZiJ5/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1780239599&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=3OH17Ocb42rCSe4B%2FezR4rsDx%2BE%3D&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;46&quot; data-is-animation=&quot;false&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;②k8s-worker-1のIP確認&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/otB9n/dJMcafNn5vJ/LlAqcfoK5njsPda19n5GO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/otB9n/dJMcafNn5vJ/LlAqcfoK5njsPda19n5GO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/otB9n/dJMcafNn5vJ/LlAqcfoK5njsPda19n5GO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FotB9n%2FdJMcafNn5vJ%2FLlAqcfoK5njsPda19n5GO1%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;933&quot; height=&quot;127&quot; data-origin-width=&quot;933&quot; data-origin-height=&quot;127&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;32&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI57H1/dJMcaiwvZrr/GUSabIwH0SDfQ5vPgdyg4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI57H1/dJMcaiwvZrr/GUSabIwH0SDfQ5vPgdyg4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI57H1/dJMcaiwvZrr/GUSabIwH0SDfQ5vPgdyg4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI57H1%2FdJMcaiwvZrr%2FGUSabIwH0SDfQ5vPgdyg4K%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;222&quot; height=&quot;32&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;32&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;※これまで扱った port-forward、hostPort、hostNetwork は、すべて「特定のノード」や「特定のポッド」に強く依存した方式である。 実務（運用環境）では、ポッドがダウンして別のノードに再配置されることもあれば、ノードが数十台に及ぶこともあるため、これらの方式では対応が不可能だ。 したがって、これらを補完しシステム化したものが、先に述べた &lt;span style=&quot;color: #ee2323;&quot;&gt;Service (NodePort, LoadBalancer)&lt;/span&gt; や &lt;span style=&quot;color: #ee2323;&quot;&gt;Ingress&lt;/span&gt; である。&lt;/span&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>k8s/APP公開</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/144</guid>
      <comments>https://tokyoant.tistory.com/144#entry144comment</comments>
      <pubDate>Sun, 10 May 2026 19:31:36 +0900</pubDate>
    </item>
    <item>
      <title>DaemonSet、StatefulSet</title>
      <link>https://tokyoant.tistory.com/143</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.DaemonSet&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;クラスター内の全ノード（または特定のノード）に、Podを必ず一つずつデプロイするリスーすである。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dwiN6c/dJMcaffv8m6/fzdRVXc4AdvEtJHciOkfUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dwiN6c/dJMcaffv8m6/fzdRVXc4AdvEtJHciOkfUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dwiN6c/dJMcaffv8m6/fzdRVXc4AdvEtJHciOkfUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdwiN6c%2FdJMcaffv8m6%2FfzdRVXc4AdvEtJHciOkfUK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;993&quot; height=&quot;531&quot; data-origin-width=&quot;993&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;DaemonSetとDeploymentを比較すると、replicasの有無を除けば構成は同一である。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-1.DaemonSet作成&lt;/h3&gt;
&lt;pre id=&quot;code_1778335497419&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: DaemonSet
metadata:
  labels:
    app: ds-nginx 
  name: ds-nginx
spec:
  selector:
    matchLabels:
      app: po-nginx 
  template:
    metadata:
      labels:
        app: po-nginx
    spec:
      containers:
      - name: nginx 
        image: nginx&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-2.動作確認&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmCkty/dJMcajoyVK5/hh3oFtiM4vVG8v2KTONYTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmCkty/dJMcajoyVK5/hh3oFtiM4vVG8v2KTONYTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmCkty/dJMcajoyVK5/hh3oFtiM4vVG8v2KTONYTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmCkty%2FdJMcajoyVK5%2Fhh3oFtiM4vVG8v2KTONYTk%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;823&quot; height=&quot;99&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①replicasが設定されていないにもかかわらず、Podが各ワーカーノードにデプロイされた。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※新規ワーカーノードが追加された場合、DaemonSetによって新規ノードにも自動的にデプロイされる。&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2.StatefulSet&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Podごとに「固有の識別子（名前）」と「専用ストレージ（データ）」を付与し、再起動してもそれらが維持されるように管理するリソースである。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAwwlm/dJMcaiXwopz/d23VpzkvZ8IGmh9z0O7Mw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAwwlm/dJMcaiXwopz/d23VpzkvZ8IGmh9z0O7Mw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAwwlm/dJMcaiXwopz/d23VpzkvZ8IGmh9z0O7Mw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAwwlm%2FdJMcaiXwopz%2Fd23VpzkvZ8IGmh9z0O7Mw1%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;989&quot; height=&quot;514&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;StatefulSetとDeploymentを比較すると、serviceNameの有無を除けば構成は同一である。&lt;/li&gt;
&lt;li&gt;serviceNameの指定は強制ルール（必須項目）である。&lt;/li&gt;
&lt;li&gt;StatefulSetでデプロイすると、Podは正確な順序に基づいた固定の名前を持つ。&lt;/li&gt;
&lt;li&gt;k8sエコシステムにおいて、唯一「状態（ステート）」を持つ独立した存在である。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2-1.StatefulSet作成&lt;/h3&gt;
&lt;pre id=&quot;code_1778337235236&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: sts-chk-hn
spec:
  replicas: 3
  serviceName: sts-svc-domain #statefulset need it
  selector:
    matchLabels:
      app: sts
  template:
    metadata:
      labels:
        app: sts
    spec:
      containers:
      - name: chk-hn
        image: sysnet4admin/chk-hn&lt;/code&gt;&lt;/pre&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2-2.動作確認&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnhgjW/dJMcadaO8L0/8rAkQ9y70MC2YQxUHYi8I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnhgjW/dJMcadaO8L0/8rAkQ9y70MC2YQxUHYi8I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnhgjW/dJMcadaO8L0/8rAkQ9y70MC2YQxUHYi8I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnhgjW%2FdJMcadaO8L0%2F8rAkQ9y70MC2YQxUHYi8I1%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;349&quot; height=&quot;117&quot; data-origin-width=&quot;349&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①0番から順に（順次）生成された。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;213&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oiLam/dJMcaf7ADOK/ue1VNzYe9s26s0zfy20151/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oiLam/dJMcaf7ADOK/ue1VNzYe9s26s0zfy20151/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oiLam/dJMcaf7ADOK/ue1VNzYe9s26s0zfy20151/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoiLam%2FdJMcaf7ADOK%2Fue1VNzYe9s26s0zfy20151%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;400&quot; height=&quot;213&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;213&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;②scaleoutすると、順次（順番に）増えていく。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTr7e1/dJMcad2YBgH/5HNaKZt6Qt1FiZyOuRmad1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTr7e1/dJMcad2YBgH/5HNaKZt6Qt1FiZyOuRmad1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTr7e1/dJMcad2YBgH/5HNaKZt6Qt1FiZyOuRmad1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTr7e1%2FdJMcad2YBgH%2F5HNaKZt6Qt1FiZyOuRmad1%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;388&quot; height=&quot;647&quot; data-origin-width=&quot;388&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③scaleinすると、順次（順番に）減っていく。&lt;/p&gt;</description>
      <category>k8s/APP配布</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/143</guid>
      <comments>https://tokyoant.tistory.com/143#entry143comment</comments>
      <pubDate>Sat, 9 May 2026 22:55:38 +0900</pubDate>
    </item>
    <item>
      <title>Job、CronJob</title>
      <link>https://tokyoant.tistory.com/142</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.Job&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-1.成功jobおよび動作確認&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-1.事前準備としてnginxおよびserviceを作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778314652760&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Job確認の事前準備としてnginxとsvcを生成
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: nginx
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
---
apiVersion: v1
kind: Service
metadata:
  name: nginx 
spec:
  selector:
    run: nginx  
  ports:
    - name: http
      port: 80
      targetPort: 80
  type: ClusterIP&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-2.作成確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuLhu9/dJMcacpwEkn/s3zl6aZPwZkSEszfLiHClK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuLhu9/dJMcacpwEkn/s3zl6aZPwZkSEszfLiHClK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuLhu9/dJMcacpwEkn/s3zl6aZPwZkSEszfLiHClK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuLhu9%2FdJMcacpwEkn%2Fs3zl6aZPwZkSEszfLiHClK%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;559&quot; height=&quot;103&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-3.Job作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778314387040&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: job-curl-succ
spec:
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: [&quot;curlchk&quot;,  &quot;nginx&quot;]
      restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1-1-4.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-1-2에서 확인했듯이 nginx와 서비스가 동작중이고 정상적으로 상태확인이 성공했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;117&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ecSIDg/dJMcagrUpIk/7klU35tEHSQ08ekEBc5cB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ecSIDg/dJMcagrUpIk/7klU35tEHSQ08ekEBc5cB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ecSIDg/dJMcagrUpIk/7klU35tEHSQ08ekEBc5cB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FecSIDg%2FdJMcagrUpIk%2F7klU35tEHSQ08ekEBc5cB1%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;448&quot; height=&quot;117&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;117&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-2.失敗jobおよび動作確認&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-2-1.Job作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778318823259&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: job-curl-fail
spec:
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: [&quot;curlchk&quot;,  &quot;hwan&quot;]  // nginxではなく、hwanを入力
      restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-2-2.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;hwan은 동작중이지 않다는 에러메세지가 출력됐다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgMrKq/dJMcaaFgAvd/X8LQeMx39ple3QvkfHK5Yk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgMrKq/dJMcaaFgAvd/X8LQeMx39ple3QvkfHK5Yk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgMrKq/dJMcaaFgAvd/X8LQeMx39ple3QvkfHK5Yk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgMrKq%2FdJMcaaFgAvd%2FX8LQeMx39ple3QvkfHK5Yk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;113&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-3.job作成失敗および動作確認&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3-1.Job作成&lt;/h4&gt;
&lt;pre id=&quot;code_1778319296313&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: job-make-fail
spec:
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: [&quot;curlchk&quot;,  &quot;nginx&quot;]
                                         // restartPolicyを削除&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-3-2.動作確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;35&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r5gmK/dJMcai4g4lz/4sLyp7KsuGhA65PDhF4Ra0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r5gmK/dJMcai4g4lz/4sLyp7KsuGhA65PDhF4Ra0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r5gmK/dJMcai4g4lz/4sLyp7KsuGhA65PDhF4Ra0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr5gmK%2FdJMcai4g4lz%2F4sLyp7KsuGhA65PDhF4Ra0%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;856&quot; height=&quot;35&quot; data-origin-width=&quot;856&quot; data-origin-height=&quot;35&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※JobにおいてrestartPolicyをOnFailureまたはNeverに設定しなければならないという、k8sの強制的なルールがある。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Jobは「一度タスクを完了すれば終了（Exit）する」ことが目的であり、Alwaysを使用するとタスクが終わっても再実行を繰り返す無限ループに陥るためである。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;したがって、Jobの本質（バッチ作業の完了可否）を明確に管理するために、podを新しく立ち上げるか（Never）、内部で再起動するか（OnFailure）を選択させる仕組みになっている。&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-4 .job並列実行および動作確認&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-4-1.Job作成&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;completions： &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;実行量&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※completionsが3の場合、Jobが成功したとみなされるためには、計3つのPodが順次実行され、正常に終了する必要がある。&lt;/p&gt;
&lt;pre id=&quot;code_1778320060142&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: job-completions 
spec:
  completions: 3 // 3つのPodが順次実行される。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: [&quot;curlchk&quot;,  &quot;nginx&quot;]
      restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-4-2.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;podのAGEを見ると順次実行されたことが分かる。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tfwCg/dJMcagZIUSw/vwxK9QEU5Lh4KETsfBdHh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tfwCg/dJMcagZIUSw/vwxK9QEU5Lh4KETsfBdHh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tfwCg/dJMcagZIUSw/vwxK9QEU5Lh4KETsfBdHh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtfwCg%2FdJMcagZIUSw%2FvwxK9QEU5Lh4KETsfBdHh0%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;421&quot; height=&quot;116&quot; data-origin-width=&quot;421&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-4-3.Job作成&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;parallelism：並列性／並行性&lt;/p&gt;
&lt;pre id=&quot;code_1778320072008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;kind: Job
metadata:
  name: job-parallelism
spec:
  parallelism: 3 // 同時に3つのPodを起動して、ジョブを実行する。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: [&quot;curlchk&quot;,  &quot;nginx&quot;]
      restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-4-4.動作確認&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;podのAGEを見ると同時実行されたことが分かる。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baGtsV/dJMcab5cVe8/60KLCECrOYluUPglx7EnO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baGtsV/dJMcab5cVe8/60KLCECrOYluUPglx7EnO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baGtsV/dJMcab5cVe8/60KLCECrOYluUPglx7EnO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaGtsV%2FdJMcab5cVe8%2F60KLCECrOYluUPglx7EnO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;426&quot; height=&quot;112&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-5.job自動終了および動作確認&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-5-1.Job作成&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;activeDeadlineSeconds：Jobによって生成されたPodが「アクティブ（Active）」であった合計時間を基準に、Podを終了させる。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※再試行回数の設定に関わらず終了させる。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※Podが起動中の状態でも終了させるが、terminationGracePeriodSecondsが未設定の場合、デフォルト値の30秒によって30秒間の猶予時間が与えられる。30秒を超過すると強制終了（kill）される。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※処理後、Jobは削除されない。&lt;/p&gt;
&lt;pre id=&quot;code_1778321754624&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: job-activedeadlineseconds
spec:
  backoffLimit: 3
  activeDeadlineSeconds: 30 //Pod作成を基準に、30秒後に終了するよう設定。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: [&quot;/bin/sh&quot;, &quot;-c&quot;]
        args:
        - sleep 80;
          curlchk nginx;  
      restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-5-2.動作確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBOYdS/dJMcah5rYB2/hboOOcO88AaGxbdHmjXFTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBOYdS/dJMcah5rYB2/hboOOcO88AaGxbdHmjXFTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBOYdS/dJMcah5rYB2/hboOOcO88AaGxbdHmjXFTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBOYdS%2FdJMcah5rYB2%2FhboOOcO88AaGxbdHmjXFTk%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;517&quot; height=&quot;242&quot; data-origin-width=&quot;517&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①JobによるPod作成開始の30秒後にTerminating&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;②terminationGracePeriodSecondsのデフォルト値による30秒の猶予&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③Podの強制終了（kill）&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;④Jobは削除されない&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-5-3.Job作成&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ttlSecondsAfterFinished：Jobによって生成されたPodの終了後、リソースをクリーンアップ。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※Jobも削除される&lt;/p&gt;
&lt;pre id=&quot;code_1778323623056&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: Job
metadata:
  name: job-ttlsecondsafterfinished
spec:
  backoffLimit: 3
  ttlSecondsAfterFinished: 30 //Jobによって起動されたPodの終了後、30秒後にリソースをクリーンアップ。
  template:
    spec:
      containers:
      - name: net-tools
        image: sysnet4admin/net-tools
        command: 
        - &quot;/bin/sh&quot;
        - &quot;-c&quot;
        - |
          echo &quot;start&quot;
          sleep 10
      restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1-5-4.動作確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjxIPC/dJMcab5cWJ4/VKiOX3vzFcksKwazOq2cM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjxIPC/dJMcab5cWJ4/VKiOX3vzFcksKwazOq2cM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjxIPC/dJMcab5cWJ4/VKiOX3vzFcksKwazOq2cM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjxIPC%2FdJMcab5cWJ4%2FVKiOX3vzFcksKwazOq2cM0%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;214&quot; data-origin-width=&quot;509&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①Podの終了後、30秒後にリソースをクリーンアップ&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;②Jobも削除された&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2.CronJob&lt;/h2&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2-1.CronJob作成および動作確認&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2-1-1.Cronルール&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;477&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9Hea6/dJMcaaSM0Pm/QPYGKQCQwlgejqEPBSw61k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9Hea6/dJMcaaSM0Pm/QPYGKQCQwlgejqEPBSw61k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9Hea6/dJMcaaSM0Pm/QPYGKQCQwlgejqEPBSw61k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9Hea6%2FdJMcaaSM0Pm%2FQPYGKQCQwlgejqEPBSw61k%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;1024&quot; height=&quot;477&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;477&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2-1-2.CronJob作成&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;successfulJobsHistoryLimit：성공한 Job 오브젝트의 이력을 보관한다. 디폴트(3)&lt;/p&gt;
&lt;pre id=&quot;code_1778332297701&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: batch/v1
kind: CronJob
metadata:
  name: cj-1m-hist3-curl 
spec:
  schedule: &quot;*/1 * * * *&quot;  //マスターノードのシステム時間を基準に起動する。
  jobTemplate:             # Template for job 
    spec:                  # same as before 
      template:
        spec:
          containers:
          - name: net-tools
            image: sysnet4admin/net-tools
            command: [&quot;curlchk&quot;,  &quot;nginx&quot;]
          restartPolicy: Never&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2-1-3.動作確認&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;856&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uZQsK/dJMcahEkNJe/iKGDD6kY6JiX9HDkyZD79k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uZQsK/dJMcahEkNJe/iKGDD6kY6JiX9HDkyZD79k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uZQsK/dJMcahEkNJe/iKGDD6kY6JiX9HDkyZD79k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuZQsK%2FdJMcahEkNJe%2FiKGDD6kY6JiX9HDkyZD79k%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;558&quot; height=&quot;856&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;856&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;①１分ごとにCronJob起動&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;②successfulJobsHistoryLimitによって、cj-1m-hist3-curl-29638867-8mk6w、fqt55削除&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>k8s/APP配布</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/142</guid>
      <comments>https://tokyoant.tistory.com/142#entry142comment</comments>
      <pubDate>Sat, 9 May 2026 17:18:35 +0900</pubDate>
    </item>
    <item>
      <title>command/args</title>
      <link>https://tokyoant.tistory.com/141</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.command/argsとは？&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;実務的な観点において、commandとargsはコンテナの起動時に「何を実行するか」を決定する最終指示書である。&lt;/li&gt;
&lt;li&gt;イメージは一つだが、デプロイ環境や目的に応じて動作を変更する必要がある場合に使用する。&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1-2.継続して動作させたい場合&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-2-1.まず、下記の検証用イメージとコードで動作を確認。&lt;/p&gt;
&lt;pre id=&quot;code_1778306395105&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  labels:
    run: simple-wo-command
  name: simple-wo-command 
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;検証用イメージの動作により、Podが異常終了している。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcD5AE/dJMcahEkFrn/saBjOmtyZ9w38nidOndQ00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcD5AE/dJMcahEkFrn/saBjOmtyZ9w38nidOndQ00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcD5AE/dJMcahEkFrn/saBjOmtyZ9w38nidOndQ00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcD5AE%2FdJMcahEkFrn%2FsaBjOmtyZ9w38nidOndQ00%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;468&quot; height=&quot;88&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-2-2.&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;commandが定義された検証用コードで動作を確認。&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1778306756017&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  labels:
    run: simple-command
  name: simple-command 
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools
    command: [&quot;/bin/sh&quot;, &quot;-c&quot;, &quot;sleep 3600&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sleep 3600が適応され, Podが追加で生成されず、一つのみ動作している。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5vkJ1/dJMcagSZKkF/EQ20ufMR6iuGwbZG7uZlyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5vkJ1/dJMcagSZKkF/EQ20ufMR6iuGwbZG7uZlyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5vkJ1/dJMcagSZKkF/EQ20ufMR6iuGwbZG7uZlyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5vkJ1%2FdJMcagSZKkF%2FEQ20ufMR6iuGwbZG7uZlyk%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;359&quot; height=&quot;45&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Podの内部に入り、commandの定義通りに動作しているかを確認。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vo8CJ/dJMcahK8z9V/affXbRenRogxxCD5keeH8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vo8CJ/dJMcahK8z9V/affXbRenRogxxCD5keeH8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vo8CJ/dJMcahK8z9V/affXbRenRogxxCD5keeH8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvo8CJ%2FdJMcahK8z9V%2FaffXbRenRogxxCD5keeH8k%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;91&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1-3.ユーザーが任意のコマンドを実行させたい場合&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-3-1.command内に引数を含める場合&lt;/p&gt;
&lt;pre id=&quot;code_1778310668816&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  labels:
    run: multiple-command-v1
  name: multiple-command-v1
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools
    command: [&quot;/bin/sh&quot;, &quot;-c&quot;, &quot;echo run multiple-command-v1 &amp;amp;&amp;amp; sleep 3600&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;1-3-2.command内に引数を含める場合2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※この場合、同時実行ではなく順次実行される。echo run multiple-command-v2 の実行後に sleep 3600&lt;/p&gt;
&lt;pre id=&quot;code_1778310692957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  labels:
    run: multiple-command-v2
  name: multiple-command-v2
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools
    command: [&quot;/bin/sh&quot;, &quot;-c&quot;, &quot;echo run multiple-command-v2; sleep 3600&quot;]&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-3-3. 実行プログラム・オプション・引数を分離して使用する場合&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※この場合、1-3-2と同様に順次実行される&lt;/p&gt;
&lt;pre id=&quot;code_1778310706366&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  labels:
    run: multiple-command-v3
  name: multiple-command-v3
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools
    command: 
    - &quot;/bin/sh&quot;
    - &quot;-c&quot;
    - |
      echo run multiple-command-v3
      sleep 3600&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1-3-4.実行プログラムとオプションをまとめ、引数のみを分離する場合&lt;/p&gt;
&lt;pre id=&quot;code_1778310720465&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: v1
kind: Pod
metadata:
  labels:
    run: multiple-command-w-args
  name: multiple-command-w-args
spec:
  containers:
  - image: sysnet4admin/net-tools
    name: net-tools
    command: [&quot;/bin/sh&quot;,&quot;-c&quot;]
    args: 
    - |
      echo run multiple-command-w-args
      echo add commentary 
      sleep 3600&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>k8s/APP配布</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/141</guid>
      <comments>https://tokyoant.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 9 May 2026 14:29:32 +0900</pubDate>
    </item>
    <item>
      <title>Deployment、ReplicaSet</title>
      <link>https://tokyoant.tistory.com/140</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1.Deployment&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;例)Deployment.yaml&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wIv5b/dJMcah5rAjy/GKq89c3NHR4aLs5gcl39a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wIv5b/dJMcah5rAjy/GKq89c3NHR4aLs5gcl39a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wIv5b/dJMcah5rAjy/GKq89c3NHR4aLs5gcl39a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwIv5b%2FdJMcah5rAjy%2FGKq89c3NHR4aLs5gcl39a0%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;1245&quot; height=&quot;554&quot; data-origin-width=&quot;1245&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;1,0,0&quot;&gt;selectorとtemplateの関係性&lt;/b&gt; selectorとtemplateは&lt;b data-index-in-node=&quot;40&quot; data-path-to-node=&quot;1,0,0&quot;&gt;紐付けられる構造&lt;/b&gt;になっており、&lt;b data-index-in-node=&quot;55&quot; data-path-to-node=&quot;1,0,0&quot;&gt;selectorがtemplateを（ラベルを介して）選択する仕組み&lt;/b&gt;になっている。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;346&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7sX6S/dJMcahRRLFl/CrXmsCuEQQDKS7KQttINHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7sX6S/dJMcahRRLFl/CrXmsCuEQQDKS7KQttINHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7sX6S/dJMcahRRLFl/CrXmsCuEQQDKS7KQttINHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7sX6S%2FdJMcahRRLFl%2FCrXmsCuEQQDKS7KQttINHK%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;961&quot; height=&quot;346&quot; data-origin-width=&quot;961&quot; data-origin-height=&quot;346&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #fcfcff;&quot;&gt;Ahahah I will not do it&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IBQXb/dJMcad2X9Nj/2ZkwlQqxRnpnq3KrpNKkbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IBQXb/dJMcad2X9Nj/2ZkwlQqxRnpnq3KrpNKkbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IBQXb/dJMcad2X9Nj/2ZkwlQqxRnpnq3KrpNKkbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIBQXb%2FdJMcad2X9Nj%2F2ZkwlQqxRnpnq3KrpNKkbk%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;1024&quot; height=&quot;582&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Deploymentの中にはPodのコードが含まれていて、&lt;u&gt;&lt;b&gt;metadataやspecの部分はPodの定義とほぼ同じに&lt;/b&gt;&lt;/u&gt;なっている。&lt;/li&gt;
&lt;li&gt;ここから分かるのは、Deploymentが「Podを複数作るための枠組み」だということ。つまり、Podの構造をそのまま持ってきて、それをテンプレートとして使い回している。もう少し具体的に言うと、Deploymentはtemplateを使って複数のPodを作れるし、replicasの数を変えるだけで、Podを増やしたり減らしたり自由にコントロールできる仕組みになっている。&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅検証&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;セレクターのラベルとテンプレートのラベルが一致しない場合、デプロイメントは作成されない。&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;201&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsgqKP/dJMcahYD7Yf/2eJFXssZhdu0vGTix95ro0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsgqKP/dJMcahYD7Yf/2eJFXssZhdu0vGTix95ro0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsgqKP/dJMcahYD7Yf/2eJFXssZhdu0vGTix95ro0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsgqKP%2FdJMcahYD7Yf%2F2eJFXssZhdu0vGTix95ro0%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;201&quot; height=&quot;289&quot; data-origin-width=&quot;201&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qvblY/dJMcadaOJlY/k84fIeovnZElNIVEkBYpG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qvblY/dJMcadaOJlY/k84fIeovnZElNIVEkBYpG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qvblY/dJMcadaOJlY/k84fIeovnZElNIVEkBYpG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqvblY%2FdJMcadaOJlY%2Fk84fIeovnZElNIVEkBYpG0%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;783&quot; height=&quot;45&quot; data-origin-width=&quot;783&quot; data-origin-height=&quot;45&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style7&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2.ReplicaSet&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;例)replicaset.yaml&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;454&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dLZlLe/dJMcagk8cWC/xlagZVUbB58kiYpP5TJFZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dLZlLe/dJMcagk8cWC/xlagZVUbB58kiYpP5TJFZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dLZlLe/dJMcagk8cWC/xlagZVUbB58kiYpP5TJFZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdLZlLe%2FdJMcagk8cWC%2FxlagZVUbB58kiYpP5TJFZ0%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;998&quot; height=&quot;454&quot; data-origin-width=&quot;998&quot; data-origin-height=&quot;454&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ReplicaSet.yamlファイルの構造は、Deploymentと同一である。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;590&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KWuqo/dJMcag6wfLA/T6ORVkksR497vY6f2Sq9h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KWuqo/dJMcag6wfLA/T6ORVkksR497vY6f2Sq9h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KWuqo/dJMcag6wfLA/T6ORVkksR497vY6f2Sq9h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKWuqo%2FdJMcag6wfLA%2FT6ORVkksR497vY6f2Sq9h0%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;1024&quot; height=&quot;590&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;590&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; Deploymentとkind部分だけが異なるのに、なぜあえてReplicaSetを使う必要があるのか？どちらか一方だけを使用すればよいのではないか？&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt; なぜアプリのデプロイ時にReplicaSetではなくDeploymentを使用するのか？&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;　　&amp;rarr;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;核心は「状態制御」と「履歴管理」にある。&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UDB9t/dJMcagSZHHR/KhGsJjceeYZCABLCPIVK40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UDB9t/dJMcagSZHHR/KhGsJjceeYZCABLCPIVK40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UDB9t/dJMcagSZHHR/KhGsJjceeYZCABLCPIVK40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUDB9t%2FdJMcagSZHHR%2FKhGsJjceeYZCABLCPIVK40%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;1024&quot; height=&quot;512&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-path-to-node=&quot;2&quot; data-ke-size=&quot;size23&quot;&gt;2-1. 階層構造 (Hierarchy)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;3&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,0,0&quot;&gt;Deployment（戦略司令部）&lt;/b&gt;: どのイメージを使用し、どのような方式でデプロイするかを決定する。&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,1,0&quot;&gt;ReplicaSet（現場監督）&lt;/b&gt;: 常に規定数のPodが稼働しているかを監視・維持する。&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;3,2,0&quot;&gt;Pod（実務担当者）&lt;/b&gt;: 実際にコンテナが実行される最小単位。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-path-to-node=&quot;4&quot; data-ke-size=&quot;size23&quot;&gt;2-2. アップデートのプロセス (Rolling Update)&lt;/h3&gt;
&lt;p data-path-to-node=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;イメージのバージョンを v1 から v2 に変更する場合のプロセスは以下の通りである。&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-path-to-node=&quot;6&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,0,0&quot;&gt;新規RSの生成&lt;/b&gt;: Deploymentが v2 用のReplicaSetを新規作成する（既存の v1 用RSは保持される）。&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,1,0&quot;&gt;入れ替え作業&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6,1,1&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;v2 用RSのPod数を段階的に増加させる。&lt;/li&gt;
&lt;li&gt;v1 用RSのPod数を段階的に削減する。&lt;/li&gt;
&lt;li&gt;このプロセスを繰り返すことで、トラフィックを徐々に新バージョンへと移行させる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;6,2,0&quot;&gt;結果&lt;/b&gt;: デプロイ完了後、v1 用RSはレプリカ数が「0」の状態で残る。これはロールバック（Rollback）を迅速に行うためであり、v2 に問題が発生した際、Deploymentが v1 用RSのレプリカ数を再設定するだけで旧バージョンへの復元が可能となる。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-path-to-node=&quot;7&quot; data-ke-size=&quot;size23&quot;&gt;2-3. Deploymentを採用する理由&lt;/h3&gt;
&lt;p data-path-to-node=&quot;8&quot; data-ke-size=&quot;size16&quot;&gt;ReplicaSetのみを利用する場合、以下の作業を手動で行う必要がある。&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;9&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;新規ReplicaSetの作成。&lt;/li&gt;
&lt;li&gt;既存ReplicaSetのスケールダウン。&lt;/li&gt;
&lt;li&gt;デプロイ障害時の手動によるリソース調整。&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-path-to-node=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;Deploymentは、これらの煩雑かつリスクを伴うプロセスを自動化する&lt;b data-index-in-node=&quot;36&quot; data-path-to-node=&quot;10&quot;&gt;抽象化エンジン&lt;/b&gt;として機能するため、モダンなインフラ運用において不可欠なコンポーネントである。&lt;/p&gt;
&lt;h4 data-path-to-node=&quot;10&quot; data-ke-size=&quot;size20&quot;&gt; それでは、ReplicaSetを実行してみたらどうだろうか。&lt;/h4&gt;
&lt;pre id=&quot;code_1778302328748&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: rs-nginx
  name: rs-nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: po-nginx
  template:
    metadata:
      labels:
        app: po-nginx
    spec:
      containers:
      - image: nginx
        name: nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;それでは、ReplicaSetを実行してみたらどうだろうか。&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Pod状態&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceKHvO/dJMcafT5LD0/ekyZfU8KDdcID6R6mL2vg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceKHvO/dJMcafT5LD0/ekyZfU8KDdcID6R6mL2vg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceKHvO/dJMcafT5LD0/ekyZfU8KDdcID6R6mL2vg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceKHvO%2FdJMcafT5LD0%2FekyZfU8KDdcID6R6mL2vg1%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;359&quot; height=&quot;76&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Podレベルでは差異がないことが確認できる。しかし、ここでの核心は「オブジェクトの目的」にある。ReplicaSetのみを単独で使用した場合、現在の状態を維持するというReplicaSetの限界が存在する。 Pod、ReplicaSet、Deploymentの有機的な関係を理解することで、Deploymentを十分に理解することができる。&lt;/p&gt;</description>
      <category>k8s/APP配布</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/140</guid>
      <comments>https://tokyoant.tistory.com/140#entry140comment</comments>
      <pubDate>Fri, 8 May 2026 23:52:45 +0900</pubDate>
    </item>
    <item>
      <title>Certified Kubernetes Application Developer(CKAD)取得</title>
      <link>https://tokyoant.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;✅CKADとは?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Linux Foundationが認定するクバネティス（Kubernetes）関連の資格です。&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;実際の運用環境における実務能力を検証することに焦点が当てられています。&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot;&gt;✅取得理由&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CKA合格の流れを止めず、CKAD取得を決意しました。2年間クボネティス環境に携わってきましたが、主にCI/CDのための初期環境構築や基盤リソースの設定に注力してきました。運用体制上、開発チームがサービス維持管理や詳細設定を担当しているため、インフラ担当者として「実際のアプリケーションソースコードがどのようにデプロイされ、リソースが具体的にどう活用されているか」を深く掘り下げたいという渇望がありました。今回の機会に、インフラ提供者（Provider）の視点を超え、利用者（User）の視点からクボネティスのワークロードを完璧に理解したいと考えていました。&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #9d9d9d;&quot;&gt;✅&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;試験出題形式 (100%実技)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1.Containerビルドおよび保存&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2.CronJob生成&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3.DeploymentおよびService生成&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4.Deploymentアップデートおよびロールバック&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;5.CanaryDeployment生成&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;6.Manifest生成&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;7.Probe設定&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;8.ResourceLimitRangeおよびQuota設定&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;9.Secret生成および設定&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;10.kube-apiserver権限付与&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;11.APPセキュリティー設定&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;12.NetworkPolicy設定&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;13.Ingress生成および設定&lt;/p&gt;
&lt;p style=&quot;color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;845&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciat4j/dJMcaf0K35B/AUEXkCMku3flBZpasVtdv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciat4j/dJMcaf0K35B/AUEXkCMku3flBZpasVtdv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciat4j/dJMcaf0K35B/AUEXkCMku3flBZpasVtdv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fciat4j%2FdJMcaf0K35B%2FAUEXkCMku3flBZpasVtdv0%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;1095&quot; height=&quot;845&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;1095&quot; data-origin-height=&quot;845&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>振り返る</category>
      <author>YOOANT</author>
      <guid isPermaLink="true">https://tokyoant.tistory.com/139</guid>
      <comments>https://tokyoant.tistory.com/139#entry139comment</comments>
      <pubDate>Mon, 4 May 2026 19:18:04 +0900</pubDate>
    </item>
  </channel>
</rss>