<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>sseyeon.log</title>
    <link>https://sseyeon.tistory.com/</link>
    <description>(๑ &amp;bull;̀&amp;omega;&amp;bull;́)۶ ♡ &amp;hearts; ♡</description>
    <language>ko</language>
    <pubDate>Tue, 22 Sep 2026 22:43:48 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>@sseyeon_</managingEditor>
    <image>
      <title>sseyeon.log</title>
      <url>https://tistory1.daumcdn.net/tistory/4368522/attach/320e513541154ae9b165b1e1f7599eeb</url>
      <link>https://sseyeon.tistory.com</link>
    </image>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint2] #4. Jenkins Pipeline (기초부터 Blue/Green 까지)</title>
      <link>https://sseyeon.tistory.com/52</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;[참고]&lt;br&gt;본 글은 인프런의&lt;br&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;br&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/blockquote&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;실습에서 다룬 Job (Pipeline)&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;2211-jenkins_pipeline-step1&lt;/b&gt;: 분리되어 있던 세 개의 Job을 하나의 Pipeline으로 통합&lt;/li&gt;&lt;li&gt;&lt;b&gt;2212-jenkins_pipeline-step2&lt;/b&gt;: GitHub 연동 및 Pipeline script from SCM 방식으로 전환&lt;/li&gt;&lt;li&gt;&lt;b&gt;2213-jenkins_pipeline-step3&lt;/b&gt;: input 스텝을 활용한 수동 Blue/Green 배포&lt;/li&gt;&lt;li&gt;&lt;b&gt;2214&lt;/b&gt;: 배포 완료 여부를 폴링하는 자동 Blue/Green 배포&lt;/li&gt;&lt;/ul&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 분리된 Job을 하나의 Pipeline으로&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;Sprint 1에서는 2121-source-build, 2121-container-build, 2121-deploy 세 개의 Job을 각각의 stage로 나눠 관리했습니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;div id=&quot;block-3e2fd75a4d21808aba3de61e30b1881f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CoOXN/dJMcagHcNOX/gSTHGjw7bW8KeAyfk5Hx71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CoOXN/dJMcagHcNOX/gSTHGjw7bW8KeAyfk5Hx71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CoOXN/dJMcagHcNOX/gSTHGjw7bW8KeAyfk5Hx71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCoOXN%2FdJMcagHcNOX%2FgSTHGjw7bW8KeAyfk5Hx71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;490.98438&quot; height=&quot;115.200226&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;이번 단계에서는 이 Job들을 하나의 Pipeline으로 합치는 작업을 수행했습니다. 실무에서 매일 하던 구성이라 이 부분은 빠르게 넘어갔습니다.&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Pipeline script from SCM으로 전환&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;Jenkins UI에 스크립트를 직접 박아 넣는 대신, GitHub 저장소의 Jenkinsfile을 읽어오도록 변경했습니다.&lt;br&gt;&lt;b&gt;설정 포인트 3가지&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;&lt;b&gt;Definition&lt;/b&gt;: Pipeline script from SCM 선택 (SCM은 Git)&lt;/li&gt;&lt;li&gt;&lt;b&gt;Repository URL&lt;/b&gt;: &lt;a href=&quot;https://github.com/sseyeon/kubernetes-anotherclass-sprint2.git&quot; target=&quot;_self&quot;&gt;&lt;span&gt;https://github.com/sseyeon/kubernetes-anotherclass-sprint2.git&lt;/span&gt;&lt;/a&gt;, Branch는 /main&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sparse Checkout paths&lt;/b&gt;: Additional Behaviours에서 체크아웃 경로를 2212로 지정&lt;/li&gt;&lt;/ul&gt;&lt;div id=&quot;block-3e2fd75a4d2180798d35c9541166002e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lcLjX/dJMcaiY3nuv/yMmJmNfMk2UjtCKksFrGeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lcLjX/dJMcaiY3nuv/yMmJmNfMk2UjtCKksFrGeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lcLjX/dJMcaiY3nuv/yMmJmNfMk2UjtCKksFrGeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlcLjX%2FdJMcaiY3nuv%2FyMmJmNfMk2UjtCKksFrGeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475.95312&quot; height=&quot;176.27893&quot; data-origin-width=&quot;891&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;div id=&quot;block-3e2fd75a4d21808eb96ef207614f7c8c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBLm2V/dJMcajp7KXs/TjoWejElX8136nf2n5p9NK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBLm2V/dJMcajp7KXs/TjoWejElX8136nf2n5p9NK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBLm2V/dJMcajp7KXs/TjoWejElX8136nf2n5p9NK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBLm2V%2FdJMcajp7KXs%2FTjoWejElX8136nf2n5p9NK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475.96875&quot; height=&quot;272.6524&quot; data-origin-width=&quot;913&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;div id=&quot;block-3e2fd75a4d2180a4bb24ccad0310c978&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/18Sk1/dJMcajp7KXu/3UXKklQpGAOpi7djXk7fm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/18Sk1/dJMcajp7KXu/3UXKklQpGAOpi7djXk7fm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/18Sk1/dJMcajp7KXu/3UXKklQpGAOpi7djXk7fm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F18Sk1%2FdJMcajp7KXu%2F3UXKklQpGAOpi7djXk7fm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475.96875&quot; height=&quot;121.80857&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;div id=&quot;block-3e2fd75a4d2180d6b6b7ca70bfcdd129&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;388&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsKmck/dJMcagHcNOY/YTH7twOdZEWkUkggXQxuhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsKmck/dJMcagHcNOY/YTH7twOdZEWkUkggXQxuhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsKmck/dJMcagHcNOY/YTH7twOdZEWkUkggXQxuhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsKmck%2FdJMcagHcNOY%2FYTH7twOdZEWkUkggXQxuhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9531&quot; height=&quot;281.29126&quot; data-origin-width=&quot;971&quot; data-origin-height=&quot;388&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;Sparse Checkout을 쓰는 이유&lt;/b&gt;: 하나의 저장소에 여러 실습 번호(2211, 2212, 2213…)가 함께 들어 있을 때, 전체를 내려받지 않고 해당 Job이 필요로 하는 디렉토리만 체크아웃할 수 있습니다. 저장소가 커질수록 체크아웃 시간과 워크스페이스 용량에서 차이가 납니다.&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Blue/Green 배포 실습 (수동)&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;input 스텝으로 각 단계마다 확인을 받으면서 트래픽이 어떻게 넘어가는지 직접 관찰했습니다.&lt;/p&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-1. Blue 배포 — Green Pod 생성&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 Yes를 누르면 기존 Blue Pod 2개는 그대로 둔 채, Green Pod 2개가 추가로 생성됩니다. 이 시점에는 Pod가 총 4개입니다.&lt;/p&gt;&lt;div id=&quot;block-3e2fd75a4d2181fc9cb1c5314c50c2cf&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;pre class=&quot;vala&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# 운영 트래픽 — 계속 v1.0.0 응답
while true; do curl http://192.168.56.30:32213/version; sleep 1; echo ''; done;
# [App Version] : Api Tester v1.0.0
# [App Version] : Api Tester v1.0.0

# QA 담당자 전용 — 검증용 Service로 v2.0.0 직접 호출
curl http://192.168.56.30:32223/version
# [App Version] : Api Tester v2.0.0&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt;&lt;div id=&quot;block-3e2fd75a4d21809cb00bd0a4f3b2a26f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGe7Pv/dJMcagHcNO0/eQ3YW5VC8QKqFmeVZSkLKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGe7Pv/dJMcagHcNO0/eQ3YW5VC8QKqFmeVZSkLKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGe7Pv/dJMcagHcNO0/eQ3YW5VC8QKqFmeVZSkLKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGe7Pv%2FdJMcagHcNO0%2FeQ3YW5VC8QKqFmeVZSkLKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;390.08658&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;✅ &lt;b&gt;핵심&lt;/b&gt;: 사용자는 여전히 v1을 보고 있는 상태에서, QA는 별도 포트(32223)로 v2를 미리 검증할 수 있습니다. &lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-2. Green 전환&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;두 번째 Yes를 누르면 Service의 selector가 바뀌면서, 돌고 있던 32213 호출 결과가 v1에서 v2로 전환됩니다.&lt;/p&gt;&lt;div id=&quot;block-3e2fd75a4d2180d1a302dd3d8ba3a989&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;365&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/euuVCE/dJMcagHcNOU/K3kk5zVjjJxDdZ3RzgQzQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/euuVCE/dJMcagHcNOU/K3kk5zVjjJxDdZ3RzgQzQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/euuVCE/dJMcagHcNOU/K3kk5zVjjJxDdZ3RzgQzQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeuuVCE%2FdJMcagHcNOU%2FK3kk5zVjjJxDdZ3RzgQzQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9375&quot; height=&quot;223.22952&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;365&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;div id=&quot;block-3e2fd75a4d2180938f59f79e1dc82819&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1543&quot; data-origin-height=&quot;601&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVczCx/dJMcaiY3nut/rQLRQiA3ivXK6SpEGbZEzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVczCx/dJMcaiY3nut/rQLRQiA3ivXK6SpEGbZEzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVczCx/dJMcaiY3nut/rQLRQiA3ivXK6SpEGbZEzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVczCx%2FdJMcaiY3nut%2FrQLRQiA3ivXK6SpEGbZEzk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;274.2026&quot; data-origin-width=&quot;1543&quot; data-origin-height=&quot;601&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;&lt;h4 data-ke-size=&quot;size20&quot;&gt;3-3. Blue 삭제&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 Done을 누르면 Blue Pod가 삭제되고 Green만 남습니다.&lt;/p&gt;&lt;div id=&quot;block-3e2fd75a4d2180919a30d12473865da3&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1545&quot; data-origin-height=&quot;799&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vJYpV/dJMcagHcNOT/F9k3fR7FMCXavI3GYsoQeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vJYpV/dJMcagHcNOT/F9k3fR7FMCXavI3GYsoQeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vJYpV/dJMcagHcNOT/F9k3fR7FMCXavI3GYsoQeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvJYpV%2FdJMcagHcNOT%2FF9k3fR7FMCXavI3GYsoQeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;364.05893&quot; data-origin-width=&quot;1545&quot; data-origin-height=&quot;799&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. Blue/Green 배포 시 고려해야 할 요소&lt;/h2&gt;&lt;div id=&quot;block-3e2fd75a4d21807cba22c1598c3a000b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wifeO/dJMcaiY3nuu/vsUleHyfZaWBderdeJygY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wifeO/dJMcaiY3nuu/vsUleHyfZaWBderdeJygY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wifeO/dJMcaiY3nuu/vsUleHyfZaWBderdeJygY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwifeO%2FdJMcaiY3nuu%2FvsUleHyfZaWBderdeJygY1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;437.41748&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;br&gt;Sprint 1에서 라벨(Label)과 셀렉터(Selector) 매칭 구조를 정리했는데, Blue/Green은 그 설계가 실제로 왜 중요한지 바로 드러나는 지점이었습니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;1) Blue-Green 배포를 고려한 Deployment 네이밍&lt;/b&gt;&lt;br&gt;Deployment 이름 뒤에 구분자를 붙입니다. api-tester-2213-1(Blue), api-tester-2213-2(Green) 형태로, 두 벌의 Deployment가 동시에 존재할 수 있어야 합니다.&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;b&gt;2) Blue-Green 배포를 위한 추가 레이블 및 셀렉터&lt;/b&gt;&lt;br&gt;기존 5개 라벨(part-of, component, name, instance, version)에 &lt;b&gt;blue-green-no&lt;/b&gt; 라벨을 하나 더 추가합니다.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt; 
  &lt;tbody&gt; 
   &lt;tr style=&quot;background-color: #e6e6e5; color: #37352f;&quot;&gt; 
    &lt;td style=&quot;background-color: #000000;&quot;&gt; 
     &lt;div&gt; &lt;span&gt;구분&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td style=&quot;background-color: #000000;&quot;&gt; 
     &lt;div&gt; &lt;span&gt;Deployment&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td style=&quot;background-color: #000000;&quot;&gt; 
     &lt;div&gt; &lt;span&gt;Pod label&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td style=&quot;background-color: #000000;&quot;&gt; 
     &lt;div&gt; &lt;span&gt;Service selector&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr style=&quot;color: #37352f;&quot;&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;Blue&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;api-tester-2213-1&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;blue-green-no: 1, version: 1.0.0&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;blue-green-no: &quot;1&quot;&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr style=&quot;color: #37352f;&quot;&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;Green&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;api-tester-2213-2&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;blue-green-no: 2, version: 2.0.0&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
    &lt;td&gt; 
     &lt;div&gt; &lt;span&gt;blue-green-no: &quot;2&quot;&lt;/span&gt; 
     &lt;/div&gt; &lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;여기서 중요한 점&lt;/b&gt;: Service는 part-of, component, name, instance까지는 Blue/Green이 완전히 동일하고, &lt;b&gt;오직 blue-green-no 값 하나만 다릅니다.&lt;/b&gt; 그래서 이 라벨 값 하나만 1 → 2로 바꾸면 트래픽 전체가 넘어갑니다.&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 리소스 변경 사항 정리&lt;/h2&gt;&lt;div id=&quot;block-3e2fd75a4d2180d4811edd7b1c5f6177&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1088&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kAzzP/dJMcagHcNOV/snEhPlko7XzE4zoU2Yf6M0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kAzzP/dJMcagHcNOV/snEhPlko7XzE4zoU2Yf6M0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kAzzP/dJMcagHcNOV/snEhPlko7XzE4zoU2Yf6M0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkAzzP%2FdJMcagHcNOV%2FsnEhPlko7XzE4zoU2Yf6M0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;464.75607&quot; data-origin-width=&quot;1648&quot; data-origin-height=&quot;1088&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;수동 배포 전체 흐름을 리소스 관점에서 3단계로 정리하면 다음과 같습니다.&lt;/p&gt;&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;&lt;li&gt;&lt;b&gt;생성&lt;/b&gt;: Green Deployment 생성 + 검증 전용 Service(api-tester-2) 생성&lt;/li&gt;&lt;li&gt;&lt;b&gt;전환&lt;/b&gt;: 운영 Service의 selector blue-green-no를 &quot;1&quot; → &quot;2&quot;로 변경&lt;/li&gt;&lt;li&gt;&lt;b&gt;정리&lt;/b&gt;: Blue Deployment 삭제, Green 전용 Service 삭제, 그리고 남은 리소스들의 version 라벨을 1.0.0 → 2.0.0으로 갱신&lt;/li&gt;&lt;/ol&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3번에서 문제가 드러납니다.&lt;/b&gt; Deployment만 정리하면 끝이 아니라 Service, ConfigMap, Secret에 붙은 version 라벨까지 전부 따라가야 합니다. 리소스가 늘어날수록 하나씩 누락될 위험이 커지고, 이걸 사람 손으로 챙기는 건 현실적이지 않습니다. &lt;b&gt;Helm을 쓰는 이유가 여기서 나옵니다.&lt;/b&gt;&lt;br&gt;참고로 instance 라벨은 Blue/Green 간에 다르게 주는 경우가 많지는 않습니다.&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 자동 배포 만들어보기&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;수동 단계의 input을 걷어내고, Green Pod가 전부 Ready가 될 때까지 폴링하도록 만들었습니다.&lt;/p&gt;&lt;div id=&quot;block-3e2fd75a4d21810dadc4d43401060bbb&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;pre class=&quot;stata&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;stage('쿠버네티스 Green배포') {
    steps {
        sh &quot;kubectl apply -f ./${CLASS_NUM}/deploy/k8s/green/deployment.yaml&quot;
    }
}

stage('Green 배포 확인중') {
    steps {
        script {
            def returnValue
            // Pod 2개가 모두 Ready(&quot;true true&quot;)가 될 때까지 5초 간격으로 확인
            while (returnValue != &quot;true true&quot;) {
                returnValue = sh(returnStdout: true, encoding: 'UTF-8',
                    script: &quot;kubectl get -n anotherclass-221 pods -l instance='api-tester-2214',blue-green-no='2' -o jsonpath='{.items[*].status.containerStatuses[*].ready}'&quot;)
                echo &quot;${returnValue}&quot;
                sleep 5
            }
        }
    }
}

stage('Green 전환 완료') {
    steps {
        // 라벨 하나만 바꿔서 트래픽 전환
        sh &quot;kubectl patch -n anotherclass-221 svc api-tester-2214 -p '{\&quot;spec\&quot;: {\&quot;selector\&quot;: {\&quot;blue-green-no\&quot;:\&quot;2\&quot;}}}'&quot;
    }
}

stage('Blue 삭제') {
    steps {
        sh &quot;kubectl delete -f ./${CLASS_NUM}/deploy/k8s/blue/deployment.yaml&quot;
        // 남은 리소스들의 version 라벨 갱신
        sh &quot;kubectl patch -n anotherclass-221 svc api-tester-2214 -p '{\&quot;metadata\&quot;: {\&quot;labels\&quot;: {\&quot;version\&quot;:\&quot;2.0.0\&quot;}}}'&quot;
        sh &quot;kubectl patch -n anotherclass-221 cm api-tester-2214-properties -p '{\&quot;metadata\&quot;: {\&quot;labels\&quot;: {\&quot;version\&quot;:\&quot;2.0.0\&quot;}}}'&quot;
        sh &quot;kubectl patch -n anotherclass-221 secret api-tester-2214-postgresql -p '{\&quot;metadata\&quot;: {\&quot;labels\&quot;: {\&quot;version\&quot;:\&quot;2.0.0\&quot;}}}'&quot;
    }
}&lt;/code&gt;&lt;/pre&gt; 
&lt;/div&gt;&lt;div id=&quot;block-3e2fd75a4d2180d6a556c1caba692847&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt; 
 &lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3674&quot; data-origin-height=&quot;1858&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9WQNe/dJMcaiY3nus/wmzajEY3HHo3U7ISqJ2kuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9WQNe/dJMcaiY3nus/wmzajEY3HHo3U7ISqJ2kuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9WQNe/dJMcaiY3nus/wmzajEY3HHo3U7ISqJ2kuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9WQNe%2FdJMcaiY3nus%2FwmzajEY3HHo3U7ISqJ2kuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3674&quot; height=&quot;1858&quot; data-origin-width=&quot;3674&quot; data-origin-height=&quot;1858&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
 
