DevOps./Kubernetes 10

[Kubernetes] Secret

Secret이란? 패스워드, API Key, SSH Key 등 민감한 정보를 컨테이너에 주입해야 한다면? 시크릿 (Secret) 컨피그맵과 사용법 비슷 시크릿은 사용 목적에 따라 몇 가지 종류로 나누어 짐 쿠버네티스는 기본적으로 시크릿 값을 저장할 때 Base64 인코딩 Secret의 종류 1. Opaque (generic) — 일반적인 용도의 시크릿 2. dockerconfigjson — 도커 이미지 저장소 인증 정보 3. tls — TLS 인증서 정보 4. service-account-token — ServiceAccount의 인증 정보 kubectl Secret 생성 명령어 (generic) my-secret 이름의 generic 타입 Secret 생성 $ kubectl create secret g..

DevOps./Kubernetes 2022.02.02

[Kubernetess] ConfigMap

ConfigMap이란? 어플리케이션의 설정 값을 컨테이너에 주입하고 싶다면? 컨피그맵 (ConfigMap) 설정 정보를 환경변수 혹은 볼륨의 형태로 파드에 전달하기위한 목적으로 사용 파드에서 직접 환경변수를 관리하지 않고 ConfigMap을 분리하여 목적에 따라 설정 데이터를 다르게 주입 가능 kubectl ConfigMap 생성 명령어 my-config 이름의 ConfigMap 생성 $ kubectl create configmap my-config my-config 이름의 ConfigMap 생성 - 로컬의 config.yaml 파일을 키에 저장 $ kubectl create configmap my-config --from-file config.yaml my-config 이름의 ConfigMap 생성 -..

DevOps./Kubernetes 2022.02.02

[Kubernetes] Service (서비스)

서비스란? Deployment를 통해 파드를 수평확장 하면 트래픽은 어떻게 분산시키지? 외부로부터의 요청을 받으려면 어떻게 해야하지? 서비스 (Service) 여러 파드에 대해 클러스터 내에서 사용 가능한 고유 도메인 부여 여러 파드에 대한 요청을 분산하는 로드 밸런서 기능 수행 파드의 IP는 항상 변할 수 있음에 유의. 일반적으로는 ClusterIP 타입의 Service와 함께 Ingress를 사용하여 외부 트래픽을 처리합니다. 서비스의 종류 (총 4가지) 1. ClusterIP와 서비스 디스커버리 ClusterIP Service API 리소스의 가장 기본적인 타입 쿠버네티스 클러스터는 Pod에 부여되는 Pod IP를 위한 CIDR 대역과 Service에 부여되는 Cluster IP CIDR 대역이 독..

DevOps./Kubernetes 2022.02.02

[Kubernetes] Deployment (디플로이먼트)

디플로이먼트란? 서비스 버전이 업데이트되어 파드를 새로운 버전의 이미지 파드로 교체해야 한다면? 새 버전에 이슈가 발견되어 롤백을 진행해야 한다면? 디플로이먼트 (Deployment) 파드의 이미지 버전이 갱신될 때 배포 전략을 설정 디플로이먼트 오브젝트를 생성하면 대응되는 ReplicaSet과 Pod 자동 생성 기본적으로 Recreate 전략과 RollingUpdate 전략 지원 사용자는 특수한 목적이 아니라면 파드와 레플리카셋이 아닌 디플로이먼트로 워크로드 관리 디플로이먼트의 배포전략 재생성 (Recreate) 기존 레플리카셋의 파드를 모두 종료 후 새 레플리카셋의 파드를 새로 생성 롤링 업데이트 (Rolling Update) 세부 설정에 따라 기존 레플리카셋에서 새 레플리카셋으로 점진적으로 이동 m..

DevOps./Kubernetes 2022.02.02

[Kubernetes] ReplicaSet (레플리카셋)

레플리카셋이란? 파드의 수를 늘리고 싶다면? (Scale-out) 레플리카셋 (ReplicaSet) 정해진 수의 파드가 항상 실행될 수 있도록 관리 기존 실행중이던 파드에 문제가 생기면 파드를 다시 스케줄링 ReplicationController의 신규 버전 (현재는 Deprecated) 레플리카셋의 동작원리 ReplicaSet Controller가 Control Plane(마스터 노드)에 존재 spec.selector에 대응되는 파드의 수가 spec.replicas와 동일한지 지속적으로 검사하고, 다를 경우 스케일 아웃 혹은 인 진행 레이블 셀렉터 (Label Selector) 쿠버네티스 오브젝트는 모두 metadata.labels 에 Key - Value 형태의 레이블 값을 가짐 특정 오브젝트 목록을..

DevOps./Kubernetes 2022.02.02

