전체보기

Kubernetes

Kubernetes 멀티 컨테이너 파드(Multi Container Pod)와 초기화 컨테이너(Init Containers) 개념 및 설정

1. 개념 멀티 컨테이너 파드 하나의 파드에 2개 이상의 컨테이너를 실행하는 파드 파드 당 하나의 컨테이너를 운영하는 것이 일반적이지만, 목적에 따라 메인 컨테이너와 이를 보조하는 컨테이너로 구성 가능(ex. 웹 서버+로그 에이전트 등) 멀티 컨테이너 디자인 패턴으로는 사이드카 / 어댑터 / 앰버서더가 존재 초기화 컨테이너 메인 컨테이너 실행 전 초기화 역할을 수행하는 컨테이너 초기화 컨테이너의 작업이 성공적으로 완료되어야만 메인 컨테이너 실행 초기화 컨테이너의 작업이 실패할 경우 성공할 때까지 계속 재실행 초기화 컨테이너가 여러개일 경우 순차적으로 실행 2. 멀티 컨테이너 생성 yaml을 활용해 생성 apiVersion: v1 kind: Pod metadata: labels: run: test-mult..

Kubernetes

Kubernetes 환경변수(env), 컨피그맵(ConfigMap), 시크릿(Secrets) 개념 및 설정

1. 개념 파드에 환경변수를 지정하거나 데이터, 설정 등을 저장할 때 3가지 방식(환경변수, 컨피그맵, 시크릿) 활용 가능 시크릿의 경우 입력한 값이 base64로 인코딩되어 저장 2. 환경변수(env) 설정 환경변수 설정 apiVersion: v1 kind: Pod metadata: name: env-test labels: run: env-test spec: containers: - name: env-test image: kodekloud/webapp-color env: - name: APP_COLOR value: green 환경변수 적용 확인 3. 컨피그맵(ConfigMap) 설정 3.1. 컨피그맵 핸들링 yaml 파일을 활용한 컨피그맵 생성 apiVersion: v1 kind: ConfigMap m..

Kubernetes

Kubernetes 커맨드(Command) 및 인자(Arguments) 설정

1. 개념 파드 생성 시 파드 내부에서 동작하는 컨테이너에게 전달할 커맨드와 인자 설정 가능 2. YAML을 활용한 커맨드 및 인자 설정 nginx 컨테이너 생성 및 command, args 설정 apiVersion: v1 kind: Pod metadata: name: command-demo spec: containers: - name: command-demo-container image: nginx command: ["echo"] args: ["Hi this is args test"] nginx 컨테이너 생성 및 command, args 설정(간소화 형식) apiVersion: v1 kind: Pod metadata: name: command-demo spec: containers: - name: co..

Kubernetes

Kubernetes 배포 전략(RollingUpdate, Blue/Green, Canary) 및 롤백(Rollback) 개념과 설정

1. 개념 쿠버네티스는 서비스의 무중단 업데이트를 위해 3가지 배포 방식을 지원 롤링 업데이트 : 정해진 비율만큼의 파드만 점진적으로 배포 블루/그린 : ver 1.0과 ver 2.0을 구성해놓고, 트래픽을 ver 2.0으로 전환 카나리 : ver 2.0을 일부만 배포하고, 트래픽도 일부만 ver 2.0으로 전환. 배포에 문제가 없을 경우 ver 2.0을 점진적으로 배포 및 트래픽 전환 쿠버네티스는 롤링 업데이트를 디폴트 배포 전략으로 설정 또한 배포 이후 장애 시 복구를 위해 이전 버전으로 되돌리는 롤백 지원 2. 롤링 업데이트 옵션 maxSurge 롤링 업데이트를 위해 최대로 생성할 수 있는 파드 갯수 maxSurge를 높게 설정하면 롤링 배포를 빠르게 적용 가능 % 단위 또는 갯수 단위로 지정 가능..

Kubernetes

Kubernetes 리소스 모니터링을 위한 metrics-server 설치

1. 개념 K8s 클러스터의 리소스 사용량을 간단히 확인할 수 있는 오픈소스 리소스 모니터링 도구 kubelet에 포함된 cAdvisor가 메트릭(지표)을 수집해 metrics-server로 전송하는 구조 cAdvisor란? 컨테이너에 대한 정보를 수집·처리 및 전송하는 데몬 metrics-server는 기본적인 리소스 모니터링만 가능하므로, 세부적인 모니터링은 프로메테우스와 그라파나 활용 필요 2. metrics-server 설치 명령어를 이용해 설치 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml metrics-server 디플로이먼트 설정 수정 "--kub..