&lt;/div&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 코드에서 읽어야 할 포인트&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;&lt;b&gt;while&lt;/b&gt;&lt;b&gt; 문이 핵심&lt;/b&gt;: jsonpath로 Pod의 containerStatuses[*].ready를 뽑아 &quot;true true&quot;가 될 때까지 대기합니다. Pod가 2개니까 true도 2개여야 합니다.&lt;/li&gt;&lt;li&gt;&lt;b&gt;전환은 &lt;/b&gt;&lt;b&gt;kubectl patch&lt;/b&gt;&lt;b&gt; 한 줄&lt;/b&gt;: Service의 selector.blue-green-no만 바꾸면 끝입니다. 4번 항목의 라벨 설계가 그대로 코드에 반영된 모습입니다.&lt;/li&gt;&lt;li&gt;&lt;b&gt;뒷정리 &lt;/b&gt;&lt;b&gt;patch&lt;/b&gt;&lt;b&gt;가 3줄&lt;/b&gt;: Service, ConfigMap, Secret의 version 라벨을 각각 수동으로 갱신하고 있습니다. 5번에서 말한 누락 위험이 코드에서 그대로 보입니다.&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다만 이건 실무용이 아닙니다.&lt;/b&gt; while로 무한 대기하는 구조라 타임아웃도 없고, 실패 시 롤백 처리도 없습니다. Blue/Green이 원리적으로 이렇게 돌아간다는 것을 보여주는 코드에 가깝습니다.&lt;br&gt;&lt;b&gt;그럼 실무에서는?&lt;/b&gt; → &lt;b&gt;ArgoCD&lt;/b&gt; 같은 GitOps 툴을 활용합니다.&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;Sprint 1에서 라벨과 셀렉터 매칭 구조를 다이어그램으로 그려봤을 때는 “규칙을 잘 지키면 관리가 편해지겠구나” 정도의 감이었는데, Blue/Green을 직접 만들어보니 그 효용이 훨씬 구체적으로 와닿았습니다. 라벨 설계가 잘 되어 있으면 무중단 전환이 patch 한 줄로 끝나고, 안 되어 있으면 배포 때마다 리소스를 손으로 뒤져야 합니다.&lt;br&gt;동시에 왜 Helm과 ArgoCD가 필요한지도 자연스럽게 이해됐습니다. Jenkinsfile에 kubectl patch를 세 줄 쌓고 있는 순간, 이건 리소스가 늘어나면 관리가 안 되는 방식이라는 게 코드 자체로 드러났기 때문입니다.&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/52</guid>
      <comments>https://sseyeon.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 21 Sep 2026 18:20:25 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint2] #3. 배포를 시작하기 전에 반드시 알아야 할 것들</title>
      <link>https://sseyeon.tistory.com/51</link>
      <description>&lt;blockquote id=&quot;block-3dffd75a4d218080a29bc9d685fbd1a8&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p id=&quot;block-3dffd75a4d21807b9083cd638d29fc0d&quot; data-ke-size=&quot;size16&quot;&gt;[참고]&lt;/p&gt;
&lt;p id=&quot;block-3dffd75a4d2180cc8212e324432d562f&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 인프런의&lt;/p&gt;
&lt;p id=&quot;block-3dffd75a4d2180f489f5d8dc89d464bc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;/p&gt;
&lt;p id=&quot;block-3dffd75a4d2180b49a43da237151dbf1&quot; data-ke-size=&quot;size16&quot;&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3dffd75a4d218011aecee2a6c0e34d04&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;성공적인 데브옵스 환경 구축을 위해 CI/CD 파이프라인 설계 시 고려해야 할 구조적 요소와 상황에 맞는 쿠버네티스 배포 전략(Recreate, RollingUpdate, Blue/Green, Canary)을 정리합니다.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3dffd75a4d2180b8bb32df7436cd8817&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. CI/CD 파이프라인 구성 시 고려 요소&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3dffd75a4d218017b91ad5869f02b811&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CI/CD 환경과 실제 애플리케이션이 동작하는 인프라 환경은 명확히 구분되어 관리됩니다.&lt;/p&gt;
&lt;div id=&quot;block-3dffd75a4d2180929420e6a25f17c08e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bswNw8/dJMcabyUc31/vDRHHHmC7Yl4SoOwKyV4z0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bswNw8/dJMcabyUc31/vDRHHHmC7Yl4SoOwKyV4z0/img.png&quot; data-alt=&quot;출처: 인프런 - [지상편] 배포를 시작하기 전에 반드시 알아야 할 것들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bswNw8/dJMcabyUc31/vDRHHHmC7Yl4SoOwKyV4z0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbswNw8%2FdJMcabyUc31%2FvDRHHHmC7Yl4SoOwKyV4z0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;711&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;711&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 인프런 - [지상편] 배포를 시작하기 전에 반드시 알아야 할 것들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p id=&quot;block-3dffd75a4d21801fa1cfd249f530c3b9&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[관리 담당 및 파이프라인 분리]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3dffd75a4d2180fc923dece89d70fb7c&quot;&gt;이전 실습에서는 Jenkins를 통해 &lt;b&gt;(1) 소스 빌드 ➔ (2) 컨테이너 빌드 ➔ (3) 배포(&lt;/b&gt;&lt;b&gt;kubectl&lt;/b&gt;&lt;b&gt;)&lt;/b&gt; 과정을 하나의 파이프라인에 통합해 구성하였습니다.&lt;/li&gt;
&lt;li id=&quot;block-3dffd75a4d218002b845f00aa38b007d&quot;&gt;배포 방식은 단순 kubectl 외에도 &lt;b&gt;Helm&lt;/b&gt;이나 &lt;b&gt;Kustomize&lt;/b&gt;를 활용해 매니페스트를 효율적으로 관리할 수 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-3dffd75a4d2180f7bdf5f136a7962efe&quot;&gt;실무에서는 업무 분장 및 관리 책임에 따라 &lt;b&gt;빌드 단계(1~2)와 배포 단계(3)를 분리하여 운영&lt;/b&gt;하기도 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p id=&quot;block-3dffd75a4d21807cbc3cef0ca66056a5&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[운영 정책 및 ArgoCD 구축 구조]&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3dffd75a4d2180f7b7e3cee4abdea7d0&quot;&gt;소스/컨테이너 빌드(1~2)는 Jenkins가 담당하고, 쿠버네티스 배포(3)는 GitOps 도구인 &lt;b&gt;ArgoCD&lt;/b&gt;가 전담하는 구조를 흔히 활용합니다.&lt;/li&gt;
&lt;li id=&quot;block-3dffd75a4d218054ba2ef6b3649a45de&quot;&gt;&lt;b&gt;1 : N 구조&lt;/b&gt;: 1개의 ArgoCD가 여러 인프라 환경(Dev, Stage, Prod)을 통합 관리&lt;/li&gt;
&lt;li id=&quot;block-3dffd75a4d21804d9f59c1234389d804&quot;&gt;&lt;b&gt;1 : 1 구조 (권장)&lt;/b&gt;: 각 인프라 환경마다 별도의 ArgoCD를 1:1로 각각 구축
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span data-token-index=&quot;0&quot;&gt;특징&lt;/span&gt;: 이중 관리의 번거로움은 있지만, 특정 환경의 장애가 타 환경으로 전파되지 않아 &lt;span data-token-index=&quot;2&quot;&gt;안전성이 높아 실무에서 더 선호&lt;/span&gt;되는 방식입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;block-3dffd75a4d218075b6a1d3f967ee0872&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. 배포 전략(Deployment Strategy) 비교 및 고려 요소&lt;/h3&gt;
&lt;div id=&quot;block-3dffd75a4d218058a002ca8d1400b7bf&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;718&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLJ80d/dJMcabyUc36/dRCnx9huQAkmUikCg2JNm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLJ80d/dJMcabyUc36/dRCnx9huQAkmUikCg2JNm0/img.png&quot; data-alt=&quot;출처: 인프런 - [지상편] 배포를 시작하기 전에 반드시 알아야 할 것들&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLJ80d/dJMcabyUc36/dRCnx9huQAkmUikCg2JNm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLJ80d%2FdJMcabyUc36%2FdRCnx9huQAkmUikCg2JNm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2534&quot; height=&quot;1422&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;718&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: 인프런 - [지상편] 배포를 시작하기 전에 반드시 알아야 할 것들&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-3dffd75a4d2180899c57f5aa9db1f4ab&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;상황과 요구조건(무중단 여부, 트래픽 제어 필요성, DB 스키마 변경 여부 등)에 따라 최적의 배포 전략을 선택해야 합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;배포 전략&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;배포 및 업데이트 메커니즘&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;주요 특징&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;유즈케이스 / 비고&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Recreate&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;기존 Pod를 모두 삭제한 후 신규 v2 Pod 생성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&amp;bull; Downtime(서비스 중단) 발생 &amp;bull; 자동 배포 및 정지/롤백 가능 &amp;bull; 트래픽 제어 불가&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;DB 스키마 변경 등으로 신&amp;middot;구 버전 동시 실행이 불가능한 경우&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;RollingUpdate&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;v1이 동작하는 상태에서 v2 Pod를 순차적으로 생성 후 v1 교체&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&amp;bull; &lt;b&gt;서비스 중단 없음 (무중단)&lt;/b&gt; &amp;bull; 배포 중 v1, v2 Pod 동시 호출 발생 &amp;bull; 자동 배포 및 정지/롤백 가능&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;일반적인 애플리케이션 무중단 배포&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Blue/Green&lt;/b&gt; (ArgoCD)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;v2 Deployment를 별도 생성 후, Service의 Selector를 v1 ➔ v2로 일괄 변경 (이후 v1 삭제)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&amp;bull; 기존 L4 레벨 배포 방식을 K8s로 구현 &amp;bull; &lt;b&gt;빠른 롤백 가능&lt;/b&gt; (수동/스크립트 제어) &amp;bull; v2 전환 순간 과도한 트래픽 유입 주의&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;운영 환경에서만 직접 테스트&lt;/b&gt;가 필요한 경우&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Canary&lt;/b&gt; (ArgoCD)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;v2 Deployment/Service/Ingress를 별도 생성하여 Ingress에서 트래픽 비율 조절 (예: v1 90% : v2 10%)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&amp;bull; &lt;b&gt;트래픽 가중치 제어 가능&lt;/b&gt; &amp;bull; 콜드 스타트 방지 및 두 버전 성능 비교 가능 &amp;bull; 배포 완료 후 v1 리소스 삭제&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;A/B 테스트&lt;/b&gt; 및 단계적 리스크 최소화 배포&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p id=&quot;block-3dffd75a4d2180ef99b1d5ceaaa8e945&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  A/B 테스트와 Canary의 차이&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3dffd75a4d218082bdb6fb67fb370433&quot;&gt;&lt;b&gt;Canary&lt;/b&gt;: 신규 버전 배포 시 리스크를 줄이기 위해 트래픽 비율을 단계적으로 늘려가는 &lt;b&gt;배포 전략&lt;/b&gt;입니다.&lt;/li&gt;
&lt;li id=&quot;block-3dffd75a4d21807fbcaedc7f384e6868&quot;&gt;&lt;b&gt;A/B 테스트&lt;/b&gt;: Canary 배포 환경을 활용하여 특정 조건(Source IP, User 계정, Language 등 &lt;b&gt;특정 헤더 값&lt;/b&gt;)에 맞춰 v2로 트래픽을 유입시켜 사용자 반응을 비교&amp;middot;검증하는 &lt;b&gt;테스트 방법론&lt;/b&gt;입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✍️ 요약 및 회고&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3dffd75a4d21802b97d8e816c69a9c7a&quot; data-ke-size=&quot;size16&quot;&gt;파이프라인 구성 시에는 관리 주체와 환경 분리(ArgoCD 1:1)를 우선적으로 고려해야 하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 전략 수립 시에는 &lt;b&gt;트래픽 제어 필요성&lt;/b&gt;과 &lt;b&gt;신&amp;middot;구 버전 동시 호출 문제(DB 영향)&lt;/b&gt; 를 기준으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Recreate, RollingUpdate, Blue/Green, Canary 중 적절한 방식을 채택하는 것이 핵심입니다.&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/51</guid>
      <comments>https://sseyeon.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 18 Sep 2026 16:22:23 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint2] #2. 손쉽게 데브옵스 환경을 구축하는 방법</title>
      <link>https://sseyeon.tistory.com/50</link>
      <description>&lt;blockquote id=&quot;block-3defd75a4d218058a5aecf3a809877f6&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p id=&quot;block-3defd75a4d2180a6ac18e18c242b83b5&quot; data-ke-size=&quot;size16&quot;&gt;[참고]&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d218044b7fecfff9c0e9ad0&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 인프런의&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d2180ea96cdfc8a76fbea2d&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d21807bb985c4bd6a575da5&quot; data-ke-size=&quot;size16&quot;&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d2180788eeff600b81d62ce&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CI/CD 서버 사전 설정(Jenkins, Docker 로그인, GitHub Fork 등)을 마친 후, CI/CD 서버에서 쿠버네티스 클러스터를 제어할 수 있도록 &lt;b&gt;인증서를 연동하고 파이프라인 배포 과제를 해결한 과정&lt;/b&gt;을 정리합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-09-17 오후 5.22.16.png&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhJfma/dJMcabevnYo/kke0vVYShHQvw0eQBieIhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhJfma/dJMcabevnYo/kke0vVYShHQvw0eQBieIhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhJfma/dJMcabevnYo/kke0vVYShHQvw0eQBieIhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhJfma%2FdJMcabevnYo%2Fkke0vVYShHQvw0eQBieIhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;974&quot; height=&quot;390&quot; data-filename=&quot;스크린샷 2026-09-17 오후 5.22.16.png&quot; data-origin-width=&quot;974&quot; data-origin-height=&quot;390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3defd75a4d2180db82a8fde0c040a5ce&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1. CI/CD 서버와 Master Node 인증서 연동 (SCP)&lt;/h3&gt;
&lt;p id=&quot;block-3defd75a4d2180cc923acd9ca92bf1d9&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Jenkins 서버에서 kubectl 명령어로 쿠버네티스 클러스터를 제어하기 위해 Master Node의 인증서 파일(/root/.kube/config)을 가져옵니다.&lt;/p&gt;
&lt;div id=&quot;block-3defd75a4d2180b8800fff9d2e180b02&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3defd75a4d218068a92beddecfceeabf&quot;&gt;&lt;b&gt;사전 체크사항&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Master Node가 정상 동작 중인지 확인&lt;/li&gt;
&lt;li&gt;반드시 root 계정이 아닌 jenkins &lt;span data-token-index=&quot;2&quot;&gt;유저 권한&lt;/span&gt;으로 작업 진행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-3defd75a4d2180a48f81f46d61c5862c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# 1. config 파일 저장 디렉토리 생성
[jenkins@cicd-server ~]$ mkdir ~/.kube

