전체 글 77

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

Container Vs. VM

이번 시간엔 컨테이너와 가상머신(VM; Virtual Machine)을 비교하는 시간을 갖고자 한다. VM(Virtual Machine) 하나의 물리적인 컴퓨터(Baremetal) 위에 하이퍼바이저(Hypervisor)가 존재하여 H/W 자원(CPU, Memory 등)을 가상화한 레이어를 제공한다. VM은 하이퍼바이저 위에서 필요한 만큼의 자원이 할당된 가상의 컴퓨터로, 각각의 VM은 서로간의 존재를 알 수 없으며 커널을 포함한 OS는 독립적으로 실행된다. 일반적으로 클라우드 환경에서 인프라(서버, 네트워크, 스토리지 등)를 프로비저닝하는데 가장 많이 사용되며, 환경을 분리하거나 전통적인 Monolithic Architecture 기반의 서비스를 운영하는데 쓰인다. 물리적인 컴퓨터와 기능면에선 차이가 없..

Cloud 2021.06.26

Terraform - (7) Advanced

리소스 간의 의존성(Dependency) 처리 Terraform 리소스 정의 순서에 관계없이, 의존성을 위해 특정 리소스를 먼저 생성해야 할 필요가 있다. 예를 들어, VPC를 추가한 후 ec2 인스턴스를 해당 VPC 안에 생성하는 동작을 수행하는 경우이다. 이를 위해 Terraform은 resource 블록 안에 'depends_on' 필드를 설정하여, 다른 리소스에 의존성이 있는 것을 명시할 수 있다. 다음은 ec2 인스턴스 'web'과 'db'를 생성하는 main.tf 이다. 'web' 인스턴스는 'db' 인스턴스에 의존성이 있기 때문에 반드시 'db' 인스턴스가 먼저 생성되어야 한다. provider "aws" { region = "ap-northeast-2" } resource "aws_inst..

IaC 2021.06.19

Terraform - (6) IAM

AWS IAM IAM은 'Identitiy and Access Management'의 약자로, AWS 리소스에 대한 접근을 제어할 수 있는 서비스이다. IAM을 통해 Authentication 및 Authorization이 이루어진다. 자세한 내용은 링크를 참고하기 바란다. IAM이란 무엇인가요? - AWS Identity and Access Management 이 페이지에 작업이 필요하다는 점을 알려 주셔서 감사합니다. 실망시켜 드려 죄송합니다. 잠깐 시간을 내어 설명서를 향상시킬 수 있는 방법에 대해 말씀해 주십시오. docs.aws.amazon.com 이번 시간엔 Terraform을 통해 IAM User와 Policy를 생성하고 이를 Binding하는 동작을 Terraform으로 정의해보자. 우선 ..

IaC 2021.06.18

Terraform - (5) Modules

Module 지금까지는 main.tf에 모든 코드를 작성하는 방식으로 진행하였다. 이번 시간엔 용도에 따라, Terraform 파일을 분리하고 이를 main.tf에서 호출하는 방식으로 구성해보자. 우선 'modules/ec2' 라는 디렉토리 하위에 ec2.tf 파일을 다음과 같이 작성한다. variable "ec2name" { type = string } resource "aws_instance" "ec2" { ami = "ami-0094965d55b3bb1ff" instance_type = "t2.micro" tags = { Name = var.ec2name } } output "instance_id" { value = aws_instance.ec2.id } 'ec2name' 변수는 해당 모듈을 호출하..

IaC 2021.06.10

Terraform - (4) 기본 AWS 리소스

