<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes on 홈랩운영일지</title><link>https://dakim.dev/tags/kubernetes/</link><description>Recent content in Kubernetes on 홈랩운영일지</description><generator>Hugo</generator><language>en</language><lastBuildDate>Wed, 18 Feb 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://dakim.dev/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>Hugo 블로그 셀프호스팅 하기</title><link>https://dakim.dev/posts/01.starting-blog/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://dakim.dev/posts/01.starting-blog/</guid><description>Hugo 블로그와 Obsidian 기반 콘텐츠 관리 구조를 설계하고, Git Submodule로 멀티 레포 구조를 구성했다. Argo Events와 Argo Workflows를 이용해 Gitea Webhook 기반 CI/CD 파이프라인을 구축하고, 이미지 빌드부터 Helm 배포까지 자동화했다.</description></item><item><title>Helm Chart 작성방법 (1)</title><link>https://dakim.dev/posts/00.guide-for-helm-chart1/</link><pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate><guid>https://dakim.dev/posts/00.guide-for-helm-chart1/</guid><description>&lt;p&gt;Kubernetes 환경에서 애플리케이션 배포를 반복하다 보면, 결국 매니페스트 관리의 복잡성과 중복 문제에 직면하게 된다. Helm은 이러한 문제를 해결하기 위한 사실상의 표준 도구로, 매개변수화된 Kubernetes 리소스 정의와 배포 자동화를 가능하게 한다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Helm Chart&lt;/strong&gt;는 Kubernetes 리소스(YAML)를&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;템플릿화&lt;/li&gt;
&lt;li&gt;버전 관리&lt;/li&gt;
&lt;li&gt;파라미터화(values.yaml)&lt;/li&gt;
&lt;li&gt;패키징/배포&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;하기 위한 애플리케이션 패키지 규격&lt;/p&gt;
&lt;h2 id="기본-구조"&gt;기본 구조&lt;/h2&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#b4b4b4;background-color:#121212;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;my-app/
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── Chart.yaml # 차트 메타데이터 (필수)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── values.yaml # 기본 설정값 (필수)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── values.schema.json # values 검증 (선택)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;├── templates/ # Kubernetes 리소스 템플릿
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── deployment.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── service.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── ingress.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── configmap.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── secret.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ ├── _helpers.tpl # 공통 함수 정의
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;│ └── NOTES.txt # helm install 후 출력 메시지
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;└── charts/ # 의존 차트 (서브차트)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="chartyaml-작성"&gt;Chart.yaml 작성&lt;/h2&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#b4b4b4;background-color:#121212;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d87c4a;font-style:italic"&gt;apiVersion&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;:&lt;/span&gt; v2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d87c4a;font-style:italic"&gt;name&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;:&lt;/span&gt; my-app
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d87c4a;font-style:italic"&gt;description&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;:&lt;/span&gt; My application Helm chart
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d87c4a;font-style:italic"&gt;type&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;:&lt;/span&gt; application
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d87c4a;font-style:italic"&gt;version&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;:&lt;/span&gt; &lt;span style="color:#4a8b8b"&gt;0.1.0&lt;/span&gt; &lt;span style="color:#737373;font-style:italic"&gt;# Helm Chart 버전&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d87c4a;font-style:italic"&gt;appVersion&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;:&lt;/span&gt; &lt;span style="color:#df6464"&gt;&amp;#34;1.2.3&amp;#34;&lt;/span&gt; &lt;span style="color:#737373;font-style:italic"&gt;# 실제 애플리케이션 버전&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;필드&lt;/th&gt;
 &lt;th&gt;의미&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;version&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;차트 변경 시 증가&lt;/strong&gt; (semver)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;appVersion&lt;/td&gt;
 &lt;td&gt;컨테이너/앱 버전 (image tag)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;type&lt;/td&gt;
 &lt;td&gt;application / library&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;











&lt;div class="alert alert-tip" &gt;
 &lt;div class="alert-header" &gt;
 &lt;span class="alert-icon"&gt;
 
 
 &lt;svg style="width: 1.25em; height: 1.25em; vertical-align: text-bottom; margin-right: 0.2rem;"
 class="admonition-favicon" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="2"
 stroke-linecap="round" stroke-linejoin="round"&gt;
 &lt;path
 d="M15 14c.2-1 .7-1.7 1.5-2.5 1-1 1.5-2.4 1.5-3.8 0-3.3-2.7-6-6-6 0 0 0 0-0 0-3.3 0-6 2.7-6 6 0 1.4.5 2.8 1.5 3.8.8.8 1.3 1.5 1.5 2.5"&gt;
 &lt;/path&gt;
 &lt;path d="M9 18h6"&gt;&lt;/path&gt;
 &lt;path d="M10 22h4"&gt;&lt;/path&gt;