# 2. Master Node에서 인증서 복사 (SCP)
[jenkins@cicd-server ~]$ scp root@192.168.56.30:/root/.kube/config ~/.kube/
# 실행 후 fingerprint [yes] 입력 및 Master Node 비밀번호 입력&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/szaoN/dJMcahTkyD1/l3BxrVEOd5Vv001EZv6Kc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/szaoN/dJMcahTkyD1/l3BxrVEOd5Vv001EZv6Kc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/szaoN/dJMcahTkyD1/l3BxrVEOd5Vv001EZv6Kc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FszaoN%2FdJMcahTkyD1%2Fl3BxrVEOd5Vv001EZv6Kc1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;663&quot; height=&quot;115.21944&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d2180088996fd54c2949078&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ️ 연동 결과 검증&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3defd75a4d2180fd9918c2fab507e374&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;cs&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# Jenkins 유저 상태에서 클러스터 파드 목록 조회 확인
[jenkins@cicd-server ~]$ kubectl get pods -A&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3defd75a4d218094b1bfca0b51297b7e&quot;&gt;kubectl get pods -A 실행 시 전체 네임스페이스의 파드 목록이 정상 출력되면 CI/CD 서버에서의 클러스터 접근 권한 설정이 완료됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3defd75a4d21801ba0f5df5fa6ea95b7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3defd75a4d218085af5cf3913ca20963&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCyhfa/dJMcadKeasg/5W9s2Dz9j4WBgg0DTch0o1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCyhfa/dJMcadKeasg/5W9s2Dz9j4WBgg0DTch0o1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCyhfa/dJMcadKeasg/5W9s2Dz9j4WBgg0DTch0o1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCyhfa%2FdJMcadKeasg%2F5W9s2Dz9j4WBgg0DTch0o1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;647&quot; height=&quot;317.15686&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3defd75a4d2180b1a9e6f0abbb209b36&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;2. Jenkins 파이프라인 생성&lt;/h3&gt;
&lt;p id=&quot;block-3defd75a4d2180eeb4cbf2c1a8085723&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;배포 자동화를 위해 Jenkins에 다음 3가지 빌드/배포 파이프라인 아이템을 생성하였습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3defd75a4d2180f68a32ea89c5c02aeb&quot;&gt;&lt;b&gt;2121-source-build&lt;/b&gt;: 소스 코드 검증 및 애플리케이션 빌드&lt;/li&gt;
&lt;li id=&quot;block-3defd75a4d21805cbaa7e25c688e994e&quot;&gt;&lt;b&gt;2121-container-build&lt;/b&gt;: 빌드된 아티팩트를 기반으로 Docker 이미지 생성 및 레지스트리 푸시&lt;/li&gt;
&lt;li id=&quot;block-3defd75a4d2180e582ded09ada247365&quot;&gt;&lt;b&gt;2121-deploy&lt;/b&gt;: 쿠버네티스 클러스터에 매니페스트(YAML) 적용 및 배포&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;block-3defd75a4d21803b9b9bfc94e52384b9&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;3. 배포 트러블슈팅: Pod Pending/Error 원인 및 해결&lt;/h3&gt;
&lt;p id=&quot;block-3defd75a4d21804298afd6d0e8761a79&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파이프라인 실행 후 배포된 Pod가 Running 상태로 전환되지 않고 오류가 발생하는 이슈가 있었습니다.&lt;/p&gt;
&lt;div id=&quot;block-3defd75a4d21801485f4cf8cb49c85c0&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJFpQL/dJMcaf83ktp/kugOaotlM2IlmLjwaDDxcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJFpQL/dJMcaf83ktp/kugOaotlM2IlmLjwaDDxcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJFpQL/dJMcaf83ktp/kugOaotlM2IlmLjwaDDxcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJFpQL%2FdJMcaf83ktp%2FkugOaotlM2IlmLjwaDDxcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9922&quot; height=&quot;362.35815&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3defd75a4d2180beaedcecf81fbd4f94&quot;&gt;&lt;b&gt;원인 분석&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;배포 매니페스트에 정의된 pv.yaml 스토리지 설정 확인&lt;/li&gt;
&lt;li&gt;PV가 Master Node의 특정 로컬 디렉토리( path: &quot;/root/k8s-local-volume/2121&quot;)를 참조하도록 작성되어 있으나, &lt;span data-token-index=&quot;5&quot;&gt;실제 Master Node 상에 해당 디렉토리 패스가 존재하지 않아&lt;/span&gt; PVC 바인딩 및 파드 생성 실패&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-09-17 오후 5.19.48.png&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;785&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HakAA/dJMcaaUjvDa/mvbHcTHF86Qc3cn4LS7SKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HakAA/dJMcaaUjvDa/mvbHcTHF86Qc3cn4LS7SKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HakAA/dJMcaaUjvDa/mvbHcTHF86Qc3cn4LS7SKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHakAA%2FdJMcaaUjvDa%2FmvbHcTHF86Qc3cn4LS7SKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1358&quot; height=&quot;785&quot; data-filename=&quot;스크린샷 2026-09-17 오후 5.19.48.png&quot; data-origin-width=&quot;1358&quot; data-origin-height=&quot;785&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3defd75a4d21808594d3c101fe275c60&quot;&gt;&lt;b&gt;해결 조치&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Master Node에 접속하여 PV가 참조하는 디렉토리를 수동 생성&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-3defd75a4d2180baaf3ce375308093b2&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;crmsh&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# Master Node 접속 후 볼륨 마운트 경로 생성
[root@k8s-master ~]$ mkdir -p /root/k8s-local-volume/2121&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3defd75a4d2180e6b168d9d6a2384f73&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d21803db9f7d9cf03850d38&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 최종 정상 동작 확인&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d2180b19416edd0f4dbc0d0&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;디렉토리 생성 후 PV/PVC가 정상적으로 바인딩(Bound)되었으며, 2121-deploy 파이프라인 재시동 시 파드가 정상적으로 &lt;b&gt;Running&lt;/b&gt; 상태로 올라오는 것을 확인했습니다.&lt;/p&gt;
&lt;div id=&quot;block-3defd75a4d2180969c75f6b5240eaea8&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIahPb/dJMcaf83ktn/oOsnKKYqmr7VNlHN2QngA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIahPb/dJMcaf83ktn/oOsnKKYqmr7VNlHN2QngA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIahPb/dJMcaf83ktn/oOsnKKYqmr7VNlHN2QngA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIahPb%2FdJMcaf83ktn%2FoOsnKKYqmr7VNlHN2QngA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9922&quot; height=&quot;290.66345&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3defd75a4d218008a474c546861d107a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✍️ 요약 및 회고&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CI/CD 서버에서 K8s를 제어하기 위한 핵심은 &lt;b&gt;인증서(&lt;/b&gt;&lt;b&gt;config&lt;/b&gt;&lt;b&gt;) 권한 전달&lt;/b&gt;에 있으며, 로컬 볼륨(PV)을 사용하는 배포 환경에서는 &lt;b&gt;실제 노드의 물리 패스 존재 여부&lt;/b&gt;를 사전에 체크하는 것이 트러블슈팅의 핵심 포인트였습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/50</guid>
      <comments>https://sseyeon.tistory.com/50#entry50comment</comments>
      <pubDate>Thu, 17 Sep 2026 17:24:12 +0900</pubDate>
    </item>
    <item>
      <title>2026 CKA 합격 후기</title>
      <link>https://sseyeon.tistory.com/49</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;안녕하세요 ㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미루고 미루다 드디어 CKA 시험을 보게 되었고, 합격하게 되어 후기 남깁니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-09-14 오후 1.27.24.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1084&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DcoMW/dJMcaf2iMTv/Xki0Tkg8WlS94AGKIgAZLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DcoMW/dJMcaf2iMTv/Xki0Tkg8WlS94AGKIgAZLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DcoMW/dJMcaf2iMTv/Xki0Tkg8WlS94AGKIgAZLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDcoMW%2FdJMcaf2iMTv%2FXki0Tkg8WlS94AGKIgAZLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1402&quot; height=&quot;1084&quot; data-filename=&quot;스크린샷 2026-09-14 오후 1.27.24.png&quot; data-origin-width=&quot;1402&quot; data-origin-height=&quot;1084&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 베이스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;우선 저는 개발 경력 5년이지만, 실무에서는 쿠버네티스는 사용하지 않아&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿠버네티스&amp;nbsp;지식은&amp;nbsp;0&amp;nbsp;인&amp;nbsp;상태입니다&amp;nbsp;.&amp;nbsp;(레거시&amp;nbsp;시스템이라&amp;nbsp;도커도&amp;nbsp;잘&amp;nbsp;안써요&amp;nbsp;ㅠ)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;처음에는 Udemy 뭄샤드 유명한 강의가 있어, 구매 후 수강하였는데&lt;br /&gt;가뜩이나&amp;nbsp;모르는&amp;nbsp;내용인데&amp;nbsp;한글자막이&amp;nbsp;없으니&amp;nbsp;이해가&amp;nbsp;하나도&amp;nbsp;안되더라구요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;그러던&amp;nbsp;중에,&amp;nbsp;어떤&amp;nbsp;블로그&amp;nbsp;후기에서&amp;nbsp;일프로님&amp;nbsp;CKA&amp;nbsp;인프런&amp;nbsp;강의를&amp;nbsp;접하게&amp;nbsp;되어&amp;nbsp;바로&amp;nbsp;수강&amp;nbsp;시작했습니다.&lt;br /&gt;&lt;a href=&quot;https://www.inflearn.com/course/certified-kubernetes?cid=339687&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.inflearn.com/course/certified-kubernetes?cid=339687&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;물론 뭄샤드 보다는 이해가 잘 되었지만,&lt;br /&gt;CKA&amp;nbsp;강의를&amp;nbsp;2번을&amp;nbsp;돌려&amp;nbsp;들어도,&amp;nbsp;베이스가&amp;nbsp;제로인&amp;nbsp;상태라&amp;nbsp;머릿속엔&amp;nbsp;물음표만&amp;nbsp;남더라구요.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;하지만 설명이 일목요연하고, 설명하시는 스타일도 여타 강의들과는 다르게 계속 듣게 되어서&lt;br /&gt;에잇&amp;nbsp;이왕&amp;nbsp;공부하는거&amp;nbsp;확실히&amp;nbsp;이해하고&amp;nbsp;듣자&amp;nbsp;!!&amp;nbsp;하구&amp;nbsp;Sprint&amp;nbsp;1.2&amp;nbsp;강의도&amp;nbsp;구매하였습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;결론적으론&amp;nbsp;아주&amp;nbsp;잘&amp;nbsp;한&amp;nbsp;선택이었구요&amp;nbsp;~~!&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;2.&amp;nbsp;시험&amp;nbsp;후기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빠른시일내에 자격증 취득하고 싶어서 Sprint 1 까지만 듣고&lt;br /&gt;CKA 문제풀이를 시작했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;여기서 가장 중요한 건 &amp;lsquo;직접 손으로 쳐보며 익숙해지는 것&amp;rsquo;이었어요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;개념만 외우려고 하면 금방 잊어버리기 때문에, 강의에 나오는 실습 환경과 문제들을 완전히 제 것으로 만들 수 있을 때까지 손에 익히는 연습을 꾸준히 했습니다.&lt;/p&gt;
&lt;p data-path-to-node=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;22&quot; data-ke-size=&quot;size16&quot;&gt;그리고 카페에 올라오는 최신 업데이트 유형이나 팁들도 놓치지 않고 꼼꼼히 체크했어요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;시험장 입장 직전까지도 모르는거 나오면 어쩌지&lt;br /&gt;하며 내내 떨었는데 문제 보자마자 안심했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;손에 익을 정도로 실습 연습을 해둔 덕분에 당황하지 않고 차근차근 풀어나갈 수 있었습니다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. 마치며&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공부하면서 막막할 때도 많았는데, 일프로님 강의 덕분에 노베이스 상태에서도 차근차근 개념을 잡고 합격까지 올 수 있었던 것 같아요.&lt;/p&gt;
&lt;p data-path-to-node=&quot;33&quot; data-ke-size=&quot;size16&quot;&gt;이제 남은 Sprint 2와 추가로 구매한 Sprint 3까지 열심히 달려서 완강할 생각입니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이 글을 보시는 모든 분들 합격하세요 ~~  &lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/49</guid>
      <comments>https://sseyeon.tistory.com/49#entry49comment</comments>
      <pubDate>Mon, 14 Sep 2026 14:32:50 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint1] #8. Component 동작으로 이해하기</title>
      <link>https://sseyeon.tistory.com/48</link>
      <description>&lt;blockquote data-ke-style=&quot;style2&quot;&gt;[참고]&lt;br /&gt;본 글은 인프런의&lt;br /&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;br /&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c9fd75a4d21803da30ce4b679dd304b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 컴포넌트 구성&lt;/h3&gt;
&lt;div id=&quot;block-3c9fd75a4d2180ebb779f5d0c553388d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;621&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Pfilm/dJMcaiR7mdw/ZhxennFpecJKlQGb0NRk9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Pfilm/dJMcaiR7mdw/ZhxennFpecJKlQGb0NRk9k/img.png&quot; data-alt=&quot;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;amp;gt; Component 동작으로 이해하기 &amp;amp;gt; 주요 컴포넌트 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Pfilm/dJMcaiR7mdw/ZhxennFpecJKlQGb0NRk9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPfilm%2FdJMcaiR7mdw%2FZhxennFpecJKlQGb0NRk9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;341.57535&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;621&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;gt; Component 동작으로 이해하기 &amp;gt; 주요 컴포넌트 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-3c9fd75a4d2180df9886f7b336f4e3ed&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Resource 계층 (논리적 리소스 및 스토리지)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180359567dd50439ab583&quot;&gt;&lt;b&gt;Cluster level &amp;amp; Namespace level&lt;/b&gt;: 클러스터 전체에 적용되는 Namespace, PV와 그 하위에서 격리되어 관리되는 리소스들로 구분됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21801d9240dd5b6a7e533e&quot;&gt;&lt;b&gt;Controller&lt;/b&gt;: HPA ➔ Deployment ➔ ReplicaSet으로 이어지며 타 컨트롤러나 오브젝트를 상태 정의에 맞게 제어합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21802c938edd7b18da497b&quot;&gt;&lt;b&gt;Object&lt;/b&gt;: Service, ConfigMap, Secret 등이 Pod와 연결되어 단독 인프라 기능을 수행하며, 데이터 보존을 위해 Pod ➔ PVC ➔ PV ➔ 외부 볼륨 솔루션(NFS, Ceph, AWS EBS 등)으로 이어집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d2180a2802fc105b08812e3&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Kubernetes Cluster 계층 (클러스터 내부 컴포넌트)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d21802fae45f6d2a6caa674&quot;&gt;&lt;b&gt;Control Plane Component&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d21807792abebb2dfbf2ad0&quot;&gt;kube-apiserver: 중앙에서 모든 API 요청을 수신하고 통신을 중계합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d218096a1b4e8b81db1ab80&quot;&gt;etcd: 클러스터의 모든 상태 정보(Database)를 안전하게 저장합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21803a93c3cb92c54545f9&quot;&gt;kube-controller-manager &amp;amp; kube-scheduler: 파드의 스케줄링 및 컨트롤러 상태를 관리합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180eeb45bddb1518b5558&quot;&gt;&lt;b&gt;Worker Component &amp;amp; Addon Pod&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180d88ca5f29769abf15e&quot;&gt;노드 네트워킹을 위한 kube-proxy와 실제 사용자의 User App Pod가 동작합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180339fcec76dd1604f07&quot;&gt;클러스터 기능을 확장하는 metrics-server, coredns, calico, kube-dashboard 등이 Addon 파드로 설치됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d2180479e36c859ebd476a2&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. VM 계층 (물리/가상 노드 및 실행 도구)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180719ed8d90c8b6c5f72&quot;&gt;&lt;b&gt;Master Node&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d21801ba42efe189d0181df&quot;&gt;kubectl: 인증서(/root/.kube/config)를 사용해 kube-apiserver로 명령을 전달합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21806b96bdea3714fcb005&quot;&gt;kubeadm: 정적 파드 Manifests(/etc/kubernetes/manifests)를 통해 컨트롤 플레인을 구축합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180f2a717fb7dd688f99f&quot;&gt;kubelet: kube-apiserver의 요청을 받아 컨테이너 런타임(containerd)에 실제 컨테이너 생성을 명령합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21808d9ebdff82ed0bd061&quot;&gt;&lt;b&gt;Worker Node&lt;/b&gt;: kubeadm join을 통해 클러스터에 참여하며 kubelet과 containerd가 실행되어 파드를 띄웁니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180b0ab70ec6e3a2732c7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Resource 확인&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d2180299a29c9b22a674280&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;elixir&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;$ kubectl api-resources&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180a3a7f4f3f847ffbfb8&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d2180a499c7d1b0a6a996b1&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;936&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo32Gt/dJMcaiEzzrX/l0PkWAwvMHvCeKsihb6D50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo32Gt/dJMcaiEzzrX/l0PkWAwvMHvCeKsihb6D50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo32Gt/dJMcaiEzzrX/l0PkWAwvMHvCeKsihb6D50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo32Gt%2FdJMcaiEzzrX%2Fl0PkWAwvMHvCeKsihb6D50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2360&quot; height=&quot;1726&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;936&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180da97e0d88ec7e06828&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Cluster 주요 컴포넌트 로그 확인&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d2180829b58db7ae3390522&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;gams&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// 주요 컴포넌트 로그 보기 (kube-system)
$ kubectl get pods -n kube-system
$ kubectl logs -n kube-system etcd-k8s-master
$ kubectl logs -n kube-system kube-scheduler-k8s-master
$ kubectl logs -n kube-system kube-apiserver-k8s-master&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180c1b2c3c5089ffb58e0&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d2180668babff3641065ee1&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YumnF/dJMcaiEzzrM/GWIT5tV3yD6SEkDy6CjYO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YumnF/dJMcaiEzzrM/GWIT5tV3yD6SEkDy6CjYO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YumnF/dJMcaiEzzrM/GWIT5tV3yD6SEkDy6CjYO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYumnF%2FdJMcaiEzzrM%2FGWIT5tV3yD6SEkDy6CjYO0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;176.29614&quot; data-origin-width=&quot;1158&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c9fd75a4d2180c4bb95e8616bc655be&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bk0QzM/dJMcacLbRXd/gFVpzXxLf2KzWcHlSxTbzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bk0QzM/dJMcacLbRXd/gFVpzXxLf2KzWcHlSxTbzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bk0QzM/dJMcacLbRXd/gFVpzXxLf2KzWcHlSxTbzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbk0QzM%2FdJMcacLbRXd%2FgFVpzXxLf2KzWcHlSxTbzK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3558&quot; height=&quot;1692&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c9fd75a4d21808bbb55da7222859f06&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/08i5t/dJMcadpEvqk/FSscUXljr8izangq2gSNC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/08i5t/dJMcadpEvqk/FSscUXljr8izangq2gSNC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/08i5t/dJMcadpEvqk/FSscUXljr8izangq2gSNC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F08i5t%2FdJMcadpEvqk%2FFSscUXljr8izangq2gSNC0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3554&quot; height=&quot;482&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c9fd75a4d2180269e1be4cbec4dad01&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;571&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcozz7/dJMcacLbRW7/kRWo2nPdsvQfTvAEA55X8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcozz7/dJMcacLbRW7/kRWo2nPdsvQfTvAEA55X8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcozz7/dJMcacLbRW7/kRWo2nPdsvQfTvAEA55X8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcozz7%2FdJMcacLbRW7%2FkRWo2nPdsvQfTvAEA55X8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;3554&quot; height=&quot;1588&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;571&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180368243f2aac08bf5cc&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  Master Node 파일 위치&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d21808b8744da25a19afd71&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// 쿠버네티스 인증서 위치
$ cd /etc/kubernetes
$ ls /root/.kube/config

// Control Plane Component Pod 생성 yaml 파일 위치
$ ls /etc/kubernetes/manifests

