k8s 42

K8s Cluster Tier 분류

이 페이지는 Production Kubernetes에서 발췌한 내용을 번역, 요약한 내용입니다. Cluster Tier Kubernetes Cluster는 그 목적과 SLO/SLA 수준에 따라 보통 아래와 같이 4개의 Tier로 구분할 수 있다. 시스템을 낮은 티어에서부터 많이 사용해볼 수록 Production 환경에서 문제를 일으킬 가능성이 낮아진다. Testing 일시적(ephemeral); 1주 이내의 TTL을 가지며 자동 제거됨 Single-tenant; 단일 개발팀 로컬 환경의 클러스터(ex: minikube)에서 테스트하기 힘들 때 Application의 최초 컨테이너화 및 테스트 수행시 SLO, SLA 존재하지 않음 최신 또는 pre-alpha 버전의 Kubernetes 사용 Developm..

Kubernetes 2022.07.22

Argo CD - ApplicationSet

ApplicationSet이 왜 필요할까? K8s를 사용하는 조직이라면, 클러스터를 목적에 따라 여러개로 구분하여 활용하는 곳이 대부분일 것이다. 환경별(Dev, Staging, Prod 등) 클러스터를 따로 구성하거나, 규모가 큰 기업은 프로젝트, 팀 또는 계열사마다 따로 클러스터를 사용하는 경우를 예로 들 수 있다. 이제 Argo CD와 연결된 여러 개의 클러스터에 동일한 Application을 배포하는 경우에 대해 생각해보자. 예를 들어, Dev, Staging, Prod 클러스터에 Prometheus를 배포한다면, Argo CD에 이름만 다르고 내용은 같은 Application 3개를 추가해야 한다. 클러스터와 애플리케이션이 많아질 수록 이런 단순 반복 작업(Toil)이 늘어나기 때문에, 자동화가..

CI-CD 2022.07.02

Terraform - Kubernetes 연동

Cluster Bootstrap? 일반적으로 K8s 클러스터를 생성한 다음, 바로 Application을 배포하기 보단 원활한 클러스터 운영을 위해 시스템 애플리케이션 및 스택(Argo CD, Prometheus, Grafana 등)을 먼저 설치하는 경우가 많다. 클러스터가 얼마 되지 않고 앞으로 추가되는 경우도 없다면 큰 문제가 없지만, 계속해서 운영해야할 클러스터가 늘어난다면 이런 시스템 애플리케이션을 일종의 Bootstrap처럼 기본 제공하는 방안을 고려할 필요가 있다. 이 페이지는 Terraform을 통해 K8s 리소스(ex: Deployment, Service)를 생성하는 방법에 대해 설명한다. 다만 클러스터를 생성하는 과정은 벤더나 Public/Private 여부 등 환경에 따라 큰 차이가 있..

IaC 2022.06.05

Kubernetes: The Documentary

Youtube에서 Kubernetes 관련 흥미로운 영상을 발견하여, 스크랩 및 정보 공유차 블로그에 올린다. 2022년 1월에 'Kubernetes: The Documentary'라는 제목으로 공개된 다큐멘터리로, K8s를 개발한 사람들이 직접 인터뷰를 하면서 어떻게 만들었는지부터 그 과정에서 있었던 비하인드 스토리를 이야기해 주는 형식이다. Part 1, 2 합쳐서 전체 50분 정도 되는 영상인데 지루할틈 없이 한번에 모두 봤을만큼 재밌는 내용이 많았다. 특히 Kubernetes라는 이름을 어떻게 지었는지 알려주는데, 약간은 허무하면서도 인상깊었다고 해야할까 ㅎㅎ 참고로 DockerCon 2014에서 K8s를 공개한 시점 이전과 이후를 기준으로 Part 1과 Part 2가 나뉘어져 있다. Part 1..

Kubernetes 2022.02.04

PodDisruptionBudget을 활용한 Application 보호

