일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- docker
- 웹
- next.js
- 알고리즘
- 파이썬
- 솔리디티
- node.js
- 컴퓨터공학
- HTML
- 자바스크립트
- 백준
- 프론트엔드
- 타입스크립트
- AWS
- 블록체인
- 쿠버네티스
- react
- CSS
- TypeScript
- 이더리움
- 클라우드
- 리액트
- BFS
- 가상화
- k8s
- kubernetes
- es6
- 백엔드
- 이슈
- JavaScript
- Today
- Total
목록k8s (7)
즐겁게, 코드
쿠버네티스에서는 노드가 드레인되거나 노드의 가용 자원이 부족한 등의 이유로 파드가 종료되는 일이 비일비재한데요, 이 때 마치 두꺼비집을 내리는 것처럼 한순간에 모든 프로세스를 종료한다면 중요한 데이터나 네트워크 연결이 그대로 유실될 위험이 존재합니다. 이번 글에서는 사용자에게 미칠 영향과 복구 소요를 최소화하기 위한 컨테이너의 정상 종료(Graceful Termination) 방법을 소개합니다. TL;DR 파드 종료 시 kubelet에서 SIGTERM 신호를 송출하고, 컨테이너는 SIGKILL를 수신할 때까지 정상 종료를 위해 대기한다. (컨테이너 종료 시작 - SIGTERM 수신 - 정상 종료 동작 - SIGKILL 수신 - 컨테이너 강제 종료) 컨테이너에서 SIGTERM 신호를 수신하지 못하는 경우를..
AWS에서는 대상의 상태를 확인하기 위해 Route53이나 ELB가 제공하는 상태 검사(Health Check) 를 활용할 수 있었는데요, 쿠버네티스에서는 이와 유사한 "프로브" 라는 기능을 통해 상태 검사를 수행할 수 있습니다. 이번 글에서는 컨테이너의 상태를 검사할 수 있는 3가지 프로브를 정리해보고자 합니다. Liveness Probe Liveness Probe는 컨테이너가 동작 중인지를 검사하는 역할로, 컨테이너 상에서 특정 동작을 수행하거나 엔드포인트로 네트워크 요청을 보냄으로써 해당 컨테이너가 정상적으로 기동중인지를 검사합니다. HTTP 요청을 통해 상태를 검사하는 예시 (httpGet 사용) livenessProbe: httpGet: path: / port: 80 initialDelaySec..
본 포스트는 Google Cloud Tech의 영상 내용을 정리하면서 작성한 글입니다. 이번 글에서는 네임스페이스를 통해 소스를 분리하는 방법을 소개합니다. 네임스페이스란? 쿠버네티스의 네임스페이스란 한 클러스터 내에서 격리된 개발 환경을 제공하는 방법입니다. 즉 네임스페이스는 "클러스터 안의 클러스터" 라고 생각할 수 있으며, 이를 통해 리소스들을 원하는 그룹으로 묶거나 성능을 최적화하는데 도움을 줄 수 있습니다. 예를 들어 개발용 환경과 배포용 환경을 따로 구축하고 싶다면 클러스터를 둘 생성할 필요 없이, 개발용 네임스페이스와 배포용 네임스페이스를 구성하는 것으로 개발 환경을 분리할 수 있게 됩니다. 네임스페이스 생성 & 사용하기 네임스페이스는 kubectl create namespace 커맨드를 사..
본 포스트는 Google Cloud Tech의 영상 내용을 정리하면서 작성한 글입니다. 이번 글에서는 쿠버네티스의 좋은 습관 중 하나인 작은 이미지를 활용하는 방법을 소개해보려 하는데요, 이미지 크기를 작게 유지하는 것은 가장 기본적이면서도 효과적인 방법 중 하나입니다. 테스트용 go 어플리케이션 package main import "fmt" func main() { fmt.Println("hello world") } 이미지 빌드용 도커파일 예시 FROM golang WORKDIR /app COPY ./* . RUN cd /app && go build CMD go run hello 그런데 콘솔에 "hello world" 를 출력하는 정말 간단한 코드조차 빌드하면 자그마치 1GB에 달하는 이미지가 생성되..
한번 500MB의 메모리를 갖고 있는 워커 노드 A가 있다고 가정해 보겠습니다. 그런데 어떤 파드가 실행되어 스케줄러가 이를 배치하려 할 때, 만약 파드가 사용할 메모리가 1GB를 넘어선다면 이 파드는 노드 A에 배치될 수 있을까요? 스케줄러가 파드를 효과적으로 배치하려면 각 파드가 최소 / 최대로 사용하고자 하는 자원이 어느 정도인지를 알고 있어야 할 텐데요, 쿠버네티스는 여러 종류의 자원 중 CPU와 메모리를 관리할 수 있습니다. ✅ 다만 CPU와 메모리 사용량 외에 디스크 I/O 작업(IOPS)이나 네트워크 대역폭 등의 정보는 알지 못합니다. 이번 글에서는 컨테이너에서 사용할 CPU 및 메모리를 관리하는 방법인 리소스 요청 / 제한에 대해 소개해보도록 하겠습니다. 리소스 요청 및 제한 쿠버네티스의 ..
여러분의 멋진 서비스가 컨테이너 위에서 실행 중이라고 가정하겠습니다. 그런데, 만약 프로그램에 오류가 발생하거나 컨테이너가기동중인 환경에 문제가 생겨 컨테이너가 의도치 않게 중단된다면 어떨까요? 만약 이런 일이 발생한다면 관리자가 직접 터미널을 열고 docker run을 다시 입력할 때까지 서비스가 중단되는 걸까요? 쿠버네티스를 사용하면 컨테이너가 불의의 사고로 중단되더라도 관리자가 복구 커맨드를 입력할 때까지 기다릴 필요 없이, 마치 오뚜기처럼 컨테이너를 다시 실행해 장애를 최소화합니다. 쿠버네티스의 고가용성을 책임지는 오늘의 주인공, 디플로이먼트(Deployment)와 레플리카셋(ReplicaSet)을 소개해보도록 하겠습니다. 디플로이먼트 (Deployment) 디플로이먼트는 쿠버네티스가 관리해야 ..
여러 개발 도구들 중에서도 쿠버네티스는 어려운 축에 꼽히는데요, 쿠버네티스를 이해하려면 먼저 클러스터를 구성하는 기본 구성 요소들에 대해 알아야 합니다. 이번 글에서는 클러스터를 구성하는 컴포넌트들과 각각의 역할을 간단히 정리해보도록 하겠습니다. 메인 쿠버네티스 컴포넌트 목록 제가 아직 사용해보지 않은 DaemonSet 등 일부 쿠버네티스 컴포넌트는 이 글에서 다루지 않지만, 주로 사용되는 컴포넌트를 정리해 보았습니다. (정리되지 않은 컴포넌트 역시 추후 추가할 수 있도록 해보겠습니다. 🙂) Pod Pod(파드)는 쿠버네티스의 가장 작은 유닛으로, 컨테이너를 감싸 추상화한 결과물을 의미합니다. 주로 1개 파드에서 1개 어플리케이션을 운영하며, 각 파드는 고유한 내부 IP 주소를 부여받아 노드 내에서 파드..