// 전체 Pod 로그
/var/log/pods/&amp;lt;namespace_&amp;lt;pod-name&amp;gt;_&amp;lt;uid&amp;gt;/&amp;lt;number&amp;gt;.log
/var/log/containers/&amp;lt;pod-name&amp;gt;_&amp;lt;namespace&amp;gt;_&amp;lt;container-name&amp;gt;_&amp;lt;container-id&amp;gt;.log&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d21800da220f26625e6fef0&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d218020bacdcc4aa5169d9c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XU5p4/dJMcaiEzzqY/huJgXInjPu75lJsmBKZ421/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XU5p4/dJMcaiEzzqY/huJgXInjPu75lJsmBKZ421/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XU5p4/dJMcaiEzzqY/huJgXInjPu75lJsmBKZ421/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXU5p4%2FdJMcaiEzzqY%2FhuJgXInjPu75lJsmBKZ421%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.84375&quot; height=&quot;72.811424&quot; data-origin-width=&quot;870&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c9fd75a4d2180f38c64cf140892fa39&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;68&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bikW64/dJMcacLbRWK/6aj6wePmVMGKuiKp3ixcV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bikW64/dJMcacLbRWK/6aj6wePmVMGKuiKp3ixcV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bikW64/dJMcacLbRWK/6aj6wePmVMGKuiKp3ixcV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbikW64%2FdJMcacLbRWK%2F6aj6wePmVMGKuiKp3ixcV1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.7656&quot; height=&quot;38.593597&quot; data-origin-width=&quot;1240&quot; data-origin-height=&quot;68&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180bd9facdb6cad0d5d6f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  트러블 슈팅&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c9fd75a4d21803e8793eeff6d3359ea&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// kubelet 상태 확인
1) systemctl status kubelet       // systemctl (restart or start) kubelet
2) journalctl -u kubelet | tail -10

// 상태 확인 -&amp;gt; 상세 로그 확인 -&amp;gt; 10분 구글링 -&amp;gt; VM 재기동 -&amp;gt; Cluster 재설치 -&amp;gt;  답을 찾을 때 까지 구글링

// containerd 상태 확인
1) systemctl status containerd
2) journalctl -u containerd | tail -10

// 노드 상태 확인
1) kubectl get nodes -o wide
2) kubectl describe node k8s-master