&lt;/svg&gt;
 
 
 &lt;/span&gt;
 &lt;span class="alert-title"&gt;
 
 Tip
 
 &lt;/span&gt;
 
 &lt;/div&gt;
 &lt;div class="alert-content" id="alert-0" &gt;
 &lt;p&gt;CI에서 앱 버전 자동 감지 → appVersion 업데이트 패턴을 자주 사용함&lt;/p&gt;</description></item><item><title>Helm Chart 작성방법 (2)</title><link>https://dakim.dev/posts/00.guide-for-helm-chart2/</link><pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate><guid>https://dakim.dev/posts/00.guide-for-helm-chart2/</guid><description>&lt;p&gt;Helm Chart의 핵심은 단순한 YAML 파일이 아니라, Go Template을 기반으로 한 동적 렌더링 로직에 있다. 조건문, 반복문, 변수 치환, 함수 호출 등 Go Template 문법을 이해하지 못하면 Chart가 커질수록 유지보수가 어려워진다.&lt;/p&gt;
&lt;p&gt;Go Template의 기본 문법을 알아보자.&lt;/p&gt;
&lt;h2 id="1-기본-표현식-구문"&gt;1. 기본 표현식 구문&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="템플릿-블록"&gt;템플릿 블록&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#b4b4b4;background-color:#121212;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{&lt;/span&gt;&lt;span style="color:#d87c4a"&gt;%&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;raw&lt;/span&gt; &lt;span style="color:#d87c4a"&gt;%&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{{&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;EXPRESSION&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{&lt;/span&gt;&lt;span style="color:#d87c4a"&gt;%&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;endraw&lt;/span&gt; &lt;span style="color:#d87c4a"&gt;%&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{``{&lt;/code&gt; &lt;code&gt;}``}&lt;/code&gt;내부만 템플릿 엔진이 평가&lt;/li&gt;
&lt;li&gt;YAML/문자열 어디든 삽입 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="공백-제어"&gt;공백 제어&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#b4b4b4;background-color:#121212;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{&lt;/span&gt;&lt;span style="color:#d87c4a"&gt;%&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;raw&lt;/span&gt; &lt;span style="color:#d87c4a"&gt;%&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{{&lt;/span&gt;&lt;span style="color:#d87c4a"&gt;-&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;EXP&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;}}&lt;/span&gt; &lt;span style="color:#c53030"&gt;#&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;왼쪽&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;공백&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;제거&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{{&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;EXP&lt;/span&gt; &lt;span style="color:#d87c4a"&gt;-&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;}}&lt;/span&gt; &lt;span style="color:#c53030"&gt;#&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;오른쪽&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;공백&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;제거&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{{&lt;/span&gt;&lt;span style="color:#d87c4a"&gt;-&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;EXP&lt;/span&gt; &lt;span style="color:#d87c4a"&gt;-&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;}}&lt;/span&gt; &lt;span style="color:#c53030"&gt;#&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;양쪽&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;제거&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;{&lt;/span&gt;&lt;span style="color:#d87c4a"&gt;%&lt;/span&gt; &lt;span style="color:#d5d5d5"&gt;endraw&lt;/span&gt; &lt;span style="color:#d87c4a"&gt;%&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="2-값-참조-value-access"&gt;2. 값 참조 (Value Access)&lt;/h2&gt;
&lt;hr&gt;
&lt;h3 id="기본-경로-접근"&gt;기본 경로 접근&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#b4b4b4;background-color:#121212;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-go" data-lang="go"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;.&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;Values&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;.&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#d5d5d5"&gt;.&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;Values&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;.&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;parent&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;.&lt;/span&gt;&lt;span style="color:#d5d5d5"&gt;child&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;YAML map → dot(&lt;code&gt;.&lt;/code&gt;)으로 접근&lt;/p&gt;</description></item><item><title>Helm Chart 작성방법 (3)</title><link>https://dakim.dev/posts/00.guide-for-helm-chart3/</link><pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate><guid>https://dakim.dev/posts/00.guide-for-helm-chart3/</guid><description>&lt;p&gt;Helm Chart의 규모가 커질수록, Template 파일 곳곳에 반복되는 코드와 공통 로직이 늘어나게 된다. 이러한 중복을 줄이고 Chart를 구조적으로 관리하기 위해 Helm은 &lt;code&gt;_helpers.tpl&lt;/code&gt;이라는 공용 Template 파일을 제공한다.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;_helpers.tpl&lt;/code&gt;은 Helm Chart 내에서 사용하는 &lt;strong&gt;Go template&lt;/strong&gt; 조각(template definitions)을 모아두는 파일&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;파일명은 관례적으로 &lt;code&gt;_helpers.tpl&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;_&lt;/code&gt;로 시작하는 이유는 Kubernetes 리소스로 렌더링되지 않기 때문&lt;/li&gt;
&lt;/ul&gt;