[Kubernetes] 파드 (Pod)

파드 (Pod) 쿠버네티스가 컨테이너를 다루는 기본 단위 1개 이상의 컨테이너로 구성된 컨테이너 집합 동일 파드 내 컨테이너는 여러 리눅스 네임스페이스를 공유 => 네트워크 네임스페이스 공유 (동일 IP 사용) 파드 관련 kubectl 명령어 파드 목록 확인 $ kubectl get pod 특정 파드 상태 확인 $ kubectl describe pod hello 특정 파드에 명령어 전달 $ kubectl exec -i -t hello bash 특정 파드 로그 확인 $ kubectl logs pod/hello 멀티 컨테이너 파드와 사이드카 패턴 동일 파드 내 컨테이너는 모두 같은 노드에서 실행 (네임스페이스를 공유하기 때문) 사이드카 패턴 (Side-car Pattern) 메인 컨테이너를 보조하는 컨테이너..

DevOps./Kubernetes 2022.02.02

[Kubernetes] kubectl 명령형과 선언형 방식

명령형 (Imperative) 수행하고자 하는 액션을 지시 적은 리소스에 대해서 빠르게 처리 가능 여러 명령어를 알아야 함 선언형 (Declarative) - 추천 도달하고자 하는 상태(Desired State)를 선언 코드로 관리 가능 -> GitOps 활용 가능 변경사항에 대한 감사(Audit) 용이 코드리뷰를 통한 협업 멱등성 보장 (apply) 많은 리소스에 대해서도 매니페스트 관리 방법에 따라 빠르게 처리 가능 알아야 할 명령어 수가 적음 kubectl 명령형 명령어 ubuntu:focal 이미지로 ubuntu 파드 생성 (bash 명령어) $ kubectl run -i -t ubuntu --image=ubuntu:focal bash grafana Deployment 오브젝트에 대해 NodePo..

DevOps./Kubernetes 2022.02.01

[Kubernetes] API 리소스

API 리소스와 오브젝트 API 리소스 쿠버네티스가 관리할 수 있는 오브젝트의 종류 Pod, Service, ConfigMap, Secret - Node, ServiceAccount, Role 오브젝트 (Object) API 리소스를 인스턴스화 한 것 05-03. 쿠버네티스를 이용한 컨테이너 오케스트레이션 현재 쿠버네티스 클러스터가 지원하는 API 리소스 목록 출력 $ kubectl api-resources 특정 API 리소스에 대해 간단한 설명 확인 $ kubectl explain pod 매니페스트 파일 Labels & Annotations 모든 쿠버네티스 오브젝트는 Labels과 Annotations 메타데이터를 가질 수 있음 둘 모두 문자열(String)..

DevOps./Kubernetes 2022.02.01

[Kubernetes] 쿠버네티스 클러스터 구성요소

클러스터 구성 Control Plane (Master Node) 클러스터의 관리하는 역할 담당 상태 관리 및 명령어 처리 Node (Worker Node) 어플리케이션 컨테이너 실행 kubelet 컨테이너 런타임(Container Runtime)과 통신하며 컨테이너 라이프사이클 관리 API 서버와 통신하며 노드의 리소스 관리 CRI (Container Runtime Interface) kubelet이 컨테이너 런타임과 통신할 때 사용되는 인터페이스 쿠버네티스는 Docker, containerd, cri-o 컨테이너 런타임 지원 kube-proxy 오버레이 네트워크 구성 네트워크 프록시 및 내부 로드밸런서 역할 수행 제어 영역 (Control Plane) API Server 쿠버네티스 리소스와 클러스터 관..

DevOps./Kubernetes 2022.02.01

[Kubernetes] 쿠버네티스 소개

쿠버네티스 구글 내부에서 사용하던 배포시스템 borg를 기반으로 재작성하여 2014년에 오픈소스로 공개 컨테이너 오케스트레이션 시스템이란? 컨테이너의 배포, 관리, 확장, 네트워킹을 자동화하는 기술 운영체제는 하나의 머신에서 프로세스를 효율적으로 관리하기 위한 프로세스 오케스트레이션 시스템 컨테이너 오케스트레이션 시스템은 여러 머신으로 구성된 클러스터 상에서 컨테이너를 효율적으로 관리하기 위한 시스템 왜 쿠버네티스인가? Planet Scale 구글에서 수 십억 개의 컨테이너를 운영할 수 있게 한 원칙 유지 행성 규모로 확장할 수 있는 스케일 Never Outgrow 다양한 요구사항을 만족할 수 있는 유연함 테스트용 로컬 규모부터 글로벌 서비스 규모까지 유연하게 크기 조정 가능 필요한 기능이 없을 경우 C..

DevOps./Kubernetes 2022.02.01