// Pod 상태 확인
1) kubectl get pods -A -o wide
// Event 확인 (기본값: 1h)
2-1) kubectl get events -A
2-2) kubectl events -n anotherclass-123 --types=Warning  (or Normal)
// Log 확인
3-1) kubectl logs -n anotherclass-123 &amp;lt;pod-name&amp;gt; --tail 10    // 10줄 만 조회하기
3-2) kubectl logs -n anotherclass-123 &amp;lt;pod-name&amp;gt; -f           // 실시간으로 조회 걸어 놓기
3-3) kubectl logs -n anotherclass-123 &amp;lt;pod-name&amp;gt; --since=1m   // 1분 이내에 생성된 로그만 보기&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c9fd75a4d218086a104f588c2227e4a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Pod 생성 및 probe 동작&lt;/h3&gt;
&lt;div id=&quot;block-3c9fd75a4d2180fb8e7af40d51d49636&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;704&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVSxOj/dJMcaiR7mdb/5xv2rv2sbn5jBFbzD6wm3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVSxOj/dJMcaiR7mdb/5xv2rv2sbn5jBFbzD6wm3k/img.png&quot; data-alt=&quot;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;amp;gt; Component 동작으로 이해하기 &amp;amp;gt; Pod 생성 및 probe 동작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVSxOj/dJMcaiR7mdb/5xv2rv2sbn5jBFbzD6wm3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVSxOj%2FdJMcaiR7mdb%2F5xv2rv2sbn5jBFbzD6wm3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;341.561&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;704&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;gt; Component 동작으로 이해하기 &amp;gt; Pod 생성 및 probe 동작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p id=&quot;block-3c9fd75a4d21807d93f1ee85a2795ccb&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스에서 사용자가 배포 명령을 내렸을 때, 컨트롤 플레인 내부에서 &lt;b&gt;Pod가 생성되는 메커니즘&lt;/b&gt;과 노드 단에서 &lt;b&gt;Probe 검사가 수행되는 전체 흐름&lt;/b&gt;을 보여주는 다이어그램입니다.&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180288d2dcb6e8e73ad62&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Resource 계층 (배포 관련 오브젝트 및 속성)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d218024914cf48350ac44ea&quot;&gt;&lt;b&gt;Deployment &amp;amp; ReplicaSet&lt;/b&gt;: Deployment 정의에 따라 ReplicaSet이 생성되고, 이는 지정된 개수만큼의 Pod를 관리합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21800da6c6e07238be261d&quot;&gt;&lt;b&gt;Pod 핵심 설정 속성&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180ad8af7c033003bb7fc&quot;&gt;&lt;b&gt;nodeSelector&lt;/b&gt;: 특정 노드(예: Master Node 등)를 지정하여 Pod가 배포될 위치를 결정합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d218021a282efc7b043f85b&quot;&gt;&lt;b&gt;resources&lt;/b&gt;: CPU, Memory의 requests 및 limits 자원 사용량을 설정합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180e5941cfb830cd930a4&quot;&gt;&lt;b&gt;probe&lt;/b&gt;: 컨테이너의 상태 체크(Startup, Readiness, Liveness) 메커니즘을 정의합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d218087bfc1c7c0f545469b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Control Plane 계층 (Pod 생성 워크플로우)&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180118a07dd32dc73f0cd&quot;&gt;&lt;b&gt;요청 수신&lt;/b&gt;: kubectl 명령을 통해 kube-apiserver로 &lt;b&gt;Deployment 생성 API&lt;/b&gt;가 호출됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d218024b229ee6c2a6f2104&quot;&gt;&lt;b&gt;상태 저장&lt;/b&gt;: kube-apiserver는 매 요청 및 클러스터 변경 사항을 &lt;b&gt;etcd&lt;/b&gt;&lt;b&gt; Database&lt;/b&gt;에 기록하고 업데이트합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21808485fcecdc8f7ea378&quot;&gt;&lt;b&gt;컨트롤러 동작&lt;/b&gt;: kube-controller-manager가 etcd 상태 변화를 모니터링하다가 &lt;b&gt;ReplicaSet 및 Pod 생성 API&lt;/b&gt;를 수행합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21807aa37ae12d45415c3a&quot;&gt;&lt;b&gt;스케줄링&lt;/b&gt;: kube-scheduler가 노드의 자원 상태를 모니터링하여, 생성될 Pod를 어느 노드에 할당할지 결정(&lt;b&gt;노드 스케줄링&lt;/b&gt;)합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-3c9fd75a4d218023a247fe185f5122e1&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Node 계층 (컨테이너 생성 및 헬스 체크)&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180899c53dbfe7b9f5e8f&quot;&gt;&lt;b&gt;노드 모니터링&lt;/b&gt;: 해당 노드의 kubelet은 kube-apiserver를 감시하다가 자신에게 할당된 Pod 정보가 넘어오면 이를 감지합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180dabda7fd00852b9d48&quot;&gt;&lt;b&gt;컨테이너 실행&lt;/b&gt;: kubelet이 로컬의 컨테이너 런타임(containerd)에 &lt;b&gt;컨테이너 생성 요청&lt;/b&gt;을 전달하여 실제 프로세스를 띄웁니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21800bb9bcdca146553bd0&quot;&gt;&lt;b&gt;Probe 체크 (상태 검사)&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d21809092bcd65f0601bdd5&quot;&gt;컨테이너가 띄워진 후, kubelet이 설정된 &lt;b&gt;probe&lt;/b&gt;&lt;b&gt; 기준에 따라 컨테이너 상태를 직접 주기적으로 검사&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180bf80e6f40feac1cb11&quot;&gt;&lt;b&gt;Startup Probe&lt;/b&gt;: 앱 기동 완료 여부 확인 (실패 시 재기동)&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21802fb482f2220be81399&quot;&gt;&lt;b&gt;Readiness Probe&lt;/b&gt;: 트래픽 수신 준비 완료 여부 확인 (실패 시 서비스 엔드포인트 제외)&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180aaa02befc81cdca001&quot;&gt;&lt;b&gt;Liveness Probe&lt;/b&gt;: 프로세스 생존 상태 확인 (실패 시 컨테이너 재시작)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c9fd75a4d21805ab926d6057e36278b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Service 동작&lt;/h3&gt;
&lt;div id=&quot;block-3c9fd75a4d21800dbb53e6f48cc27053&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QcOnq/dJMcacLbRWL/Fb3vjplhDkZj7sf85Wl5gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QcOnq/dJMcacLbRWL/Fb3vjplhDkZj7sf85Wl5gK/img.png&quot; data-alt=&quot;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;amp;gt; Component 동작으로 이해하기 &amp;amp;gt; Service 동작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QcOnq/dJMcacLbRWL/Fb3vjplhDkZj7sf85Wl5gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQcOnq%2FdJMcacLbRWL%2FFb3vjplhDkZj7sf85Wl5gK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;341.0758&quot; data-origin-width=&quot;1451&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;gt; Component 동작으로 이해하기 &amp;gt; Service 동작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180c399f6e1bec2f7f306&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스에서 외부 사용자가 호출한 API 트래픽이 Service(NodePort)를 거쳐 최종 목적지인 &lt;b&gt;Pod의 컨테이너&lt;/b&gt;까지 전달되는 전체 네트워크 포워딩 메커니즘을 보여주는 다이어그램입니다.&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180df82edeca82574d44c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Resource 계층 (서비스 및 네트워크 설정)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180929c4fe076474c801f&quot;&gt;&lt;b&gt;Service (nodePort)&lt;/b&gt;: NodePort 타입의 Service 오브젝트가 생성되어 외부 트래픽을 받기 위한 포트(예: 31231)를 노드 전체에 개방합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180018107e44c84cd52ea&quot;&gt;&lt;b&gt;Pod 연결&lt;/b&gt;: Service의 selector 조건과 Pod의 labels가 매칭되어, 진입한 트래픽이 올바른 타겟 파드로 라우팅될 수 있도록 연결 고리를 형성합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d21808c84ded330d61195b9&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Control Plane &amp;amp; Worker 계층 (네트워크 정책 구성)&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d218034bfe7d358565907b8&quot;&gt;&lt;b&gt;Network 생성 요청&lt;/b&gt;: kube-apiserver에 Service 생성 요청이 등록되면, 각 노드의 kube-proxy가 이를 감지합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21808ca301ce6f82b70f6e&quot;&gt;&lt;b&gt;CNI 연동 (calico)&lt;/b&gt;: 클러스터 내부 및 Pod 간의 네트워크 통신 환경은 &lt;b&gt;Addon Pod&lt;/b&gt;로 설치된 CNI 플러그인(calico)을 통해 제어됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d218077aff2cc4a805311ed&quot;&gt;&lt;b&gt;iptables&lt;/b&gt;&lt;b&gt; 규칙 업데이트&lt;/b&gt;: kube-proxy는 Service 및 Endpoints 정보를 기반으로 노드의 OS &lt;b&gt;iptables&lt;/b&gt;&lt;b&gt; 라우팅 규칙을 자동으로 업데이트&lt;/b&gt;합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-3c9fd75a4d21802cb19cf55ba66af334&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Node 계층 (실제 트래픽 흐름)&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180698357ec3016643e8a&quot;&gt;&lt;b&gt;외부 API 호출&lt;/b&gt;: 외부 클라이언트가 http://Node_IP:31231/version 형태로 노드의 개방된 포트(31231)로 API 요청을 보냅니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180a08be6d038e3a9528f&quot;&gt;&lt;b&gt;iptables 포워딩&lt;/b&gt;: 노드의 OS 단 iptables가 들어온 요청(port 31231)을 낚아채어, 해당 서비스(api-tester-1231)와 매핑된 Pod IP 및 포트(targetPort)로 트래픽을 변환(NAT)합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21806cb345ef03385b2f4e&quot;&gt;&lt;b&gt;컨테이너 전달&lt;/b&gt;: 변환된 트래픽이 최종적으로 container로 전달되어 애플리케이션의 응답을 처리하게 됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c9fd75a4d2180cda111eaa27c5f0b23&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Secret 동작&lt;/h3&gt;
&lt;div id=&quot;block-3c9fd75a4d21805486d9efb7d2cef629&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;701&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cS3ItU/dJMcadpEvp6/i8pB2RdV7zvg571eqOXUD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cS3ItU/dJMcadpEvp6/i8pB2RdV7zvg571eqOXUD1/img.png&quot; data-alt=&quot;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;amp;gt; Component 동작으로 이해하기 &amp;amp;gt; Secret 동작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cS3ItU/dJMcadpEvp6/i8pB2RdV7zvg571eqOXUD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcS3ItU%2FdJMcadpEvp6%2Fi8pB2RdV7zvg571eqOXUD1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;340.34003&quot; data-origin-width=&quot;1450&quot; data-origin-height=&quot;701&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;gt; Component 동작으로 이해하기 &amp;gt; Secret 동작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180a8b7cfd6f85eff3a94&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Secret 데이터를 &lt;b&gt;볼륨(Volume) 마운트&lt;/b&gt; 방식으로 Pod에 주입했을 때의 데이터 동기화 메커니즘과 메모리 기반 마운트의 특징을 보여주는 다이어그램입니다.&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180368301d4e03377d96c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Resource 계층 (Secret과 Volume 바인딩)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d218001855ad9a6d16bf050&quot;&gt;&lt;b&gt;Secret ➔ Pod (volume)&lt;/b&gt;: Secret 오브젝트에 정의된 data가 Pod 내부의 volume 영역으로 연결되어 있습니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180e98313ef3b54ee5afc&quot;&gt;&lt;b&gt;내용 수정 시 동기화&lt;/b&gt;: Secret의 data 내용이 수정될 때, 볼륨으로 연결된 파드는 이를 동적으로 감지하여 반영할 준비를 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d21804a9328dcbc69b37b72&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Control Plane &amp;amp; Worker 계층 (변경 사항 동기화)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180259c53f4fa8f816faa&quot;&gt;&lt;b&gt;주기적 변경 확인&lt;/b&gt;: 해당 노드의 kubelet이 kube-apiserver를 통해 Secret 오브젝트의 변경 사항을 주기적으로 감시(Poll/Watch)합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d218094b12fd8bbb917b7e2&quot;&gt;&lt;b&gt;볼륨 내용 업데이트&lt;/b&gt;: Secret 값이 변경되면 kubelet이 파드를 재시작하지 않고도, 컨테이너 내부로 마운트되어 있는 해당 파일 영역을 &lt;b&gt;실시간으로 업데이트&lt;/b&gt;합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d2180158c46e02081dce19c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Node 계층 (Memory 기반 마운트의 데이터 보안 특징)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d21806ab586ed9322e2b970&quot;&gt;&lt;b&gt;Memory(tmpfs) 마운트&lt;/b&gt;: 노드의 물리 디스크가 아닌 &lt;b&gt;노드의 메모리(Memory) 영역&lt;/b&gt;에 Secret 파일(postgresql-info.yaml)을 생성한 후 컨테이너 내부 지정 경로(/usr/src/myapp/datasource/postgresql-info.yaml)로 마운트합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180dc9c68fcd0a750cac8&quot;&gt;&lt;b&gt;휘발성 특징 (전원 오프 시 데이터 삭제)&lt;/b&gt;: 메모리 영역을 활용하기 때문에 &lt;b&gt;서버 전원이 꺼지면 메모리에 올려두었던 데이터가 함께 삭제&lt;/b&gt;되어, 물리 디스크에 보안 데이터 흔적이 남지 않는 보안적 특성을 가집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c9fd75a4d218085a7e4e37abe92d726&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;HPA 동작&lt;/h3&gt;
&lt;div id=&quot;block-3c9fd75a4d2180b8a8eeccec368494c7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;705&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xtIJd/dJMcacLbRWJ/0Fi8XeAoK4DNUsDsDK6YSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xtIJd/dJMcacLbRWJ/0Fi8XeAoK4DNUsDsDK6YSk/img.png&quot; data-alt=&quot;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;amp;gt; Component 동작으로 이해하기 &amp;amp;gt; HPA 동작&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xtIJd/dJMcacLbRWJ/0Fi8XeAoK4DNUsDsDK6YSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxtIJd%2FdJMcacLbRWJ%2F0Fi8XeAoK4DNUsDsDK6YSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;341.8106&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;705&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처: [지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 &amp;gt; Component 동작으로 이해하기 &amp;gt; HPA 동작&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d21806ba1c1da25af0d4a2d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클러스터 내 부하(CPU, Memory 등)를 감지하여 Pod 수량을 자동으로 조절하는 &lt;b&gt;HorizontalPodAutoscaler(HPA)의 전체 매트릭 수집 및 스케일링 흐름&lt;/b&gt;을 보여주는 다이어그램입니다.&lt;/p&gt;
&lt;p id=&quot;block-3c9fd75a4d2180b09804f64e65ab44e6&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. Resource 계층 (오토스케일링 대상 및 조건)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180198531e5d7d826c632&quot;&gt;&lt;b&gt;HPA (metrics)&lt;/b&gt;: HPA 컨트롤러가 Target으로 지정된 Deployment의 리소스 사용 상태를 감시하며 스케일아웃/인 조건(임계값)을 제어합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180a9b061d5754e49cb6d&quot;&gt;&lt;b&gt;Deployment 제어&lt;/b&gt;: HPA 조건에 따라 Deployment의 replicas 수량을 변경하여 Pod 개수를 늘리거나 줄입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c9fd75a4d2180309770cd2a334aa1ea&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. Control Plane &amp;amp; Worker 계층 (메트릭 연동 및 스케일링)&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180b381deeb5cd3f424a3&quot;&gt;&lt;b&gt;메트릭 수집 (metrics-server)&lt;/b&gt;: Addon Pod로 설치된 metrics-server가 각 노드의 kubelet으로부터 수집된 파드별 CPU/메모리 사용 데이터를 집계합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d21808e9627cb37308ef080&quot;&gt;&lt;b&gt;임계값 비교 (&lt;/b&gt;&lt;b&gt;kube-controller-manager&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d2180adbd82d6e6beb4bdeb&quot;&gt;HPA 컨트롤러가 포함된 kube-controller-manager가 kube-apiserver를 통해 metrics-server에 요청을 보내 &lt;b&gt;15초 주기&lt;/b&gt;로 현재 사용량 매트릭을 조회합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d218060904cfd702a43a199&quot;&gt;조회한 매트릭과 HPA에 설정된 임계값(metrics)을 비교합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180469a21f1375c8b06e7&quot;&gt;&lt;b&gt;스케일링 명령 수행&lt;/b&gt;: 임계치를 초과하거나 미달할 경우, HPA 컨트롤러가 Deployment의 replicas 수치를 조절하여 파드 확장을 명령합니다. (전체 반응 시간: &lt;b&gt;1~85초&lt;/b&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-3c9fd75a4d2180939f31f4024a3a4e52&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Node 계층 (실제 자원 메트릭 조회)&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c9fd75a4d21804ea4addc260822117e&quot;&gt;&lt;b&gt;컨테이너 자원 조회&lt;/b&gt;: 각 노드의 kubelet이 containerd 런타임 및 cgroup을 통해 파드 내 컨테이너의 &lt;b&gt;CPU/Memory 사용량을 10초 주기&lt;/b&gt;로 조회합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c9fd75a4d2180c1859beead1678322d&quot;&gt;&lt;b&gt;자원 정보 집계&lt;/b&gt;: kubelet은 조회된 자원 사용량 메트릭을 &lt;b&gt;60초 주기&lt;/b&gt;로 metrics-server로 전송 및 수집시킵니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/48</guid>
      <comments>https://sseyeon.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 27 Aug 2026 13:41:03 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint1] #7. Application 기능으로 이해하기#3 - PV/PVC, Deployment, Service, HPA</title>
      <link>https://sseyeon.tistory.com/47</link>
      <description>&lt;blockquote id=&quot;block-3c3fd75a4d21804f8278f5c7702cc1e2&quot; data-ke-style=&quot;style2&quot;&gt;[참고]&lt;br /&gt;본 글은 인프런의&lt;br /&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;br /&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c7fd75a4d2180bf9203e28f5f79529c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;PV, PVC 기본 개념&lt;/h3&gt;
&lt;p id=&quot;block-3c8fd75a4d218041b6bde28ab167fbd6&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;컨테이너 내부에서만 데이터를 저장하면 파드(Pod)가 재시작되거나 삭제될 때 내부 파일도 함께 사라집니다. 데이터의 영구적 보존을 위해 스토리지 오브젝트인 &lt;b&gt;PV&lt;/b&gt;와 &lt;b&gt;PVC&lt;/b&gt;가 필요합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d2180f3b9f5f3fbfbbcf448&quot;&gt;&lt;b&gt;PV (PersistentVolume)&lt;/b&gt;: 클러스터 내의 실제 물리/논리 스토리지 자원&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d218023989ff66062d328ea&quot;&gt;&lt;b&gt;PVC (PersistentVolumeClaim)&lt;/b&gt;: 사용자가 PV를 할당받기 위해 전달하는 요청서&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d21807f816cde9aaaf5df08&quot;&gt;&lt;b&gt;용량 매칭 규칙&lt;/b&gt;: PVC의 resource.request.storage 값과 PV의 capacity.storage 값은 &lt;b&gt;동일하게 설정&lt;/b&gt;해야 정상 바인딩됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d2180aaa792fe3eb142cebe&quot;&gt;&lt;b&gt;nodeAffinity&lt;/b&gt;&lt;b&gt; 설정 이유&lt;/b&gt;: PV에서 특정 노드를 지정하는 설정입니다. 파드가 데이터가 존재하지 않는 다른 노드에 생성되는 현상을 방지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-3c8fd75a4d2180e2a663dd6f5f4f4722&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3SsnQ/dJMcaf8MvMS/UemGkWtkHEY2EP9QdXNon1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3SsnQ/dJMcaf8MvMS/UemGkWtkHEY2EP9QdXNon1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3SsnQ/dJMcaf8MvMS/UemGkWtkHEY2EP9QdXNon1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3SsnQ%2FdJMcaf8MvMS%2FUemGkWtkHEY2EP9QdXNon1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;704&quot; height=&quot;396&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d2180ada731e12482c0b86b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;hostPath&lt;/b&gt; : PV, PVC를 거치지 않고 Pod에서 노드의 파일 시스템에 직접 연결하는 Pod 의 volumes.hostPath 속성도 존재합니다. 하지만 HostPath 볼륨에는 많은 보안 위험이 있어, 쿠버네티스 공식 문서에서는, 가능하면 사용하지 않을 것을 권장합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d2180a48c05e51a1a0b95b5&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ️&amp;nbsp;동작 확인&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d21806cb34adbf659979bda&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;파일 생성 API 호출&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d2180879d8ac22c6e1d2854&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;경로별 생성 파일 확인&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d218071bc90f96ebdcc8f18&quot;&gt;&lt;b&gt;Pod 내 비마운트 경로: &lt;/b&gt;&lt;b&gt;/usr/src/myapp/tmp&lt;/b&gt;&lt;b&gt; (파드 삭제 시 소멸)&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d21808c897ef59cf7caf5bc&quot;&gt;&lt;b&gt;Pod 내 VolumeMount 경로: &lt;/b&gt;&lt;b&gt;/usr/src/myapp/files/dev&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d218045b76ac69c0e4cf282&quot;&gt;&lt;b&gt;PV Volume 저장 경로: &lt;/b&gt;&lt;b&gt;/root/k8s-local-volume/1231&lt;/b&gt;&lt;b&gt; (실제 노드 경로)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d2180bbb882f0e23f455ba9&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;Pod 삭제 후 PV Volume 확인&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;block-3c8fd75a4d2180a3b013f3092e2649a1&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Deployment 기본 개념 (배포 및 업데이트 전략)&lt;/h3&gt;
&lt;div id=&quot;block-3c8fd75a4d218092bdebe391fcd21348&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;663&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o1hsg/dJMcahMlY9u/YzAsvZkfdhiFKPSNArq9B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o1hsg/dJMcahMlY9u/YzAsvZkfdhiFKPSNArq9B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o1hsg/dJMcahMlY9u/YzAsvZkfdhiFKPSNArq9B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo1hsg%2FdJMcahMlY9u%2FYzAsvZkfdhiFKPSNArq9B0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;364.66455&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;663&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d21807c9828d46ecec4d3eb&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Deployment는 Pod의 생성 및 업데이트를 관리합니다. Deploy의 spec.template 하위 설정이 하나라도 변경되면 자동으로 업데이트 프로세스가 수행됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d218027a44ef05e05a9b7e8&quot;&gt;Deployment Update 시 ReplicaSet 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d218057965dde874ac13df7&quot;&gt;새로운 이름의 replicaset 을 만듦&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d2180c09b4ed87e194b4119&quot;&gt;새(api-tester-1231-2xxxx) replicas : 2로 설정, 기존(api-tester-1231-1xxxx) replicas : 0 으로 설정&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d21800aa84cc0e897e2bda2&quot;&gt;그럼 이전 pod 들은 삭제가 되는데, 기존 replicaset 은 그대로 있음 &amp;rarr; 새버전의 문제가 생겨 롤백을 해야할 경우 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;p id=&quot;block-3c8fd75a4d2180dc8dccea933cef91d0&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Recreate / RollingUpdate 두가지 방식에 따라 업데이트가 진행되는 과정이 다릅니다&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;배포 방식&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;동작 방식&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Recreate&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;기존 파드를 모두 일시 삭제한 후, 새 파드들을 동시에 생성&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;자원 중복 사용 없음&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;새 파드 기동 완료까지 &lt;b&gt;서비스 중단(Downtime)&lt;/b&gt; 발생&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;RollingUpdate&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;새 파드를 1개 생성하여 기동 완료되면 기존 파드 1개를 순차 삭제 반복&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;무중단 배포&lt;/b&gt; 가능&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;배포 중 순간 자원 사용량 증가(최대 150%), &lt;b&gt;두 버전 혼재 호출&lt;/b&gt; 발생&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d218039bef1ea3879e162db&quot;&gt;&lt;b&gt;두 버전 혼재 이슈 대안&lt;/b&gt;: RollingUpdate 중 신&amp;middot;구 버전 API가 동시 호출되는 현상이 문제가 된다면 &lt;b&gt;Blue/Green 배포&lt;/b&gt; 방식을 채택합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d218016a74af275512f7807&quot;&gt;&lt;b&gt;RollingUpdate 제어 속성&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d218098b00ae3f7d822868c&quot;&gt;maxUnavailable: 업데이트 과정 중 &lt;b&gt;최대 몇 개의 파드가 서비스 불능 상태&lt;/b&gt;가 되는 것을 허용할지 결정&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d21805fb192d47d5ec06a44&quot;&gt;maxSurge: 설정된 replicas 수 대비 &lt;b&gt;최대 몇 개의 파드를 추가로 더 만들 수 있는지&lt;/b&gt; 결정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c8fd75a4d218030a0a3fc9211ad668d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Service 기본 개념&lt;/h3&gt;
&lt;p id=&quot;block-3c8fd75a4d2180ad93f3e8468a7b2d94&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Service는 spec.selector 조건과 Pod의 metadata.labels를 매칭하여 트래픽을 파드로 전달합니다. type: NodePort 사용 시 외부 트래픽을 쿠버네티스 내부 Pod로 포워딩할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d2180b69949d6885ba5ed72&quot;&gt;&lt;b&gt;주요 핵심 역할 3가지&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d218066ad17d3cdecb002d0&quot;&gt;&lt;b&gt;서비스 퍼블리싱&lt;/b&gt;: 외부 트래픽을 내부 Pod로 라우팅&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d2180c3a07ff378bb7eaddd&quot;&gt;&lt;b&gt;서비스 디스커버리&lt;/b&gt;: IP가 가변적인 Pod 대신 고정된 Service 이름(내부 DNS)으로 API 호출&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d2180ed8ff4fb241065dd7b&quot;&gt;&lt;b&gt;서비스 레지스트리&lt;/b&gt;: 동적으로 변하는 Pod IP를 추적&amp;middot;관리하고 로드밸런싱 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-3c8fd75a4d2180f88688e8afae7645ea&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1l7SL/dJMcaaNjeRd/kZMWk39ULi8cWvvlvAxK70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1l7SL/dJMcaaNjeRd/kZMWk39ULi8cWvvlvAxK70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1l7SL/dJMcaaNjeRd/kZMWk39ULi8cWvvlvAxK70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1l7SL%2FdJMcaaNjeRd%2FkZMWk39ULi8cWvvlvAxK70%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;704&quot; height=&quot;396&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d2180f8bbaafedcdb90758e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;포트 추상화 기법 (Port Name 매칭)&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3c8fd75a4d218039a62df8e01362dad9&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;애플리케이션 포트가 변경될 때마다 Service의 targetPort를 매번 수정하는 번거로움을 줄이기 위해 &lt;b&gt;포트 이름(Name) 매칭&lt;/b&gt; 방식을 사용합니다.&lt;/p&gt;
&lt;div id=&quot;block-3c8fd75a4d218092886bf685c4015fad&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Pod (Deployment) 측 설정
containers:
  - ports:
      - name: http           # 포트 이름을 'http'로 명시
        containerPort: 8080  # App 포트가 변경되면 이 숫만 변경

# Service 측 설정
ports:
  - port: 80
    targetPort: http         # 숫자가 아닌 포트 이름 'http'를 타겟팅&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c8fd75a4d218049b598c067432c68a2&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;HPA 기본 개념&lt;/h3&gt;
&lt;div id=&quot;block-3c8fd75a4d2180fcb662e05c7f85c8d7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgRaeo/dJMcaaNjeRc/t8bIJ8D1wLSk94bpytZZMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgRaeo/dJMcaaNjeRc/t8bIJ8D1wLSk94bpytZZMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgRaeo/dJMcaaNjeRc/t8bIJ8D1wLSk94bpytZZMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgRaeo%2FdJMcaaNjeRc%2Ft8bIJ8D1wLSk94bpytZZMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9844&quot; height=&quot;368.211&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p id=&quot;block-3c8fd75a4d2180d89fb1c49eb893f88d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HPA는 부하량에 따라 파드 개수를 유연하게 늘리거나 줄입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c8fd75a4d21800fbb9efde1d71e2e5f&quot;&gt;&lt;b&gt;기준값의 중요성&lt;/b&gt;: Pod에 설정된 resource.requests 값은 HPA가 &lt;b&gt;100% 임계치를 계산하는 절대적인 기준점&lt;/b&gt;이 됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d218035b62fee36e65374b3&quot;&gt;&lt;b&gt;스케일아웃 계산 예시 (목표 평균 CPU Utilization: 60%)&lt;/b&gt;:&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d2180a79ab3c518a5afafeb&quot;&gt;&lt;b&gt;Limits의 영향&lt;/b&gt;: resource.limits 설정 역시 애플리케이션의 최대 임계 한계치를 결정짓는 데 큰 영향을 미칩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c8fd75a4d218020b532c65837f24c0a&quot;&gt;&lt;b&gt;behavior&lt;/b&gt;&lt;b&gt; 속성&lt;/b&gt;: 잦은 스케일인/아웃(Thrashing) 현상을 방지하기 위해 대기 시간(stabilizationWindowSeconds)이나 변동 비율을 제어합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/47</guid>
      <comments>https://sseyeon.tistory.com/47#entry47comment</comments>
      <pubDate>Wed, 26 Aug 2026 15:58:24 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint1] #6. Application 기능으로 이해하기#2 - Configmap, Secret</title>
      <link>https://sseyeon.tistory.com/46</link>
      <description>&lt;blockquote id=&quot;block-3c3fd75a4d21804f8278f5c7702cc1e2&quot; data-ke-style=&quot;style2&quot;&gt;[참고]&lt;br /&gt;본 글은 인프런의&lt;br /&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;br /&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;block-3c7fd75a4d2180429b7fe92ce76ba2fa&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Configmap, Secret 기본 개념&lt;/h3&gt;
&lt;p id=&quot;block-3c7fd75a4d21807eabeee3346a2cd0fa&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스에서 &lt;b&gt;ConfigMap&lt;/b&gt;과 &lt;b&gt;Secret&lt;/b&gt;은 애플리케이션 코드와 설정값을 분리하여 외부에서 환경 데이터를 주입하기 위해 사용되는 오브젝트입니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d21808fa109cb15e23c1a5d&quot;&gt;&lt;b&gt;ConfigMap에 저장되는 데이터&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d21802a9097d491a70d82ee&quot;&gt;&lt;b&gt;인프라 환경 관련 값&lt;/b&gt;: 개발/검증/운영 환경(dev, stage, prod)에 따라 달라지는 설정&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d21809988d0c4e0874a7dfc&quot;&gt;&lt;b&gt;App 기능 제어 값&lt;/b&gt;: 기능 On/Off 스위치, 로깅 레벨 등&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d21802eaff7f9799d2cde61&quot;&gt;&lt;b&gt;외부 환경 주입 값&lt;/b&gt;: 외부 API 엔드포인트 URL 등 일반 설정 정보&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d218090844cfc3e7bc79875&quot;&gt;&lt;b&gt;Secret에 저장되는 데이터&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d21808f84b7e3c5cfee6840&quot;&gt;&lt;b&gt;DB 접속 정보&lt;/b&gt;: DB URL, 계정 및 비밀번호 (작성 시 stringData 필드 활용 가능)&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d2180488a45eb06110d10ae&quot;&gt;&lt;b&gt;인코딩 방식&lt;/b&gt;: Secret 내부 데이터는 &lt;b&gt;Base64로 인코딩&lt;/b&gt;되어 저장 (  &lt;b&gt;암호화가 아닌 단순 인코딩&lt;/b&gt;에 불과함)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d2180de9cc1e4633b21bb88&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUrzZI/dJMcacK9ART/xcSnUlBajibIDtzQkQWJM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUrzZI/dJMcacK9ART/xcSnUlBajibIDtzQkQWJM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUrzZI/dJMcacK9ART/xcSnUlBajibIDtzQkQWJM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUrzZI%2FdJMcacK9ART%2FxcSnUlBajibIDtzQkQWJM1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;704&quot; height=&quot;396&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180c08e41fcb26403a392&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;알아두면 좋은 점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d218088969efbf9be9af90b&quot;&gt;중요 데이터를 반드시 Secret에 넣어야 하는 것은 아니며, 상황에 따라 ConfigMap에 두어도 동작상 문제는 없습니다.&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d21801e8035df4c57c1e060&quot;&gt;Secret은 보안 목적 외에도 쿠버네티스 내부 리소스 간 규격화된 데이터를 다룰 때 자주 활용됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d2180349161e203b36d3fef&quot;&gt;&lt;b&gt;데이터 암호화&lt;/b&gt;는 ConfigMap/Secret 오브젝트 자체의 기능과 &lt;b&gt;별개의 영역&lt;/b&gt;으로 다루어야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180cf8904f20cce40e969&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ConfigMap과 Secret을 수정하더라도 애플리케이션에 즉시 반영되지 않을 수 있습니다. 주입 방식에 따라 실시간 반영 여부가 결정됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d2180be937fd984744ad33b&quot;&gt;&lt;b&gt;환경변수(&lt;/b&gt;&lt;b&gt;envFrom&lt;/b&gt;&lt;b&gt;, &lt;/b&gt;&lt;b&gt;env&lt;/b&gt;&lt;b&gt;) 주입&lt;/b&gt;: App 기동 시점에 값이 결정되므로, ConfigMap/Secret을 수정해도 &lt;b&gt;Pod를 재시작하기 전까지는 반영되지 않음&lt;/b&gt;&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d2180498764d6f0e04802b3&quot;&gt;&lt;b&gt;볼륨(&lt;/b&gt;&lt;b&gt;volumes&lt;/b&gt;&lt;b&gt;, &lt;/b&gt;&lt;b&gt;volumeMounts&lt;/b&gt;&lt;b&gt;) 주입&lt;/b&gt;: 파일 형태로 Pod 내부 디렉토리에 마운트되며, ConfigMap/Secret 변경 시 &lt;b&gt;실시간(수 초~수 분 내)으로 파일 내용이 업데이트됨&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180de8e68c6fe0ed05635&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ️&amp;nbsp;동작 확인&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;Configmap, Secret 입력값 확인 &lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d2180f1aee7cffde1138b06&quot;&gt;대시보드에서 확인하기&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-3c7fd75a4d2180d18051e4cc85feaa0e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgl7hZ/dJMcadC3jGf/4lzKhmhifFJEkTmpBj9y8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgl7hZ/dJMcadC3jGf/4lzKhmhifFJEkTmpBj9y8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgl7hZ/dJMcadC3jGf/4lzKhmhifFJEkTmpBj9y8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdgl7hZ%2FdJMcadC3jGf%2F4lzKhmhifFJEkTmpBj9y8k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2800&quot; height=&quot;1398&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d218090948fcc5f4797f584&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6fZBs/dJMcadC3jGe/HIXr5wnivk624TqwjAagYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6fZBs/dJMcadC3jGe/HIXr5wnivk624TqwjAagYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6fZBs/dJMcadC3jGe/HIXr5wnivk624TqwjAagYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6fZBs%2FdJMcadC3jGe%2FHIXr5wnivk624TqwjAagYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2806&quot; height=&quot;1390&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d2180fa9669e06be4aaa23e&quot;&gt;명령어로 확인하기&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-3c7fd75a4d2180549c2ef14aaa1d5b68&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// Configmap 확인
$ kubectl describe -n anotherclass-123 configmaps api-tester-1231-properties
$ kubectl get -n anotherclass-123 configmaps api-tester-1231-properties -o yaml
$ kubectl get -n anotherclass-123 configmaps api-tester-1231-properties -o jsonpath='{.data}'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d2180a69d77d67c9f71bc8e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w2reB/dJMcafVn3Ib/CHMkbzkDEWgNQzWGE56Efk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w2reB/dJMcafVn3Ib/CHMkbzkDEWgNQzWGE56Efk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w2reB/dJMcafVn3Ib/CHMkbzkDEWgNQzWGE56Efk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw2reB%2FdJMcafVn3Ib%2FCHMkbzkDEWgNQzWGE56Efk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;357.99725&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21801eb25ee0879a41ba96&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT0rTv/dJMcadC3jGd/pQQvAmL7kDAk0KjBWcguf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT0rTv/dJMcadC3jGd/pQQvAmL7kDAk0KjBWcguf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT0rTv/dJMcadC3jGd/pQQvAmL7kDAk0KjBWcguf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT0rTv%2FdJMcadC3jGd%2FpQQvAmL7kDAk0KjBWcguf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;269.8707&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21807c9d58d0342f5d3f03&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;73&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6sJjP/dJMcadC3jF9/YfWo4z8iYHkzPAqk2aMqok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6sJjP/dJMcadC3jF9/YfWo4z8iYHkzPAqk2aMqok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6sJjP/dJMcadC3jF9/YfWo4z8iYHkzPAqk2aMqok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6sJjP%2FdJMcadC3jF9%2FYfWo4z8iYHkzPAqk2aMqok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.8594&quot; height=&quot;40.624256&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;73&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21803abeb6df939e644825&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// Secret 확인
$ kubectl get -n anotherclass-123 secret api-tester-1231-postgresql -o yaml
$ kubectl get -n anotherclass-123 secret api-tester-1231-postgresql -o jsonpath='{.data}'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d2180e99e45c2eda879fb60&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGUQA3/dJMcafVn3H8/SuwjpUOzpvHBcbyu3ks2q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGUQA3/dJMcafVn3H8/SuwjpUOzpvHBcbyu3ks2q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGUQA3/dJMcafVn3H8/SuwjpUOzpvHBcbyu3ks2q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGUQA3%2FdJMcafVn3H8%2FSuwjpUOzpvHBcbyu3ks2q1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;245.65125&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d2180a7bfd9ee4620d6f3ed&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;88&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvJ0lS/dJMcafVn3H4/BfBrB1NaIq92ErBkFaoRC1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvJ0lS/dJMcafVn3H4/BfBrB1NaIq92ErBkFaoRC1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvJ0lS/dJMcafVn3H4/BfBrB1NaIq92ErBkFaoRC1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvJ0lS%2FdJMcafVn3H4%2FBfBrB1NaIq92ErBkFaoRC1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.71875&quot; height=&quot;38.65621&quot; data-origin-width=&quot;1602&quot; data-origin-height=&quot;88&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d2180789e3addd67cfec076&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;excel&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// Secret data에서 postgresql-info가 Key인 Value값만 조회 하기
kubectl get -n anotherclass-123 secret api-tester-1231-postgresql -o jsonpath='{.data.postgresql-info\.yaml}'&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21800fbdf3f591ee693283&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1616&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgS8gB/dJMcafVn3H3/jOkRFhsacIcV5DBkRwSMK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgS8gB/dJMcafVn3H3/jOkRFhsacIcV5DBkRwSMK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgS8gB/dJMcafVn3H3/jOkRFhsacIcV5DBkRwSMK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgS8gB%2FdJMcafVn3H3%2FjOkRFhsacIcV5DBkRwSMK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9375&quot; height=&quot;50.530167&quot; data-origin-width=&quot;1616&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d2180cab4b4cdf904acd30b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;br /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;armasm&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// Secret data에서 postgresql-info가 Key인 Value값을 Base64 디코딩해서 보기
kubectl get -n anotherclass-123 secret api-tester-1231-postgresql -o jsonpath='{.data.postgresql-info\.yaml}' | base64 -d&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d218029b6b4ca9065d2ec64&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1994&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nk9sP/dJMcadb2b3G/KeIWZj2aydv7AoP2c1SKjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nk9sP/dJMcadb2b3G/KeIWZj2aydv7AoP2c1SKjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nk9sP/dJMcadb2b3G/KeIWZj2aydv7AoP2c1SKjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fnk9sP%2FdJMcadb2b3G%2FKeIWZj2aydv7AoP2c1SKjK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9219&quot; height=&quot;52.953&quot; data-origin-width=&quot;1994&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d21807aa0bdd2bbfa74f044&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;컨테이너 내부 주입 데이터 확인 &lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d2180309ecbc645482b0937&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2812&quot; data-origin-height=&quot;1302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg6ZQd/dJMcafVn3Id/vPc854JEUbg0N3ANUX3xZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg6ZQd/dJMcafVn3Id/vPc854JEUbg0N3ANUX3xZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg6ZQd/dJMcafVn3Id/vPc854JEUbg0N3ANUX3xZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg6ZQd%2FdJMcafVn3Id%2FvPc854JEUbg0N3ANUX3xZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2812&quot; height=&quot;1302&quot; data-origin-width=&quot;2812&quot; data-origin-height=&quot;1302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d218036a4f0e8ffd3c6288f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;br /&gt;
&lt;pre class=&quot;dts&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;// Configmap 환경 변수 확인
env

// Secret 파일 확인
ls /usr/src/myapp/datasource
cat /usr/src/myapp/datasource/postgresql-info.yaml

// java 실행 인자 확인
jps -v&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d218025bbf4ea2cb3b301bd&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;791&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cpZJvS/dJMcag0USwv/51bAlDnflfKqLl0uKtWoWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cpZJvS/dJMcag0USwv/51bAlDnflfKqLl0uKtWoWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cpZJvS/dJMcag0USwv/51bAlDnflfKqLl0uKtWoWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcpZJvS%2FdJMcag0USwv%2F51bAlDnflfKqLl0uKtWoWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2810&quot; height=&quot;1158&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;791&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180e2abadedc231c79dfe&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;App API 조회 (/info), (/properties)&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d2180899d53ec12c428d962&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTcER0/dJMcafVn3H2/Gir7pTu80S8Ig0EsISgKK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTcER0/dJMcafVn3H2/Gir7pTu80S8Ig0EsISgKK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTcER0/dJMcafVn3H2/Gir7pTu80S8Ig0EsISgKK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTcER0%2FdJMcafVn3H2%2FGir7pTu80S8Ig0EsISgKK1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9531&quot; height=&quot;212.7331&quot; data-origin-width=&quot;1092&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21800eb07ed83c75b11954&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;1196&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Itcab/dJMcadC3jF8/yCknCOpTJwKaVcKTK7bohk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Itcab/dJMcadC3jF8/yCknCOpTJwKaVcKTK7bohk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Itcab/dJMcadC3jF8/yCknCOpTJwKaVcKTK7bohk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FItcab%2FdJMcadC3jF8%2FyCknCOpTJwKaVcKTK7bohk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;591.25464&quot; data-origin-width=&quot;1424&quot; data-origin-height=&quot;1196&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180bfb06bc1bba9dd52c0&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;Configmap 수정 &lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180149e08ed24f6aeeb1a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;configmap 만 수정했을 땐 app 기동 설정이 바뀌지 않음&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d21809baeaaf80b75c2dce3&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2816&quot; data-origin-height=&quot;1420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UoVtY/dJMcadb2b3J/56ZTRy3Yvyx3kYiD4UvcQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UoVtY/dJMcadb2b3J/56ZTRy3Yvyx3kYiD4UvcQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UoVtY/dJMcadb2b3J/56ZTRy3Yvyx3kYiD4UvcQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUoVtY%2FdJMcadb2b3J%2F56ZTRy3Yvyx3kYiD4UvcQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2816&quot; height=&quot;1420&quot; data-origin-width=&quot;2816&quot; data-origin-height=&quot;1420&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d2180a998d9c41bfea65225&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2790&quot; data-origin-height=&quot;1202&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdmSkA/dJMcafVn3Ia/4bwnvFBgGMxUtaVWfoORSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdmSkA/dJMcafVn3Ia/4bwnvFBgGMxUtaVWfoORSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdmSkA/dJMcafVn3Ia/4bwnvFBgGMxUtaVWfoORSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdmSkA%2FdJMcafVn3Ia%2F4bwnvFBgGMxUtaVWfoORSk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2790&quot; height=&quot;1202&quot; data-origin-width=&quot;2790&quot; data-origin-height=&quot;1202&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;application_role 이 여전히 ALL&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180a68eb8f3bc20b38c50&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;secret 을 수정하면, 볼륨 마운트에 연결시켜놨기 때문에 값이 바뀜&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d218059bd50e617f61e8678&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/49RiX/dJMcadC3jGb/1hUWpglitBA4ag0YtUcb91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/49RiX/dJMcadC3jGb/1hUWpglitBA4ag0YtUcb91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/49RiX/dJMcadC3jGb/1hUWpglitBA4ag0YtUcb91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F49RiX%2FdJMcadC3jGb%2F1hUWpglitBA4ag0YtUcb91%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2810&quot; height=&quot;1352&quot; data-origin-width=&quot;2810&quot; data-origin-height=&quot;1352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21809f9aacdd3220fbf69e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2808&quot; data-origin-height=&quot;1154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmXwKW/dJMcafVn3H6/8KSER06q7YQa6dwktv6Hq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmXwKW/dJMcafVn3H6/8KSER06q7YQa6dwktv6Hq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmXwKW/dJMcafVn3H6/8KSER06q7YQa6dwktv6Hq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmXwKW%2FdJMcafVn3H6%2F8KSER06q7YQa6dwktv6Hq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2808&quot; height=&quot;1154&quot; data-origin-width=&quot;2808&quot; data-origin-height=&quot;1154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180c79ed8cf2f16ff9a35&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;API 재확인 (/info), (/properties)&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d21801eb541cc6c825e3493&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파드 삭제 전에는, configmap 은 적용 안되어 있고, secret 은 적용이 된 상태.&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d21806aa180f474664544b4&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o7U38/dJMcadC3jGa/HvM4k6fnh6nedKKw2r7bV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o7U38/dJMcadC3jGa/HvM4k6fnh6nedKKw2r7bV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o7U38/dJMcadC3jGa/HvM4k6fnh6nedKKw2r7bV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo7U38%2FdJMcadC3jGa%2FHvM4k6fnh6nedKKw2r7bV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.96875&quot; height=&quot;260.372&quot; data-origin-width=&quot;1168&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180e8a432e223a3a89d9f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파드 재생성 후, Configmap 의 수정된 설정값 Role = GET&lt;/p&gt;
&lt;div id=&quot;block-3c7fd75a4d21806d87d5e8bcf746f8ec&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2788&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qpXFA/dJMcafVn3Ic/lCclWv5FCsKVQNdpxlKuX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qpXFA/dJMcafVn3Ic/lCclWv5FCsKVQNdpxlKuX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qpXFA/dJMcafVn3Ic/lCclWv5FCsKVQNdpxlKuX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqpXFA%2FdJMcafVn3Ic%2FlCclWv5FCsKVQNdpxlKuX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2788&quot; height=&quot;842&quot; data-origin-width=&quot;2788&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c7fd75a4d21805cb576eb4be3df094a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLfKnR/dJMcafVn3H1/vLaK7m2RpDIkqNGG3KsYck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLfKnR/dJMcafVn3H1/vLaK7m2RpDIkqNGG3KsYck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLfKnR/dJMcafVn3H1/vLaK7m2RpDIkqNGG3KsYck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLfKnR%2FdJMcafVn3H1%2FvLaK7m2RpDIkqNGG3KsYck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9922&quot; height=&quot;194.61562&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c7fd75a4d21804d82b0da6838b4b80d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;이름 때문에 기대가 컸던 Secret&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d218012a566c61b65b8fcba&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Secret은 목적에 따라 type을 지정할 수 있으며, 각 타입에 맞는 정해진 Key-Value 템플릿 구조를 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d218029942ad6d5e9b88b17&quot;&gt;&lt;b&gt;type: Opaque&lt;/b&gt;: 가장 기본 유형으로 ConfigMap과 유사한 Key-Value 구조&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d21806ab581e7c0e573fb95&quot;&gt;&lt;b&gt;type: kubernetes.io/docker-registry&lt;/b&gt;: 비공개 레지스트리(Docker Hub 등) 인증 정보 저장용 (정해진 Key값 사용)&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d2180ebaff5ff44a4353ad5&quot;&gt;&lt;b&gt;type: kubernetes.io/tls&lt;/b&gt;: Ingress 등에서 HTTPS 통신을 위한 TLS 인증서 및 개인키(tls.crt, tls.key) 저장용&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d21800084f0d6ea25a14c3f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이처럼 쿠버네티스는 사용자 편의를 위한 템플릿(Type)을 제공하지만, &lt;b&gt;어떤 Type도 데이터 자체를 암호화해주지는 않습니다.&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d21809a925afb6bd9e0568a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 중요 데이터에 대한 암호화는 어떻게 해야하나?&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d21808ea25efcf060a3dd3b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Secret이 자체 암호화를 제공하지 않기 때문에, 실무에서는 중요 데이터를 안전하게 관리하기 위해 다음 3가지 방안을 사용합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d2180afba7fda1f070ad51b&quot;&gt;&lt;b&gt;관리방안 1. 클러스터 내 직접 관리 (접근 제어)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d21801592d1d57d6a239405&quot;&gt;RBAC(Role-Based Access Control)을 사용해 Secret 리소스에 접근할 수 있는 권한을 엄격히 제한&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d2180bfbbf5efbc300fc0ed&quot;&gt;&lt;b&gt;관리방안 2. 애플리케이션 단 자체 암호화 (추천 ⭐)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c7fd75a4d2180538a6ce3a99584aa55&quot;&gt;Secret에는 처음부터 &lt;b&gt;암호화된 값&lt;/b&gt;을 저장하고, App 내부 복호화 로직을 통해 실행 시점에 복호화하여 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c7fd75a4d21806eb1a9c4c7ee56acd0&quot;&gt;&lt;b&gt;관리방안 3. 서드파티 솔루션 연동 (추천 ⭐)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;Vault, AWS Secrets Manager 등 전문 외부 보안 관리 솔루션을 연동하여 사용&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c7fd75a4d2180dfbc4ed276f747839d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Secret이라는 이름 때문에 당연히 데이터 암호화를 제공할 것으로 기대하기 쉽지만, 실상은 Base64 인코딩일 뿐입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 노출을 원천 차단하려면 관리방안 2, 3 처럼 관리하는 것이 권장됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/46</guid>
      <comments>https://sseyeon.tistory.com/46#entry46comment</comments>
      <pubDate>Tue, 25 Aug 2026 11:12:01 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint1] #5. Application 기능으로 이해하기#1 - Pod(probe)</title>
      <link>https://sseyeon.tistory.com/45</link>
      <description>&lt;blockquote id=&quot;block-3c3fd75a4d2180eb8ef8c1fdb07871fb&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p id=&quot;block-3c3fd75a4d21804f8278f5c7702cc1e2&quot; data-ke-size=&quot;size16&quot;&gt;[참고]&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180ab9cebf4a8f187b58f&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 인프런의&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180a98220ddea4c174c81&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180309781d032222ab976&quot; data-ke-size=&quot;size16&quot;&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d21802ea544f6b4fd17eead&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스에서 Probe(프로브)는 컨테이너의 상태를 주기적으로 진단(Health Check)하는 메커니즘입니다. 파드(Pod) 내부의 애플리케이션이 정상적으로 시작되었는지, 사용자 요청을 받을 준비가 되었는지, 혹은 죽지 않고 살아있는지를 쿠버네티스가 스스로 감시하도록 만듭니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d21808bad42e8db1dfc8b05&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스는 크게 &lt;b&gt;3가지 Probe&lt;/b&gt;를 제공합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Probe 종류&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;핵심 질문&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;주요 역할&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;startupProbe&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&quot;앱 초기화가 끝났는가?&quot;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;앱이 구동될 때까지 다른 Probe 동작을 유예 (초기 구동 보장)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;readinessProbe&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&quot;지금 트래픽을 받을 수 있는가?&quot;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;준비 미달 시 Service 라우팅에서 제외 (트래픽 차단)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;livenessProbe&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&quot;앱이 정상적으로 살아있는가?&quot;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;응답 불능(Deadlock 등) 시 컨테이너 강제 재기동 (Self-Healing)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d21807daccdfe5b0ca0e476&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;deployment.yaml의 컨테이너 스펙 내에 3가지 Probe를 적용한다면 다음과 같습니다.&lt;/p&gt;
&lt;div id=&quot;block-3c2fd75a4d2180a3b69dd66dfd37ab7b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# deployment.yaml
# spec.template.spec.containers.*
          startupProbe:
            httpGet:
              path: &quot;/startup&quot;
              port: 8080
            periodSeconds: 5
            failureThreshold: 36
          readinessProbe:
            httpGet:
              path: &quot;/readiness&quot;
              port: 8080
            periodSeconds: 10
            failureThreshold: 3
          livenessProbe:
            httpGet:
              path: &quot;/liveness&quot;
              port: 8080
            periodSeconds: 10
            failureThreshold: 3&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c3fd75a4d21801f8d25fcea04832596&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UyPmm/dJMcaf8I8vQ/zdXSfEYz8ocq0Blry4pObK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UyPmm/dJMcaf8I8vQ/zdXSfEYz8ocq0Blry4pObK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UyPmm/dJMcaf8I8vQ/zdXSfEYz8ocq0Blry4pObK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUyPmm%2FdJMcaf8I8vQ%2FzdXSfEYz8ocq0Blry4pObK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;704&quot; height=&quot;396&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 id=&quot;block-3c3fd75a4d2180b08f86ffecbee718a5&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;어차피 장애 나면 둘 다 실패하는데, Probe를 굳이 구분하는 이유가 뭘까?&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d218013a052e8bc762300a4&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;애플리케이션에 장애가 발생하면 livenessProbe와 readinessProbe 모두 실패(Fail)를 반환합니다. 그렇다면 왜 쿠버네티스는 굳이 이 둘을 나누어 놓았을까요?&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180dfa94cd44a8446bafb&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그 이유는 &quot;장애 발생 시 쿠버네티스가 취하는 대응 액션&quot;이 완전히 다르기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;readinessProbe&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;livenessProbe&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;지금 &lt;b&gt;트래픽을 받을 준비&lt;/b&gt;가 되었는가?&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;애플리케이션이 **정상 동작 중(생존)**인가?&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;실패 시 액션&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Service 연결 해제&lt;/b&gt; (트래픽 차단)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;Pod 재기동&lt;/b&gt; (Restart)&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;color: #37352f;&quot;&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&lt;b&gt;비유&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&quot;손님 받을 준비 안 됐으니 잠시 대기표 끊어!&quot;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;div&gt;&lt;span&gt;&quot;앱이 멈췄으니(Deadlock) 강제 재부팅해!&quot;&lt;/span&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c2fd75a4d2180df89d6d4c950d42c31&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Application 동작 중심의 Probe 이해&lt;/h3&gt;
&lt;div id=&quot;block-3c3fd75a4d2180a5bc66ecdfcb04d30b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KG4EC/dJMcaf8I8vI/YaBS2g0IaPtxQFXeYhCo20/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KG4EC/dJMcaf8I8vI/YaBS2g0IaPtxQFXeYhCo20/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KG4EC/dJMcaf8I8vI/YaBS2g0IaPtxQFXeYhCo20/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKG4EC%2FdJMcaf8I8vI%2FYaBS2g0IaPtxQFXeYhCo20%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703.9922&quot; height=&quot;352.8402&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;418&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c2fd75a4d2180008dccc7dd44fb3417&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 다이어그램처럼 애플리케이션 라이프사이클과 연결하면 이해가 훨씬 쉬워집니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180908f04eed71b7bb4b6&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. &lt;/b&gt;&lt;b&gt;startupProbe&lt;/b&gt;&lt;b&gt; (App 초기화 단계)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c3fd75a4d2180fa894bcdfbbcad494d&quot;&gt;&lt;b&gt;상태&lt;/b&gt;: DB 연결, Spring 초기화, Heavy한 초기 데이터 로딩 중&lt;/li&gt;
&lt;li id=&quot;block-3c3fd75a4d2180d08ed0f521a231fcff&quot;&gt;&lt;b&gt;역할&lt;/b&gt;: 앱이 완전히 뜰 때까지 다른 Probe 실행을 유예합니다. 초기화가 느린 앱이 시작도 못 해보고 livenessProbe에 의해 재기동되는 불상사를 막아줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c3fd75a4d2180c791fac3338dbd9f61&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. &lt;/b&gt;&lt;b&gt;readinessProbe&lt;/b&gt;&lt;b&gt; (User 초기화 &amp;amp; 트래픽 제어)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c3fd75a4d2180f6a959f2f78efb9a0c&quot;&gt;&lt;b&gt;상태&lt;/b&gt;: 연동 시스템 체크, DB Data Validation 진행 중 또는 순간적인 부하 폭증 상태&lt;/li&gt;
&lt;li id=&quot;block-3c3fd75a4d2180269838f84d4e001da7&quot;&gt;&lt;b&gt;역할&lt;/b&gt;: 실패 시 &lt;b&gt;Service 라우팅 대상에서 해당 Pod를 즉시 제외&lt;/b&gt;합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c3fd75a4d218093a3f9c175f480ac72&quot;&gt;&lt;b&gt;핵심&lt;/b&gt;: 앱이 완전히 죽은 것은 아니지만, 잠시 트래픽을 처리할 수 없는 상태(지연)일 때 Pod를 강제로 죽이지 않고 &lt;b&gt;트래픽만 유예&lt;/b&gt;시켜 안전하게 복구될 시간을 벌어줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p id=&quot;block-3c3fd75a4d2180f2aa76f457560a86c7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. &lt;/b&gt;&lt;b&gt;livenessProbe&lt;/b&gt;&lt;b&gt; (App 기동 완료 후 생존 체크)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c3fd75a4d21800ca02ce8a99a265c63&quot;&gt;&lt;b&gt;상태&lt;/b&gt;: 애플리케이션이 교착 상태(Deadlock)에 빠졌거나 무한 루프 등으로 응답 불가 상태&lt;/li&gt;
&lt;li id=&quot;block-3c3fd75a4d2180049456ef07b5de4ddd&quot;&gt;&lt;b&gt;역할&lt;/b&gt;: 연속 실패 시 Pod를 강제로 재기동(Restart)하여 프로세스를 살려냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c3fd75a4d21800890b9e32f40bbe5ed&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;응용 과제&lt;/h3&gt;
&lt;p id=&quot;block-3c3fd75a4d21808ba1ddd62179ac97e2&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ️&amp;nbsp;응용1&lt;/b&gt; : startupProbe가 실패 되도록 설정해서 Pod가 무한 재기동 상태가 되도록 설정해 보세요.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;과제 풀이&lt;/b&gt;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180cd8884e1d8c0b3d042&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;startupProbe 의 API Path를 존재하지 않는 경로로 설정하여 무한 재기동 상태를 유발했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c3fd75a4d218042b47df11a26febcf0&quot;&gt;failureThreshold : 3&lt;/li&gt;
&lt;li id=&quot;block-3c3fd75a4d2180f999b2c35d637b77cb&quot;&gt;httpGet.path : /startup_notFound&lt;/li&gt;
&lt;/ul&gt;
&lt;div id=&quot;block-3c3fd75a4d2180019ea2f36f11cf459e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XFHzB/dJMcafgIWQv/5pjRkYR9MNaEZe3p3d70s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XFHzB/dJMcafgIWQv/5pjRkYR9MNaEZe3p3d70s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XFHzB/dJMcafgIWQv/5pjRkYR9MNaEZe3p3d70s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXFHzB%2FdJMcafgIWQv%2F5pjRkYR9MNaEZe3p3d70s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/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.9844&quot; height=&quot;104.991844&quot; data-origin-width=&quot;575&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c3fd75a4d21804e9b0afbe665333050&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wNAXm/dJMcafgIWQy/E94u7IMfGJjTXb8aMaMaQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wNAXm/dJMcafgIWQy/E94u7IMfGJjTXb8aMaMaQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wNAXm/dJMcafgIWQy/E94u7IMfGJjTXb8aMaMaQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwNAXm%2FdJMcafgIWQy%2FE94u7IMfGJjTXb8aMaMaQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;641.9922&quot; height=&quot;544.6711&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c3fd75a4d2180c1b451c0701f0054ed&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;288&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvuFR7/dJMcadpz0Zx/yjgMEdwn8jDjoDHInKtJh1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvuFR7/dJMcadpz0Zx/yjgMEdwn8jDjoDHInKtJh1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvuFR7/dJMcadpz0Zx/yjgMEdwn8jDjoDHInKtJh1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/cvuFR7/dJMcadpz0Zx/yjgMEdwn8jDjoDHInKtJh1/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;483.9922&quot; height=&quot;278.7795&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;288&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3c3fd75a4d21807e867cdfe1fcf6bc97&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCpdOn/dJMcadpz0Zp/XYqGbqQOOrInz7pi2dKdf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCpdOn/dJMcadpz0Zp/XYqGbqQOOrInz7pi2dKdf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCpdOn/dJMcadpz0Zp/XYqGbqQOOrInz7pi2dKdf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCpdOn%2FdJMcadpz0Zp%2FXYqGbqQOOrInz7pi2dKdf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;552.96875&quot; height=&quot;73.85874&quot; data-origin-width=&quot;569&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c3fd75a4d2180ad8c4bc90835b6377a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; ️&amp;nbsp;응용2&lt;/b&gt; : 일시적 장애 상황(App 내부 부하 증가)가 시작 된 후, 30초 뒤에 트래픽이 중단되고, 3분 뒤에는 App이 재기동 되도록 설정해 보세요. (아래 API를 날리면 readinessProbe와 livenessProbe가 동시에 실패하게 됩니다)&lt;/p&gt;
&lt;div id=&quot;block-3c3fd75a4d21807f93a8ea801df03a92&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;bash&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;// 부하 증가 - (App 내부 isAppReady와 isAppLive를 False로 바꿈)
curl http://192.168.56.30:31231/server-load-on

// 외부 API 실패
curl http://192.168.56.30:31231/hello

// 부하 감소 API - (App 내부 isAppReady와 isAppLive를 True로 바꿈)
curl http://192.168.56.30:31231/server-load-off&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p id=&quot;block-3c3fd75a4d218010a770c27867562735&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt; ️&amp;nbsp;&lt;b&gt;응용3&lt;/b&gt; : Secret 파일(/usr/src/myapp/datasource/postgresql-info.yaml)이 존재하는지 체크하는 readinessProbe를 만들어 보세요. (꼭 API를 날리는 것만이 readinessProbe 활용의 전부는 아닙니다)&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/45</guid>
      <comments>https://sseyeon.tistory.com/45#entry45comment</comments>
      <pubDate>Fri, 21 Aug 2026 14:51:56 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint1] #4. Object 그려보며 이해하기</title>
      <link>https://sseyeon.tistory.com/44</link>
      <description>&lt;blockquote id=&quot;block-3c1fd75a4d2180db9999e798f5818117&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p id=&quot;block-3c1fd75a4d2180508592f786cc20a13d&quot; data-ke-size=&quot;size16&quot;&gt;[참고]&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d2180b9bf2dc63f205b98cc&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 인프런의&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d2180bf80c7f3b7cd610d2c&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d21807db6dcd27f45c20cb5&quot; data-ke-size=&quot;size16&quot;&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c1fd75a4d2180d5a913f31f39f20b6b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;주요 학습 대상 파일 (Object)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c1fd75a4d2180dd8c43d2016ab19cb4&quot;&gt;&lt;b&gt;namespace.yaml&lt;/b&gt;: 클러스터 내 리소스들을 논리적으로 격리하고 구분하는 자원 공간 정의&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d21804b9d90f956db7bf546&quot;&gt;&lt;b&gt;pv.yaml&lt;/b&gt;&lt;b&gt; / &lt;/b&gt;&lt;b&gt;pvc.yaml&lt;/b&gt;: 스토리지 자원(PersistentVolume)과 이를 사용하기 위한 할당 요청(PersistentVolumeClaim) 정의&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d21804c8489ef1c8fefaa46&quot;&gt;&lt;b&gt;configmap.yaml&lt;/b&gt;&lt;b&gt; / &lt;/b&gt;&lt;b&gt;secret.yaml&lt;/b&gt;: 애플리케이션에 전달할 일반 설정값과 보안 데이터(비밀번호, 토큰 등) 관리&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d2180bbbdb8f144703f1f46&quot;&gt;&lt;b&gt;deployment.yaml&lt;/b&gt;: 파드(Pod)의 생성, 개수 유지, 업데이트 전략을 관장하는 워크로드 컨트롤러&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d218060a78af244c15bea8b&quot;&gt;&lt;b&gt;service.yaml&lt;/b&gt;: 배포된 파드들에 접근할 수 있도록 고정 IP 및 로드밸런싱을 제공하는 네트워크 엔드포인트&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d2180f1ae10f5b6bc8016a9&quot;&gt;&lt;b&gt;hpa.yaml&lt;/b&gt;: 부하량(CPU/메모리 등)에 따라 파드의 개수를 자동으로 조절(Auto Scaling)하는 설정&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 id=&quot;block-3c1fd75a4d21805e9ab5f874fa60ba39&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;아키텍처 다이어그램&lt;/h3&gt;
