DevOps & SRE/Docker & kubernetes

    k8s HPA 동작 방식 및 이슈들 정리

    HPA (Horizontal Pod AutoScaling) 도입 배경운영하는 플랫폼이 버스트성으로 들어오는 트래픽들이 많고, 점점 많아질 예정이어서 이러한 버스트성 트래픽을 k8s 환경에서 효율적으로 대응하기 위해서 HPA을 검토하였음. HPA (Horizontal Pod AutoScaling) 이란?Workload Resource를 자동으로 업데이트 하며, 워크로드의 크기를 수요에 맞게 자동으로 스케일링하는 것을 목표로 함.즉 k8s에서 AutoScaling의 역할을 수행. HPA 동작 방식 k8s는 HPA을 간헐적으로 실행되는 컨트롤 루프 형태로 구현했다. 이 말은 지속적으로 모니터링해서 워크로드를 변경하지 않고, 주기(default 15초)별로 체크하는 형태. 각 주기마다, Controller Ma..

    [쿠버네티스 공부] Ingress

    Ingress 서비스 오브젝트가 외부 요청을 받아들이기 위한 것이였다면, 인그레스는 외부 요청을 어떻게 처리할 것인지 네트워크 7계층 레벨에서 정의하는 쿠버네티스 오브젝트임. 인그레스가 제공하는 기능 외부 요청의 라우팅 가상 호스트 기반의 요청 처리 SSL/TLS 보안 연결 처리 NodePort, LoadBalancer 타입의 서비스를 사용해도 되는데 왜 인그레스를 사용하는 가? 애플리케이션이 4개의 Deployment가 생성되어 있고, 각각의 서비스를 하나씩 연결 해줬다고 가정해보자. 이러한 방식은 잘 동작하는 것 같지만, 서비스마다 세부적인 설정을 할 때 추가적인 복잡성이 발생하게 된다. (SSL/TLS 보안 연결, 접근 도메인 및 클라이언트 상태에 기반한 라우팅 등을 구현하려면 각 서비스와 디플로이..

    [쿠버네티스 공부] Namespace

    그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다. Namespace 용도에 따라 컨테이너와 리소스를 구분지어 관리할 수 있는, 일종의 논리적인 그룹. (리소스를 논리적으로 구분) Namespace의 활용 사용 목적에 따라 포드, 서비스 등의 리소스들을 격리함으로써 편리하게 구분할 수 있음. ResourceQuota 오브젝트를 이용해 특정 네임스페이스에서 생성되는 포드의 자원 사용량을 제한할 수 있음. Namespace 생성 apiVersion: v1 kind: Namespace metadata: name: production Namespace 사용 apiVersion: v1 kind: Pod metadata: name: pod-1 namespace: produ..

    [쿠버네티스 공부] ConfigMap, Secret

    그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다. ConfigMap, Secret의 필요성 환경마다 설정 값을 다르게 줘야하는 경우 있다. 방법 A): 도커 이미지 내부에 설정 값 또는 설정 파일을 정적으로 저장 하는 방법 => 도커 이미지는 빌드되고 나면 불변의 상태를 가져, 상황에 따라 유연하게 변경이 불가. 방법 B) 포드를 정의하는 YAML 파일에 환경 변수를 직접 적어두는 방법 => 상황에 따라 환경 변수의 값만 다른 동일한 여러 개의 YAML이 존재할 수 있음 쿠버네티스에서는 이러한 환경마다 다른 설정 값을 위해 ConfigMap, Secret 오브젝트를 제공한다. ConfigMap 일방적인 설정 값을 담아 저장할 수 있는 쿠버네티스 오브젝트. Se..

    [쿠버네티스 공부] Deployment란?

    그저 사이드 플젝에서 한 번 써보고 싶어서... 쿠버네티스를 공부를 하면서 정리하는 글입니다. Deployment Deployment는 Replicaset의 상위 오브젝트이기 때문에 Deployment를 생성하면 해당 Deployment에 대응하는 Replicaset도 함께 생성된다. 따라서 Deployment를 사용하면 Pod, Replicaset을 직접 생성할 필요가 없다. Deployment를 사용하는 이유? 쿠버네티스는 그럼 왜 Replicaset을 그대로 사용하지 않고, 굳이 상위 개념인 Deployment를 사용해서 간접적으로 Replicaset을 생성하는 것 일까? Deployment를 사용하는 핵심적인 이유는 애플리케이션의 업데이트와 배포를 더욱 편하기 만들기 위해서이다. Deploymen..