K8s의 고가용성 보장 K8s엔 서비스의 고가용성(HA; High Availability)을 보장하기 위해 다양한 Workload(ex: Deployment, Statefulset, Daemonset 등)이 존재한다. Replica 중 Pod 하나가 죽더라도, 다른 Pod이 살아있다면 계속해서 서비스를 제공할 수 있다. 또한 부족해진 replica 갯수는 K8s Controller를 통해 자동으로 다시 채워지며 이를 Reconciliation이라 한다. 하지만 특정 Usecase의 경우, 무결성 등의 이유로 반드시 정해진 갯수 이상의 Pod이 반드시 Running 상태로 존재해야 할 필요가 있다. 예를 들어 etcd, zookeeper와 같이 여러개 Instance가 클러스터를 구성하여 Stateful ..

Kubernetes 2021.09.22

Argo Workflows - (5) Retry, 재귀 호출

Retry Strategy 실제 서비스 운영시, DB 연결시 Timeout 등의 문제로 프로세스를 재시작해야 하는 경우가 발생할 수 있다. Argo Workflows에서도 Task에서 에러 발생시, task를 다시 생성하여 재시도하는 기능을 제공한다. 다음은 일부러 Python 스크립트 에러를 발생시켜 지정된 횟수만큼 retry를 하는 워크플로우 예시이다. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: wf-retrystrategy- spec: entrypoint: dag-template arguments: parameters: - name: messageA value: A templates: - name: dag-temp..

CI-CD 2021.07.12

Argo Workflows - (4) Secret, 반복 및 조건부 실행

Secret Template 정의시, 미리 생성해 놓은 K8s Secret 또는 ConfigMap 리소스를 사용할 수 있다. 우선 다음 명령어로 Secret 'test-secret'을 생성한다. kubectl -n argo create secret generic test-secret --from-literal test-password="Password123" 그리고 wf-artifact 워크플로우를 아래와 같이 수정하여, secret을 환경변수로 사용하는 'wf-secret-env'를 정의하였다. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: wf-secret-env spec: entrypoint: dag-template argument..

CI-CD 2021.07.10

Argo Workflows - (3) Parameter, Artifact

Parameters Workflow를 정의할 때, template에서 사용할 변수를 정의하고 해당 template 호출시 값을 전달해 줄 수 있는 이를 Parameter라고 한다. Argo Workflows에는 Input과 Output 두가지 타입의 Parameter가 존재한다. Input Input Parameter의 값을 달리 하여, Template 실행시 다른 동작을 하도록 구성할 수 있다. 이전에 작성했던 wf-dag-template.yaml을 수정하여, 다음과 같은 Workflow manifest를 작성해보자. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: name: wf-input-parameter-templates spec: entry..

CI-CD 2021.07.07

Argo Workflows - (2) Core Concepts

Core Concepts 이번 시간엔 Argo Workflows의 기본 개념과 Workflow에 대해서 알아보자. 가장 먼저 Argo Workflows 공식 홈페이지에서 제공하는 간단한 'Hello world' 예제부터 시작한다. 'Hello world' Workflow 아래와 같이 'wf-hello-world.yaml'을 작성한다. apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: hello-world- # Name of this Workflow spec: entrypoint: whalesay # Defines "whalesay" as the "main" template templates: - name: whalesay # ..

CI-CD 2021.07.04

Argo Workflows - (1) Introduction

Argo Workflows Workflow 엔진의 필요성 Kubernetes가 웹서버 형태로 동작하는 마이크로서비스를 배포하기에 최적화된 플랫폼인 것은 부정할 수 없는 사실이다. 다만 현실 세계에서 부딪힐 수 있는 문제 중엔 단순 Batch 또는 Machine Learning, ETL(Extract, Transform, Load)과 같이 일회성의 프로세스들이 일련의 흐름으로 묶인 작업을 처리할 경우가 있다. K8s에선 이를 위해 Job, CronJob 등의 Workload를 제공하나, 이것만으로 여러 컨테이너가 유기적으로 연결되도록 구성하기엔 많은 어려움이 있다. 현재 시장엔 K8s의 기능을 확장시켜 복잡한 Workflow를 생성, 실행할 수 있는 다양한 솔루션이 존재하며, 이를 Workflow Engi..

CI-CD 2021.07.01