&lt;p id=&quot;block-3c1fd75a4d2180778869ff478c3559d5&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존 개념 도식표만으로는 오브젝트 간의 실질적인 연동 방식이 모호해,&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d2180dd9834c3cd1d463884&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;HPA, Deployment, Service, PVC 등 실제 설정 파일의 어떤 값들이 서로 연결되어 작동하는지 &lt;b&gt;실제 YAML 코드 구조&lt;/b&gt;를 바탕으로 매핑 관계도를 새로 그려보았습니다.&lt;/p&gt;
&lt;div id=&quot;block-3c1fd75a4d2180ed8d6bef7f6cdd6812&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-19 오후 5.42.16.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD3OeR/dJMcahlj8M7/NsC2CKb6KlqhfOfRJPV991/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD3OeR/dJMcahlj8M7/NsC2CKb6KlqhfOfRJPV991/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD3OeR/dJMcahlj8M7/NsC2CKb6KlqhfOfRJPV991/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD3OeR%2FdJMcahlj8M7%2FNsC2CKb6KlqhfOfRJPV991%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;스크린샷 2026-08-19 오후 5.42.16.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d21800ba4a7f22131ea205f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. HPA ➔ DEPLOYMENT&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c1fd75a4d2180308677f98070f38989&quot;&gt;HPA의 scaleTargetRef가 Deployment의 이름(api-tester-1231)을 가리키며 부하에 따른 자동 스케일링을 수행합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d218027811ce780e7627537&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. SERVICE ➔ DEPLOYMENT (Pod)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c1fd75a4d218044ac47e09c2b525e0c&quot;&gt;노란색 점선(Selector - Labels): Service의 spec.selector 조건과 Deployment의 spec.template.metadata.labels가 매칭되어 Pod로 트래픽을 전달합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d2180938a67d8428cbebb20&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. DEPLOYMENT ➔ CONFIGMAP &amp;amp; SECRET&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c1fd75a4d21803da09ccc7ae5463e66&quot;&gt;Deployment 내부 컨테이너의 envFrom 및 volumeMounts 구성을 통해 ConfigMap(환경변수)과 Secret(보안 데이터) 정보를 파드 내 디렉토리나 환경변수로 할당합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d2180ad8f1dfcb9342ba702&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. DEPLOYMENT ➔ PVC ➔ PV ➔ Master Node (스토리지 연결)&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c1fd75a4d21805f8656e1eeb49ff5e2&quot;&gt;파드가 데이터를 영구 저장하기 위해 PVC를 참조합니다.&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d218047b2d0c8c740bf5dbe&quot;&gt;파란색 점선: PVC의 matchLabels와 PV의 labels가 서로 매칭되어 연결됩니다.&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d2180408f1bf1b4ff0c0da7&quot;&gt;최종적으로 PV에 정의된 nodeAffinity와 로컬 경로(hostPath/local)를 통해 &lt;b&gt;Master Node&lt;/b&gt;의 실제 물리 디렉토리(/root/k8s-local-volume/1231)와 바인딩됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;쿠버네티스를 처음 접할 때 가장 헷갈리는 부분이 'Deployment를 올렸는데 왜 ReplicaSet과 Pod가 따로 존재하는가?' 그리고 '이 많은 YAML 파일들이 대체 무슨 라벨(Label)로 연결되어 있는가?' 입니다.&lt;/div&gt;
&lt;div&gt;이를 한눈에 이해하기 위해 Deployment를 ReplicaSet과 Pod 계층으로 쪼개고, Service&amp;middot;Pod 간의 민트색 라벨 매칭, PV&amp;middot;PVC 간의 파란색 스토리지 매칭, 그리고 Master Node의 실제 물리 경로 연결 흐름까지 하나의 인포그래픽으로 정리해 보았습니다.&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2026-08-20 오후 4.08.52.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biznF2/dJMcahZNMnM/HbRbvwkOhGXJnkRk0Dnai0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biznF2/dJMcahZNMnM/HbRbvwkOhGXJnkRk0Dnai0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biznF2/dJMcahZNMnM/HbRbvwkOhGXJnkRk0Dnai0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiznF2%2FdJMcahZNMnM%2FHbRbvwkOhGXJnkRk0Dnai0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1920&quot; height=&quot;1080&quot; data-filename=&quot;스크린샷 2026-08-20 오후 4.08.52.png&quot; data-origin-width=&quot;1920&quot; data-origin-height=&quot;1080&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;5&quot;&gt;1. Deployment ➔ ReplicaSet ➔ Pod 계층화&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;6&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;6,0,0&quot;&gt;Deployment&lt;/b&gt;: 전체 배포 전략(RollingUpdate)과 파드 개수(replicas: 2)를 선언&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;ReplicaSet&lt;/b&gt;: Deployment에 의해 자동 생성되며, pod-template-hash 라벨을 통해 파드의 지정된 복제본 수를 실질적으로 유지&amp;middot;관리&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;Pod&lt;/b&gt;: 가장 기본 단위로 실행되며, 실제 컨테이너(api-tester-1231:v1.0.0) 환경 구축&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;7&quot;&gt;2. 색상별 Selector &amp;amp; Labels 매칭 완벽 정리&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;8&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;8,0,0&quot;&gt;노란색 점선 (Deployment &amp;harr; ReplicaSet)&lt;/b&gt;: scaleTargetRef 및 컨트롤러 단위의 매칭 관계&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,1,0&quot;&gt;민트색 점선 (ReplicaSet &amp;harr; Service &amp;harr; Pod)&lt;/b&gt;: part-of, component, name, instance 라벨과 pod-template-hash가 결합되어 &lt;b data-index-in-node=&quot;100&quot; data-path-to-node=&quot;8,1,0&quot;&gt;Service 트래픽이 정확히 해당 Pod로 라우팅&lt;/b&gt;되는 매칭 구조&lt;/li&gt;
&lt;li&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;8,2,0&quot;&gt;파란색 점선 (PVC &amp;harr; PV)&lt;/b&gt;: matchLabels를 통한 스토리지 볼륨 매칭 및 &lt;b data-index-in-node=&quot;48&quot; data-path-to-node=&quot;8,2,0&quot;&gt;Master Node&lt;/b&gt;의 실제 로컬 디렉토리(/root/k8s-local-volume/1231) 바인딩&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-path-to-node=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;9&quot;&gt;3. Pod 내부 연동 구조&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-path-to-node=&quot;10&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;10,0,0&quot;&gt;ConfigMap / Secret&lt;/b&gt;: envFrom 및 volumes 설정을 통해 파드 내부의 환경변수 및 파일 형태로 바인딩되어 애플리케이션에 전달&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;  실제 터미널에서 확인하는 계층 구조&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작성한 다이어그램처럼 쿠버네티스 내부에서 Deployment ➔ ReplicaSet ➔ Pod 순으로 생성되었는지는 kubectl 명령어로 직접 확인할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;# 1. Deployment 확인
kubectl get deployment -n anotherclass-123
# NAME              READY   UP-TO-DATE   AVAILABLE
# api-tester-1231   2/2     2            2