Kubernetes

Kubernetes 다중 스케줄러(Multiple Scheduler) 개념과 설정

1. 개념 kube-Scheduler를 활용하지 않고 개별 스케줄러를 생성하여 리소스 배포 시 사용 가능 또한 1개가 아닌 여러개의 스케줄러를 동시에 사용 가능 2. 다중 스케줄러 생성 쿠버네티스 공식 문서를 참고해 yaml 파일 생성 apiVersion: v1 kind: ServiceAccount metadata: name: zero-scheduler namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: zero-scheduler-as-kube-scheduler subjects: - kind: ServiceAccount name: zero-scheduler nam..

Kubernetes

Kubernetes 정적 파드(Static Pod) 개념과 설정

1. 개념 특정 경로에 존재하는 yaml 파일에 대해 kublet이 자동으로 파드로 생성 kube-APIServer에 의하지 않고 kubelet이 파드를 생성 및 관리하는 것이 특징 정적 파드는 파드만 생성 가능하고 레플리카셋 등 다른 리소스는 생성 불가 클러스터의 컴포넌트(kube-API, etcd 등)를 정적 파드로 생성해 장애를 방지하고 설치를 용이하게 하는 등 다양한 목적으로 활용 가능 2. 정적 파드 Lfie-Cycle 생성 : 정적 파드 경로에 yaml 파일이 존재할 경우 자동으로 파드 생성 유지 : 정적 파드 경로에 yaml 파일이 존재할 경우 파드가 삭제되어도 재생성 수정 : 정적 파드 경로의 yaml 파일을 수정하면 자동으로 기존 파드가 삭제되고 새로운 파드가 생성 삭제 : 정적 파드 경..

Kubernetes

Kubernetes 데몬셋(DaemonSet) 개념과 명령어

1. 개념 모든 노드마다 파드를 반드시 한 개씩 배포하는 특성 일반적으로 kube-proxy, calico 등 네트워크 관련 서비스가 데몬셋으로 배포됨 이외에도 클러스터 모니터링에 필요한 에이전트를 배포하는 등 다양한 목적으로 활용 가능 2. 동작 원리 데몬셋으로 배포되는 각 파드에 자동으로 노드 어피니티가 적용되어 모든 노드에 하나씩 배포되도록 함 3. YAML을 활용한 데몬셋 생성 nginx 컨테이너로 구성된 데몬셋을 생성하기 위한 YAML 내용 apiVersion: apps/v1 kind: DaemonSet metadata: name: test-mydaemonset spec: selector: matchLabels: app: agent template: metadata: labels: app: ag..

Kubernetes

Kubernetes 테인트(Taints)/톨러레이션(Tolerations)과 노드 어피니티(Node Affinity) 복합 활용

1. 개념 테인트는 노드의 관점에서 "특정(톨러레이션이 적용된) 파드만 여기에 배포해라!" 라는 목적으로, 톨러레이션이 적용된 파드는 테인트가 적용되지 않은 노드로 배포될 가능성 존재 노드 어피니티는 파드의 관점에서 "특정(노드 어피니티 조건에 부합하는) 노드로만 배포되라!" 라는 목적으로, 노드 어피니티가 적용되지 않은 파드가 노드 어피니티 조건에 부합하는 노드로 배포될 가능성 존재 따라서 테인트/톨러레이션과 노드 어피니티를 복합적으로 적용할 경우 특정 노드에는 특정 파드만 배포 가능하고, 특정 파드는 특정 노드로만 배포되도록 스케줄링 가능

Kubernetes

Kubernetes 노드 어피니티(Node Affinity) 개념과 설정

1. 개념 파드를 kube-Scheduler에 의존하지 않고 엔지니어 의도에 따라 특정 노드에 배포할 수 있도록 핸들링하는 설정 배포조건/오퍼레이터/weight를 활용해 배포 스케줄링을 세부적으로 핸들링 할 수 있는 점이 nodeSelctor와의 차이점 2. 노드 어피니티 조건 배포조건 requiredDuringScheduling : 반드시 노드 어피니티 조건에 부합하는 노드에 배포하겠다는 의미 preferredDuringScheduling : 왠만하면 노드 어피니티 조건에 부합하는 노드에 파드를 배포하겠지만, 상황에 따라 조건에 맞지 않는 노드에 배포할 수도 있다는 의미 IgnoredDuringExecution : 파드가 배포되어 특정 노드에서 실행 중인 상황에서 해당 노드의 설정이 변경되어 어피니티 ..

MR. ZERO
'분류 전체보기' 카테고리의 글 목록 (7 Page)