&lt;blockquote class="blockquote-regular"&gt;
 &lt;p&gt;즉, &lt;code&gt;_helpers.tpl&lt;/code&gt; 자체는 YAML 리소스를 생성하지 않는다.
{: .prompt-info }&lt;/p&gt;

&lt;/blockquote&gt;
&lt;h2 id="helm이-_helperstpl을-처리하는-방식"&gt;Helm이 &lt;code&gt;_helpers.tpl&lt;/code&gt;을 처리하는 방식&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;Helm은 &lt;code&gt;templates/&lt;/code&gt; 디렉터리 아래의 모든 &lt;code&gt;.yaml&lt;/code&gt;, &lt;code&gt;.tpl&lt;/code&gt; 파일을 한 번 전부 로드&lt;/p&gt;</description></item><item><title>Kubernetes에서 사용 가능한 CRI 비교</title><link>https://dakim.dev/posts/00.kubernetes-cri/</link><pubDate>Sat, 07 Jun 2025 00:00:00 +0000</pubDate><guid>https://dakim.dev/posts/00.kubernetes-cri/</guid><description>&lt;p&gt;쿠버네티스에서 컨테이너를 실행하려면 반드시 **CRI(Container Runtime Interface)**가 필요하다. 현재 쿠버네티스 환경에서 가장 널리 선택되는 옵션은 다음 세 가지다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;containerd&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CRI-O&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;cri-dockerd&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 런타임은 태생적 배경과 목표가 다르기 때문에 구조, 성능, 운영 방식에도 차이가 있다.&lt;br&gt;
이 글에서는 세 런타임을 비교하고, 어떤 환경에서 어떤 런타임을 선택해야 하는지 정리한다.&lt;/p&gt;
&lt;h2 id="1-containerd"&gt;1. containerd&lt;/h2&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;containerd&lt;/strong&gt;는 원래 Docker 내부의 핵심 엔진이었지만, 컨테이너 표준화를 위해 CNCF 독립 프로젝트로 분리된 런타임이다.&lt;br&gt;
현재 Kubernetes에서 가장 널리 사용되며, 쿠버네티스 공식 문서에서도 권장하는 런타임이다.&lt;/p&gt;</description></item><item><title>kubeconfig 파일 병합하기</title><link>https://dakim.dev/posts/00.merging-kubeconfig/</link><pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate><guid>https://dakim.dev/posts/00.merging-kubeconfig/</guid><description>&lt;p&gt;여러 개의 Kubernetes 클러스터를 운영하다 보면 kubeconfig 파일이 여러 개로 흩어지기 쉽다. 테스트·운영 클러스터가 각각 따로 있고, 로컬 개발 환경까지 더해지면 설정 파일이 폴더 곳곳에 생겨 관리가 복잡해진다.&lt;/p&gt;
&lt;p&gt;이 글에서는 이러한 여러 kubeconfig 파일을 하나로 병합해 관리성을 높이는 방법을 소개한다. kubectl을 사용할 때 context 전환을 쉽게 하고, 설정이 산재해 생기는 혼란을 방지하는 데 도움이 된다.&lt;/p&gt;
&lt;h2 id="1-kubeconfig-파일-백업하기"&gt;1. kubeconfig 파일 백업하기&lt;/h2&gt;
&lt;p&gt;기존 설정을 잃어버리면 곤란하므로 병합 작업을 시작하기 전에 반드시 백업을 만들어둔다.&lt;/p&gt;</description></item></channel></rss>