# 2. ReplicaSet 확인 (Deployment 이름 뒤에 해시값이 붙음)
kubectl get rs -n anotherclass-123
# NAME                         DESIRED   CURRENT   READY
# api-tester-1231-6b45d6f6b5   2         2         2

# 3. Pod 확인 (ReplicaSet 이름 뒤에 무작위 값이 붙음)
kubectl get pod -n anotherclass-123
# NAME                                 READY   STATUS    RESTARTS
# api-tester-1231-6b45d6f6b5-x8z9q     1/1     Running   0
# api-tester-1231-6b45d6f6b5-m2k4p     1/1     Running   0
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅&amp;nbsp;이름 규칙 포인트&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;ReplicaSet 이름&lt;/b&gt;: [Deployment 이름]-[Pod Template 해시값] (6b45d6f6b5)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pod 이름&lt;/b&gt;: [ReplicaSet 이름]-[랜덤 문자열] (x8z9q, m2k4p)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 Pod 이름만 봐도 해당 파드가 어떤 ReplicaSet과 Deployment에 속해 있는지 역추적할 수 있습니다.&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;block-3c1fd75a4d218089b1d4e23be895a9bd&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;Label 및 Selector 설계 핵심 규칙&lt;/h3&gt;
&lt;p id=&quot;block-3c1fd75a4d218032a2a6d77e12891cd3&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스에서 오브젝트 간의 관계를 유연하고 명확하게 연결하려면 &lt;b&gt;라벨(Label) 규칙&lt;/b&gt;을 잘 설계하는 것이 무엇보다 중요합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3c1fd75a4d21800e868fe837f0c69d2b&quot;&gt;&lt;b&gt;권장 Label 구성 5가지 핵심 요소&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;part-of: 전체 프로젝트/시스템명&lt;/li&gt;
&lt;li&gt;component: 해당 앱의 역할 (예: backend-server, database)&lt;/li&gt;
&lt;li&gt;name: 애플리케이션 이름 (예: api-tester)&lt;/li&gt;
&lt;li&gt;instance: 식별 가능한 인스턴스 명칭 (다른 오브젝트들의 이름으로 확장 사용)&lt;/li&gt;
&lt;li&gt;version: 배포 버전 (예: v1.0.0)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d21800bb2d9fa57106f3eec&quot;&gt;&lt;b&gt;관리 도구 명시 (&lt;/b&gt;&lt;b&gt;managed-by&lt;/b&gt;&lt;b&gt;)&lt;/b&gt;: Helm 등 배포 및 관리 도구 정보를 기록&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d2180499355daea567d1355&quot;&gt;&lt;b&gt;Domain Prefix 사용&lt;/b&gt;: Label Key에 도메인 형태의 접두어를 사용해 식별성과 네임스페이스 명확화&lt;/li&gt;
&lt;li id=&quot;block-3c1fd75a4d21809b8843c077655cb500&quot;&gt;&lt;b&gt;Selector-Label 매칭 원칙&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Service나 Deployment의 selector에 지정된 모든 항목은 대상 Pod의 labels에 &lt;b&gt;100% 모두 존재&lt;/b&gt;해야 정상 매칭됨&lt;/li&gt;
&lt;li&gt;설계 구조에 따라 instance 라벨 하나만으로도 유니크한 1:1 또는 N:1 매핑 구현 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d21802a9229f08642f14dcd&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스를 처음 공부하면서 단순히 추상적인 개념 도식표만 볼 때는 각 리소스가 따로 노는 것 같았지만, 실제 &lt;b&gt;YAML 코드 기반의 라벨(&lt;/b&gt;&lt;b&gt;labels&lt;/b&gt;&lt;b&gt;)과 셀렉터(&lt;/b&gt;&lt;b&gt;selector&lt;/b&gt;&lt;b&gt;) 매칭 구조&lt;/b&gt;로 관계도를 직접 그려보니 전체적인 아키텍처 흐름이 한눈에 들어왔습니다.&lt;/p&gt;
&lt;p id=&quot;block-3c1fd75a4d2180de97f1c364d8523e5d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;표준화된 오브젝트 규칙만 잘 지켜서 구성해두면, 아무리 많은 애플리케이션과 솔루션이 추가되어도 운영과 자동화 관리가 왜 압도적으로 편해지는지 확실히 체감할 수 있는 계기가 되었습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/44</guid>
      <comments>https://sseyeon.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 19 Aug 2026 17:43:24 +0900</pubDate>
    </item>
    <item>
      <title>[쿠버네티스 어나더 클래스 - Sprint1] #3.실무에서 느껴본 쿠버네티스가 정말 편한 이유</title>
      <link>https://sseyeon.tistory.com/43</link>
      <description>&lt;blockquote id=&quot;block-3bbfd75a4d2180bdbd6bf039daf71f43&quot; data-ke-style=&quot;style2&quot;&gt;
