개요 Terraform은 Cloud Infrastructure를 자동화 하는 Iac 도구이다. 통상적으로 Iac 도구로 Terraform, Ansible이 언급되고 있는 것 같다. Terraform은 클라우드 공급자 API를 사용하여 인프라를 만들고 기본 구성 작업은 SSH를 사용하여 수행하고, Ansible은 구성 관리 작업에 특화된 오픈소스이다. Ansible은 카카오클라우드 스쿨 엔지니어 양성과정에서 학습 해봤지만, Terraform은 한 번도 해본적이 없기에 다른 분이 올려준 자료를 보고 천천히 따라해보려 한다. Terraform은 여러 Cloud Provider를 지원하는데, 이번 학습 시간에는 AWS - Terraform 조합으로 실습해보려 한다. 목표 테라폼으로 EC2 1개 설치 해보기 St..
개요 Cloud 전문가 카페에서 EKS 스터디를 모집하길래 냅다 지원했다. 기존에 EKS를 사용해 본 경험이 있었지만, 이번 스터디를 통해서 세부적인 아키텍처 이해, CloudFormation을 처음 사용해보는 귀한 경험을 했고, 블로그에 내용을 정리하며 복습해보려 한다! 목표 : Amazon EKS 프로비젼 해보기 Step 1. CloudFormation을 통해 Bastion Host 생성하기 Step 2. Bastion Host에 여러가지 Tool 설치하기(Feat. CloudFormation) Step 3. eksctl 명령어를 사용하여 EKS Provision Step 4. EKS에 게임(Super Mario) 애플리케이션 배포하기 Step 5. 워커노드 증설 해보기 이론 EKS 구성도 EKS(E..
목표 3대의 마스터노드와 2대의 워커노드를 사용한 고가용성 쿠버네티스 클러스터 구성하고자 한다. 고가용성 클러스터를 구성하는 방식은 아래와 같이 두 가지가 있다. 이번 실습은 스택 컨트롤 플레인 방식으로 고가용성 클러스터를 구성해본다. 스택 컨트롤 플레인 - etcd 노드가 컨트롤 플레인 노드와 함께 배치되는 스택형 컨트롤 플레인 노드 사용 외부 etcd 클러스터 사용 - etcd가 컨트롤 플레인과 별도의 노드에서 실행되는 외부 etcd 노드 사용 구성하기 Step 1. kube-api용 로드밸런서 구성 1. HAProxy 설치 패키지 관리자를 업데이트 sudo apt-get update HAProxy를 설치 sudo apt-get install haproxy 2. HAProxy 구성 HAProxy 구성..
Deployment 란? Deployment는 계층 구조 상 Replica Set 보다 상위에 위치한다. k8s환경에서 여러 개의 인스턴스로 작동하는 웹서비스가 있다고 할 때 Deployment 기능을 통해 아래와 같이 관리 할 수 있다. 인스턴스 업그레이드 인스턴스 이미지 버전, 리소스 등을 업그레이드 시킨다. Roll-back(롤백) 업데이트에 문제가 발생 한 경우 업데이트를 진행했던 인스턴스들의 버전을 업데이트 전으로 되돌린다. Roll-out(롤아웃) 실행중인 인스턴스를 종료하고, 환경, 리소스 등 주요 사항을 변경 후 다시 시작하여 반영한다. YAML 파일을 통해 Deployment 관리하기 YAML 파일 정의 apiVersion: apps/v1 kind: Deployment metadata: ..
Replication Controller 란? k8s 개체를 모니터링하고 필요 시 대응하는 프로세스 고 가용성(High Availability) Replication Controller에서 지정한 Pod의 개수가 항상 실행되도록 제어 2개의 Pod 생성을 지정했다고 가정했을 때, 1개 또는 2개 모두 장애가 발생하여 사용하지 못하는 상황이 오게 되면 이를 인지하고 1개 또는 2개의 Pod를 활성화 시켜 정의한 Pod 수만큼 Run(가용)상태를 유지함 따라서 Replication Controller는 고 가용성(High Availability) 특성을 지님 로드 밸런싱 & 스캐일링(Load Balancing & Scaling) Pod의 사용자가 증가하면 추가 Pod를 배포하여 두 개의 Pod에 부하를 분산..
시작하기 카카오클라우드 스쿨 엔지니어 2기를 진행하며 첫 번째 개인프로젝트인 도커 프로젝트를 진행하게 되었고 이런 저런 고민끝에 쉘 스크립트를 사용하여 도커 오토스케일링 구현하기 라는 주제를 선정하고 구현하게 되었는데, 이 과정을 정리해보려 한다. 1. 프로젝트 주제 선정 이유 및 목표 가. 주제 선정의 이유(문제 정의) docker swarm은 기본적으로 Auto-scale을 지원하지 않고, docker service 명령어를 통한 수동적인 컨테이너 배포만 가능하다. 이로 인해 컨테이너에 과부하가 발생하면 서비스 운영에 문제가 발생할 수 있기 때문에, docker swarm 환경에서 Auto-scaling을 구현하고자 한다. 나. 프로젝트 목표 매니저 노드 1대와 워커 노드 2대로 구성된 docker ..
Kubectl 명령어 kubectl 명령어는 쿠버네티스 API를 사용하여 쿠버네티스 클러스터의 컨트롤 플레인과 통신하기 위한 Command Tool이다. kubectl은 터미널 창에서 다음의 구문을 사용한다. kubectl [command] [TYPE] [NAME] [flags] 현재 쿠버네티스 클러스터에 배포된 Pod를 조회하는 kubectl 명령어는 아래와 같다. kubectl get pod kubectl 명령어 자동완성을 사용하는 이유 자동완성이란 Linux Terminal, Cisco 장비 등에서 Tab키를 사용하여 타이핑을 줄이고 실수를 방지할 수 있는 기능이다. 하지만 kubectl 명령어는 기본적으로 자동완성을 지원하지 않기 때문에, 별도의 설정을 통해 자동완성 기능을 적용한다면 쿠버네티스 ..
Kubernetes 클러스터 개요 Kubernetes 클러스터 구성 종류 Kubernetes를 구성하는 방법은 여러가지가 있다. 클라우드 플랫폼을 사용한 구성 - AWS(EKS), GCP(Kubernetes Engine) 로컬 구성 - kubeadm 온프레미스 환경에서 쿠버네티스 클러스터를 구성하기 위해 kubeadm을 사용하여 구축한다. Kubernetes 클러스터 구성요소 Master Node 구성 요소 API-Server - 명령 전달 ETCD - Key:Value로 이루어진 데이터 집합소, 파드의 상태를 비롯한 모든 정보 저장 Controller - Pod가 정상적으로 동작하는지 제어 Scheduler - Pod를 어떤 Node에 배치할 지 결정 Worker Node 구성 요소 Kubelet - ..