aws_instance 리소스 이번 시간엔 본격적으로 EC2를 생성해보자. 우선 다음과 같은 main.tf를 작성한다. provider "aws" { region = "ap-northeast-2" } resource "aws_instance" "ec2" { ami = "ami-0094965d55b3bb1ff" instance_type = "t2.micro" } EC2 인스턴스를 추상화한 aws_instance 리소스를 정의한다. Required field가 2개 있는데 하나는 AMI의 ID를 의미하는 ami와 인스턴스 타입 'instance_type'이다. AMI ID는 Region마다 다르며, 찾는 방법은 링크를 참고하기 바란다. 참고로 위 EC2 인스턴스는 따로 VPC를 지정하지 않았기 때문에, De..

IaC 2021.06.08

Terraform - (3) Variables

Terraform 변수형 Terraform 코드 안에서 다양한 타입의 변수를 정의하고, 이를 참조할 수 있다. 기본 제공하는 변수형은 다음과 같다. 'variable' 키워드로 시작하며, 그 뒤에 변수명을 선언하는 것으로 새로운 변수를 정의할 수 있다. string variable "vpcname" { type = string default = "myvpc" } 일반적인 문자열이며, Unicode 문자들로 구성된다. number variable "sshport" { type = number default = 22 } 숫자(numeric)를 담을 수 있는 변수형으로, 정수형 데이터 외에 실수(ex: 3.14)도 표현 가능하다. bool variable "enabled" { type = bool defaul..

IaC 2021.06.07

Terraform - (2) 기본 사용법

리소스 정의 tutorial01이라는 디렉토리와 하위에 main.tf 라는 파일을 생성한 뒤, 아래와 같은 코드를 작성해보자. 'ap-northeast-2' region에 새로운 VPC 리소스를 생성하는 매우 간단한 코드이다. 참고로 Terraform은 HashiCorp에서 정의한 언어인 HCL을 사용하며, 확장자명은 반드시 .tf 파일 또는 .tf.json(JSON 형식)을 갖는다. provider "aws" { region = "ap-northeast-2" } resource "aws_vpc" "myvpc" { cidr_block = "10.0.0.0/16" } provider는 AWS, Azure와 같은 Public Cloud에서부터 Docker, K8s와 같은 외부 Infrastrcuture의 A..

IaC 2021.06.06

ETCD Backup&Restore

ETCD는 K8s 클러스터의 모든 데이터가 위치한 저장소로, 주기적으로 백업하여 혹시 모를 재난에 대비할 수 있어야 한다. 다행히 자체적으로 스냅샷과 복원 기능을 제공하기 때문에 어렵지 않게 사용할 수 있다. K8s Master node에서 아래와 같은 작업을 진행한다. etcdctl CLI에서 etcd를 관리할 수 있는 툴이다. Ubuntu의 경우, etcd-client 패키지를 설치하면 바로 사용할 수 있다. apt update -y && apt install -y etcd-client Snapshot 생성 다음 명령어로 현재 etcd 클러스터의 snapshot을 현재 위치에 'etcd-snapshot.db' 파일로 저장할 수 있다. ETCDCTL_API=3 etcdctl --cacert=/etc/k..

Kubernetes 2021.05.29

[CKS] 취득 후기

첫 시도 5/15에 CKS 시험을 치뤘으며, 결과만 먼저 얘기하자면 66%로 커트라인인 67%를 넘기지 못하여 불합격 처리되었다. 전체 15문제 중 배점이 높은 ImagePolicyWebhook을 제대로 설정하지 못했고, 몇몇 문제에 말려서 시간을 허비하는 바람에 답안을 충분히 검토할 시간이 부족했다. 다 풀고 나니 5분 밖에 남지 않은 상황이라 아무 것도 할 수가 없었다. 아마 Manifest 파일 정의까지만 해놓은 상태에서 깜빡하고 적용을 하지 않은 답안들이 꽤 있었을 것이다. 게다가 시험 환경에서 제공하는 Notepad가 있는줄 모르고, 계속 vim을 들락날락 하면서 복사/붙여넣기 하느라 불필요한 시간을 낭비했다. CKA나 CKAD와는 달리, 대부분의 문제가 단순히 리소스 하나만 정의하는데서 끝나지..