&lt;p id=&quot;block-3bbfd75a4d2180de88c9c5471edde2a0&quot; data-ke-size=&quot;size16&quot;&gt;[참고]&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180b19854ef6ab1887475&quot; data-ke-size=&quot;size16&quot;&gt;본 글은 인프런의&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180b9a0efd94889516790&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;쿠버네티스 어나더 클래스 - Sprint 1, 2 (#실무기초 #설치 #배포 #Jenkins #Helm #ArgoCD)&amp;gt;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180679fc0d9f8a3ab9581&quot; data-ke-size=&quot;size16&quot;&gt;강의 내용과 실습을 바탕으로 정리한 기록입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div id=&quot;block-3bbfd75a4d218098b196e952676b8abd&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d218098b196e952676b8abd&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lmKgk/dJMcafAUd8L/Gw4vPm9D1XphiwrPDkg4qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lmKgk/dJMcafAUd8L/Gw4vPm9D1XphiwrPDkg4qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lmKgk/dJMcafAUd8L/Gw4vPm9D1XphiwrPDkg4qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlmKgk%2FdJMcafAUd8L%2FGw4vPm9D1XphiwrPDkg4qK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;405.62003&quot; data-origin-width=&quot;747&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d21806bbaa0ef9cec7d8663&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이번 섹션에선 개발 &amp;rarr; 분석(모니터링, 로깅) 으로 연결되는 흐름을 실습해봅니다.&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d218088af2ed416b6fd71eb&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 실습의 궁극적인 목표는 &quot;쿠버네티스가 왜 편한가?&quot;를 직접 체감하고 이해하는 것입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;block-3bbfd75a4d2180bd9dd0f20321cd9127&quot;&gt;하나의 프로젝트에 서로 다른 60개의 솔루션이 포함되어 있어도, 쿠버네티스 표준을 따른다면 관리하기 수월해진다고 하는데, 왜 그렇게 되는지?&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;block-3bbfd75a4d218079b5a1ce765008bc85&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;모니터링 도구 설치 (Prometheus - with Grafana, Loki-Stack)&lt;/h3&gt;
&lt;p id=&quot;block-3bbfd75a4d21800f9f73e837a70b7913&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;k8s-master 에서 다음 명령 실행&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d218012b2e5e60fb5cc1738&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &amp;nbsp;Git REPO 받아오기&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d218075b7acea462240cead&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;shell&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;$ yum -y install git

# 로컬 저장소 생성 
$ git init monitoring
$ git config --global init.defaultBranch main
$ cd monitoring

# remote 추가
$ git remote add -f origin https://github.com/k8s-1pro/install.git

# sparse checkout 설정
$ git config core.sparseCheckout true
$ echo &quot;ground/k8s-1.27/prometheus-2.44.0&quot; &amp;gt;&amp;gt; .git/info/sparse-checkout
$ echo &quot;ground/k8s-1.27/loki-stack-2.6.1&quot; &amp;gt;&amp;gt; .git/info/sparse-checkout

# 다운로드 
$ git pull origin main&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180618995c598db3a2749&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt; &amp;nbsp;Prometheus (with Grafana) 설치&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d2180679b4cdf2684f2a0b2&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;jboss-cli&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# 설치
$ cd ~/monitoring
$ kubectl apply --server-side -f ground/k8s-1.27/prometheus-2.44.0/manifests/setup
$ kubectl wait --for condition=Established --all CustomResourceDefinition --namespace=monitoring
$ kubectl apply -f ground/k8s-1.27/prometheus-2.44.0/manifests&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180b1b431df45d5f27f78&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d218020baf9eca5e0de4ea5&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;142&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b95xkQ/dJMcaazDdgK/BuvK34ihAvP44wZjNXTfz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b95xkQ/dJMcaazDdgK/BuvK34ihAvP44wZjNXTfz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b95xkQ/dJMcaazDdgK/BuvK34ihAvP44wZjNXTfz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb95xkQ%2FdJMcaazDdgK%2FBuvK34ihAvP44wZjNXTfz0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;682.9219&quot; height=&quot;138.73376&quot; data-origin-width=&quot;699&quot; data-origin-height=&quot;142&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d21801191a6dd1518c39e4c&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt; &amp;nbsp;Loki-Stack 설치&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d21802f9aa9c7ef2cf286ab&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;
&lt;pre class=&quot;shell&quot; style=&quot;background-color: #000000; color: #383a42; text-align: left;&quot;&gt;&lt;code&gt;# 설치
$ cd ~/monitoring
$ kubectl apply -f ground/k8s-1.27/loki-stack-2.6.1&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180fa8f6cf3f3ea8c9edd&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;✅ 확인 결과&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d218001a6adec3414dd92f1&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B0n2F/dJMcaa0DP8T/R2K16aJqHbFOV2PTpjARI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B0n2F/dJMcaa0DP8T/R2K16aJqHbFOV2PTpjARI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B0n2F/dJMcaa0DP8T/R2K16aJqHbFOV2PTpjARI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB0n2F%2FdJMcaa0DP8T%2FR2K16aJqHbFOV2PTpjARI1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;586.9531&quot; height=&quot;62.29685&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180b6a360d72a92aa424a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt; &amp;nbsp;Grafana 접속 후, Loki 연결&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d2180aa928ece2341257c07&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qp7Rb/dJMcafAUd8O/3bPYXyBbD3GsykUM84xqw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qp7Rb/dJMcafAUd8O/3bPYXyBbD3GsykUM84xqw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qp7Rb/dJMcafAUd8O/3bPYXyBbD3GsykUM84xqw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQp7Rb%2FdJMcafAUd8O%2F3bPYXyBbD3GsykUM84xqw1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;501.06903&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3bbfd75a4d2180be98f3dc1a6de012f7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ni7p6/dJMcafAUd8Q/J9PB7MxpzIxlU5ge2wEQE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ni7p6/dJMcafAUd8Q/J9PB7MxpzIxlU5ge2wEQE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ni7p6/dJMcafAUd8Q/J9PB7MxpzIxlU5ge2wEQE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNi7p6%2FdJMcafAUd8Q%2FJ9PB7MxpzIxlU5ge2wEQE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;501.06903&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3bbfd75a4d218052bcc8c57a455a4a0d&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/R2WU8/dJMcaazDdgN/fM4fyHys0t2lDiTHETK7I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/R2WU8/dJMcaazDdgN/fM4fyHys0t2lDiTHETK7I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/R2WU8/dJMcaazDdgN/fM4fyHys0t2lDiTHETK7I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FR2WU8%2FdJMcaazDdgN%2FfM4fyHys0t2lDiTHETK7I1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;501.06903&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;937&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
입력 후, 하단으로 스크롤하여 save&amp;amp;test&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180619e8bc36dad22f58f&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt; &amp;nbsp;임의로 deployment, replicaset, service 생성&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d2180d1a3a6f9c3f218f580&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;1052&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beQBNq/dJMcaazDdgM/nX83m9ZSRClGNIck7kLb9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beQBNq/dJMcaazDdgM/nX83m9ZSRClGNIck7kLb9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beQBNq/dJMcaazDdgM/nX83m9ZSRClGNIck7kLb9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeQBNq%2FdJMcaazDdgM%2FnX83m9ZSRClGNIck7kLb9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;501.06903&quot; data-origin-width=&quot;1436&quot; data-origin-height=&quot;1052&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div id=&quot;block-3bbfd75a4d2180b18fc8d5f13b4bcc23&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1842&quot; data-origin-height=&quot;1110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beIZWs/dJMcaazDdgO/zchwQTaDk46tJhFsV1QDxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beIZWs/dJMcaazDdgO/zchwQTaDk46tJhFsV1QDxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beIZWs/dJMcaazDdgO/zchwQTaDk46tJhFsV1QDxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeIZWs%2FdJMcaazDdgO%2FzchwQTaDk46tJhFsV1QDxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;412.16357&quot; data-origin-width=&quot;1842&quot; data-origin-height=&quot;1110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180c38c46ecf6773ea6a7&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;br /&gt; &amp;nbsp;Grafana에서 잘 모니터링 되는지 확인&lt;/b&gt;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d218045a15accd7e4f55355&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1538&quot; data-origin-height=&quot;1110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IgaRp/dJMcaa0DP8W/T9Y2abDwPSQAVyJmrL0NOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IgaRp/dJMcaa0DP8W/T9Y2abDwPSQAVyJmrL0NOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IgaRp/dJMcaa0DP8W/T9Y2abDwPSQAVyJmrL0NOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIgaRp%2FdJMcaa0DP8W%2FT9Y2abDwPSQAVyJmrL0NOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;493.63153&quot; data-origin-width=&quot;1538&quot; data-origin-height=&quot;1110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180aa94b2cfea3fa0025e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모니터링할 네임스페이스를 지정하면(namespace = default), 현재 쿠버네티스에 배포된 파드를 별도의 복잡한 설정 없이 바로 모니터링할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180898ae1f665c83d4d4a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿠버네티스 생태계가 편리한 진짜 이유는 새로운 앱이 추가되더라도 수동 작업 없이 대부분의 과정이 자동화되어 있기 때문입니다. 그리고 이 모든 자동화가 가능한 근본적인 이유는, 모든 애플리케이션이 쿠버네티스 표준 아키텍처를 준수하며 배포되기 때문입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;block-3bbfd75a4d2180f2a7ecd33933f3911e&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbj2yx/dJMcaazDdgL/SpyYaAH5UxFKYkWMawagZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbj2yx/dJMcaazDdgL/SpyYaAH5UxFKYkWMawagZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbj2yx/dJMcaazDdgL/SpyYaAH5UxFKYkWMawagZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbj2yx%2FdJMcaazDdgL%2FSpyYaAH5UxFKYkWMawagZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;683.96875&quot; height=&quot;317.2484&quot; data-origin-width=&quot;871&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180209412e76e34224b90&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실제 실무에서는 기존 VM 환경처럼 ①번(OS, JDK, WAS 등) 환경 구축부터 IP 설정, 모니터링 연동까지 여러 서버에 걸쳐 수작업으로 진행하는 경우가 많았습니다. (특히 ①번을 여러 서버에 걸쳐 여러번 진행하고 매번 다른 내용을 지원해 주었습니다..)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d21809283bfeac2e058dd6b&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 쿠버네티스를 도입하면 이러한 반복적인 수동 설정 과정을 오케스트레이션 도구가 &lt;b&gt;자동화&lt;/b&gt;해 주기 때문에, 운영 및 배포 생산성이 크게 향상됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;block-3bbfd75a4d2180208d9ffe97e16ea86a&quot; style=&quot;background-color: #ffffff; color: #37352f; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결국 쿠버네티스 표준을 따른다는 것은, 반복되는 수작업에서 벗어나 애플리케이션 구축과 운영을 훨씬 빠르고 안정적으로 자동화할 수 있음을 의미합니다.&lt;/p&gt;</description>
      <category>Infra/Kubernetes</category>
      <author>@sseyeon_</author>
      <guid isPermaLink="true">https://sseyeon.tistory.com/43</guid>
      <comments>https://sseyeon.tistory.com/43#entry43comment</comments>
      <pubDate>Thu, 13 Aug 2026 22:46:43 +0900</pubDate>
    </item>
  </channel>
</rss>