[{"content":"개요 블로그를 새로 구축하며 엔진 변경부터 UI 개선, 그리고 배포 자동화까지 진행했던 작업 내용을 정리한다.\nJekyll에서 Hugo로 블로그 엔진 변경 테마 적용 및 커스터마이징 Obsidian 연동과 Git Submodule 기반 콘텐츠 분리 Argo Events / Argo Workflows 기반 배포 자동화 Jekyll에서 Hugo로 블로그 엔진을 변경한 이유 기존 블로그는 Jekyll 기반으로 운영하고 있었다.\nGitHub Pages와의 호환성이 좋아 널리 사용되는 정적 사이트 생성기이지만, 실제로 운영하면서 몇 가지 불편한 점이 있었다.\n테마 관리의 어려움 직접 테마를 제작하는 경우라면 큰 문제가 되지 않겠지만, 오픈소스 테마를 기반으로 블로그를 운영하는 경우에는 상황이 다르다.\n테마를 커스터마이징하기 시작하면 블로그 레포지토리 내부에서 직접 수정해야 하는 경우가 많고, 이 상태에서 테마가 업데이트되면 변경 사항을 다시 병합해야 하는 문제가 발생한다.\n결과적으로 테마를 …","date":"2026-02-18","permalink":"/posts/01.starting-blog/","summary":"Hugo 블로그와 Obsidian 기반 콘텐츠 관리 구조를 설계하고, Git Submodule로 멀티 레포 구조를 구성했다. Argo Events와 Argo Workflows를 이용해 Gitea Webhook 기반 CI/CD 파이프라인을 구축하고, 이미지 빌드부터 Helm 배포까지 자동화했다.","tags":["Hugo","CI/CD","Gitea","Kubernetes","Obsidian"],"title":"Hugo 블로그 셀프호스팅 하기"},{"content":"Headings H1 — heading H2 — heading H3 — heading H4 — heading Paragraph Quisque egestas convallis ipsum, ut sollicitudin risus tincidunt a. Maecenas interdum malesuada egestas. Duis consectetur porta risus, sit amet vulputate urna facilisis ac. Phasellus semper dui non purus ultrices sodales. Aliquam ante lorem, ornare a feugiat ac, finibus nec mauris. Vivamus ut tristique nisi. Sed vel leo vulputate, efficitur risus non, posuere mi. Nullam tincidunt bibendum rutrum. Proin commodo ornare sapien. …","date":"2026-02-18","permalink":"/posts/00.text-and-typography/","summary":"mana theme typogarphy","tags":["typography"],"title":"Text and Typography"},{"content":"Kubernetes 환경에서 애플리케이션 배포를 반복하다 보면, 결국 매니페스트 관리의 복잡성과 중복 문제에 직면하게 된다. Helm은 이러한 문제를 해결하기 위한 사실상의 표준 도구로, 매개변수화된 Kubernetes 리소스 정의와 배포 자동화를 가능하게 한다.\nHelm Chart는 Kubernetes 리소스(YAML)를\n템플릿화 버전 관리 파라미터화(values.yaml) 패키징/배포 하기 위한 애플리케이션 패키지 규격\n기본 구조 my-app/ ├── Chart.yaml # 차트 메타데이터 (필수) ├── values.yaml # 기본 설정값 (필수) ├── values.schema.json # values 검증 (선택) ├── templates/ # Kubernetes 리소스 템플릿 │ ├── deployment.yaml │ ├── service.yaml │ ├── ingress.yaml │ ├── configmap.yaml │ ├── secret.yaml │ ├── …","date":"2025-07-21","permalink":"/posts/00.guide-for-helm-chart1/","summary":"Kubernetes 환경에서 애플리케이션 배포를 반복하다 보면, 결국 매니페스트 관리의 복잡성과 중복 문제에 직면하게 된다. Helm은 이러한 문제를 해결하기 위한 사실상의 표준 도구로, 매개변수화된 Kubernetes 리소스 정의와 배포 자동화를 가능하게 한다.\nHelm Chart는 Kubernetes 리소스(YAML)를\n템플릿화 버전 관리 파라미터화 …","tags":["kubernetes","helm","helm-chart","templating","go-template"],"title":"Helm Chart 작성방법 (1)"},{"content":"Helm Chart의 핵심은 단순한 YAML 파일이 아니라, Go Template을 기반으로 한 동적 렌더링 로직에 있다. 조건문, 반복문, 변수 치환, 함수 호출 등 Go Template 문법을 이해하지 못하면 Chart가 커질수록 유지보수가 어려워진다.\nGo Template의 기본 문법을 알아보자.\n1. 기본 표현식 구문 템플릿 블록 {% raw %} {{ EXPRESSION }} {% endraw %} {``{ }``}내부만 템플릿 엔진이 평가 YAML/문자열 어디든 삽입 가능 공백 제어 {% raw %} {{- EXP }} # 왼쪽 공백 제거 {{ EXP -}} # 오른쪽 공백 제거 {{- EXP -}} # 양쪽 제거 {% endraw %} 2. 값 참조 (Value Access) 기본 경로 접근 .Values.key .Values.parent.child YAML map → dot(.)으로 접근\ndot(.) 의미 . = 현재 scope 객체 기본 root = Helm …","date":"2025-07-21","permalink":"/posts/00.guide-for-helm-chart2/","summary":"Helm Chart의 핵심은 단순한 YAML 파일이 아니라, Go Template을 기반으로 한 동적 렌더링 로직에 있다. 조건문, 반복문, 변수 치환, 함수 호출 등 Go Template 문법을 이해하지 못하면 Chart가 커질수록 유지보수가 어려워진다.\nGo Template의 기본 문법을 알아보자.\n1. 기본 표현식 구문 템플릿 블록 {% raw %} …","tags":["kubernetes","helm","helm-chart","templating","go-template"],"title":"Helm Chart 작성방법 (2)"},{"content":"Helm Chart의 규모가 커질수록, Template 파일 곳곳에 반복되는 코드와 공통 로직이 늘어나게 된다. 이러한 중복을 줄이고 Chart를 구조적으로 관리하기 위해 Helm은 _helpers.tpl이라는 공용 Template 파일을 제공한다.\n_helpers.tpl은 Helm Chart 내에서 사용하는 Go template 조각(template definitions)을 모아두는 파일\n파일명은 관례적으로 _helpers.tpl _로 시작하는 이유는 Kubernetes 리소스로 렌더링되지 않기 때문 즉, _helpers.tpl 자체는 YAML 리소스를 생성하지 않는다. {: .prompt-info }\nHelm이 _helpers.tpl을 처리하는 방식 Helm은 templates/ 디렉터리 아래의 모든 .yaml, .tpl 파일을 한 번 전부 로드\n.yaml → 실제 리소스 생성 가능 .tpl → define된 template만 메모리에 등록 _helpers.tpl에 정의된 것은: …","date":"2025-07-21","permalink":"/posts/00.guide-for-helm-chart3/","summary":"Helm Chart의 규모가 커질수록, Template 파일 곳곳에 반복되는 코드와 공통 로직이 늘어나게 된다. 이러한 중복을 줄이고 Chart를 구조적으로 관리하기 위해 Helm은 _helpers.tpl이라는 공용 Template 파일을 제공한다.\n_helpers.tpl은 Helm Chart 내에서 사용하는 Go template 조각(template …","tags":["kubernetes","helm","helm-chart","templating","go-template"],"title":"Helm Chart 작성방법 (3)"},{"content":"쿠버네티스에서 컨테이너를 실행하려면 반드시 **CRI(Container Runtime Interface)**가 필요하다. 현재 쿠버네티스 환경에서 가장 널리 선택되는 옵션은 다음 세 가지다.\ncontainerd CRI-O cri-dockerd 각 런타임은 태생적 배경과 목표가 다르기 때문에 구조, 성능, 운영 방식에도 차이가 있다.\n이 글에서는 세 런타임을 비교하고, 어떤 환경에서 어떤 런타임을 선택해야 하는지 정리한다.\n1. containerd containerd는 원래 Docker 내부의 핵심 엔진이었지만, 컨테이너 표준화를 위해 CNCF 독립 프로젝트로 분리된 런타임이다.\n현재 Kubernetes에서 가장 널리 사용되며, 쿠버네티스 공식 문서에서도 권장하는 런타임이다.\ncontainerd의 역할 컨테이너 생성·시작·중지 이미지 Pull/Push snapshotter를 통한 루트 파일시스템 관리 OCI 런타임(runc) 실행 내장된 CRI 플러그인으로 kubelet과 직접 통신 …","date":"2025-06-07","permalink":"/posts/00.kubernetes-cri/","summary":"쿠버네티스에서 컨테이너를 실행하려면 반드시 **CRI(Container Runtime Interface)**가 필요하다. 현재 쿠버네티스 환경에서 가장 널리 선택되는 옵션은 다음 세 가지다.\ncontainerd CRI-O cri-dockerd 각 런타임은 태생적 배경과 목표가 다르기 때문에 구조, 성능, 운영 방식에도 차이가 있다.\n이 글에서는 세 런타임을 …","tags":["kubernetes","cri","containerd","cri-dockerd","cri-o"],"title":"Kubernetes에서 사용 가능한 CRI 비교"},{"content":"여러 개의 Kubernetes 클러스터를 운영하다 보면 kubeconfig 파일이 여러 개로 흩어지기 쉽다. 테스트·운영 클러스터가 각각 따로 있고, 로컬 개발 환경까지 더해지면 설정 파일이 폴더 곳곳에 생겨 관리가 복잡해진다.\n이 글에서는 이러한 여러 kubeconfig 파일을 하나로 병합해 관리성을 높이는 방법을 소개한다. kubectl을 사용할 때 context 전환을 쉽게 하고, 설정이 산재해 생기는 혼란을 방지하는 데 도움이 된다.\n1. kubeconfig 파일 백업하기 기존 설정을 잃어버리면 곤란하므로 병합 작업을 시작하기 전에 반드시 백업을 만들어둔다.\ncp ~/.kube/config ~/.kube/config.bak 2. KUBECONFIG 환경 변수 설정하기 KUBECONFIG 변수는 참조할 kubeconfig 파일 경로들을 콜론(:)으로 연결한 목록이다.\n예시:\n/path/cluster1:/path/cluster2:/path/cluster3 아래처럼 여러 …","date":"2024-06-12","permalink":"/posts/00.merging-kubeconfig/","summary":"여러 개의 Kubernetes 클러스터를 운영하다 보면 kubeconfig 파일이 여러 개로 흩어지기 쉽다. 테스트·운영 클러스터가 각각 따로 있고, 로컬 개발 환경까지 더해지면 설정 파일이 폴더 곳곳에 생겨 관리가 복잡해진다.\n이 글에서는 이러한 여러 kubeconfig 파일을 하나로 병합해 관리성을 높이는 방법을 소개한다. kubectl을 사용할 때 …","tags":["kubeconfig","kubectl","kubernetes"],"title":"kubeconfig 파일 병합하기"}]