전체 글 77

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

Container 101 - (1) Introduction

지금 여러분이 IT업계에서 일하고 있다면 컨테이너라는 단어를 언젠가 한번은 꼭 들어봤을 것이다. 단순히 가상화 기술이라고 하기엔 그 범위와 중요성이 너무 커서, 더 이상 컨테이너 기술을 모른다면 Cloud Native 시대를 생존하기 어려울 지경이다. 도대체 컨테이너가 뭔데, 얼마나 좋길래 이렇게 난리인걸까? 그 질문에 앞서 '왜 컨테이너가 필요할까?'를 먼저 생각해 볼 필요가 있다. 다음과 같이 정말 원시적인 호스팅 환경을 예로 들겠다. 서버 1대에 여러개의 어플리케이션을 배포하였다. 어플리케이션은 단독으로 실행되지 않고, 패키지나 라이브러리(ex: libssl.so)와 같은 Dependency가 존재하며 서로 같은 라이브러리를 공유할 수 있다. 이제 특정 어플리케이션을 업그레이드하면서 dependec..

Cloud 2022.01.10

Amazon RDS - Read Replica와 Multi AZ 비교

Read Replica 데이터베이스에서 Read Replica는 Read/Write 모두 가능한 Master DB 인스턴스에 비해 SELECT 쿼리와 같은 Read 작업만 수행가능한 인스턴스이다. Read Replica로의 Write 작업은 허용하지 않는다. RDS에서 제공하는 Read Replica는 다음과 같은 특성을 갖는다. Read Replica를 최대 5개까지 추가할 수 있음 동일 AZ, Cross AZ, Cross Region 가능 비동기 방식의 Replication 짧은 시간 동안 Replica와 Master 간의 데이터 차이가 발생할 수 있음 Read Replica를 Master DB로 변경할 수 있음(Promotion) 참고로 어플리케이션 레벨에서 Read Replica를 활용하기 위해선..

Cloud 2021.11.07

Amazon RDS - 개요

Amazon RDS RDS는 Relation Database Service의 약자로, AWS에서 제공, 관리하는 DBaaS(DB as a Service) 중 하나이다. Relation이라는 단어에서 바로 알 수 있듯 SQL을 쿼리로 사용하는 관계형 데이터베이스(RDB; Relational Database)이며, 현재 RDS에서 선택 가능한 DB 엔진은 다음과 같다. Aurora PosgreSQL MySQL MariaDB Oracle SQL Server 참고로 Aurora는 MySQL, PostgreSQL과 호환되는 관계형 데이터베이스로 Amazon에서 직접 개발하였으며, 빠른 성능과 안정성을 자랑한다. 전적으로 Amazon에 소유권이 있으며, 소스코드는 공개되지 않았다. RDS는 클라우드 프로바이더가 사..

Cloud 2021.11.05

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

Kubernetes Custom Resource와 Controller

시작하며... Kubernetes는 기본로 제공하는 Built-in Object(ex: Deployment, Service) 외에 따로 정의한 Custom Resource를 통해 클러스터의 기능을 확장시킬 수 있다. 예를 들어 Istio의 VirtualService나 DestinationRule, ArgoCD의 Project, Application 등을 예로 들 수 있다. 물론 Custom Resource만을 정의한다고 해서 새로운 기능을 추가할 수는 없으며, 'Custom Controller' 또는 'Operator'를 통해 built-in object와 custom resource에 대한 동작을 구현해야 한다. 참고로 k8s는 Custom Controller의 쉬운 구현을 위해 client-go 라이..

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