본문 바로가기

인프라/kubernetes

(12)
kubernetes 파드와 클러스터 노드의 오토 스케일링 파드와 클러스터 노드의 오토 스케일링 예측이 가능하거나 점진적으로 리소스가 변화할때는 수동으로 스케일링을 해도 되지만 갑작스럽게 예측할 수 없을때는 수동으로 처리하는게 이상적이지 않다. 쿠버네티스는 파드를 모니터링 하다가 CPU 사용량이나 등등이 증가하는 것을 감지하면 즉시 확장 할 수 있다. 노드를 추가 생성하는 것도 가능하다. 수평적 파드 오토 스케일링 수평적 파드 오토 스케일링은 컨트롤러가 파드의 레플리카 수를 자동으로 조정하는것을 말한다. HorizontalPodAutoscaler 리소스로 활성화한다. 컨트롤러는 주기적으로 파드의 메트릭을 확인해서 리소스에 설정되어 있는 메트릭 값을 만족하는 레플리카 수를 계산해서 레플리카 수를 조정한다. 오토스케일링 프로세스 이해 1. 관리되는 모든 파드 메트릭..
kubernetes 내부 이해 쿠버네티스 아키텍처 이해 쿠버네티스 클러스터 구성요소 컨트롤 플레인 (마스터 노드) 워커 노드 컨트롤 플레인은 클러스터 기능을 제어해서 전체 클러스터가 동작하게 만드는 역할이다. 컨트롤 플레인 구성요소 etcd 분산 저장 스토리지 API 서버 스케줄러 컨트롤러 매니저 워커 노드 구성요소 Kubelet 쿠버네티스 서비스 프록시 컨테이너 런타임 (도커) 애드온 구성요소 컨트롤 플레인과 노드에서 실행되는 구성 요소 외에 클러스터에 추가 기능을 위한 구성요소 쿠버네티스 DNS 서버 대시보드 인그레스 컨트롤러 힙스터 컨테이너 네트워크 인터페이스 플러그인 쿠버네티스 구성요소들은 모두 API server와 통신한다. API server 는 유일하게 etcd 와 통신 etcd API 서버가 다시 시작하거나 실패하더라도..
kubernetes 스테이트풀셋 스테이트 풀셋 참고 스테이트리스 - 하나만 있으면 되는 파드 또는 퍼시스턴트 데이터를 갖지 않는 상태가 없는 어플리케이션 스테이트풀 - 데이터 스토어 처럼 데이터를 계속 유지하는 상태가 있는 어플리케이션 스테이트풀 파드 복제하기 스테이트풀 파드를 복제할때 레플리카셋을 사용하면? 레플리카셋은 하나의 파드 템플릿에서 여러개의 파드 레플리카를 생성하는데 생성된 모든 파드는 하나의 퍼시스턴트 볼륨 클레임을 사용해야 한다. 즉, 각 레플리카가 각자의 퍼시스턴트 볼륨 클레임을 가질 수 없다. 개별 스토리지를 갖는 레플리카 여러개 실행하기 개별 스토리지 볼륨을 사용하는 파드를 가지려면 어떻게 해야할까 수동으로 파드 생성하기 파드를 수동으로 생성해서 각 파드가 다른 퍼시스턴트 볼륨 클레임을 가지게 한다. 근데 이건 레..
kubernetes 디플로이먼트 디플로이먼트 쿠버네티스 클러스터에서 실행되는 어플리케이션을 업데이트 하는 방법과 무중단 업데이트를 어떤 프로세스로 하는지 살펴보자 파드에서 실행중인 어플리케이션 업데이트 여기서 컨테이너 이미지 버전을 업데이트 하려면 어떻게 해야할까 2가지 방법이 있다. 기존 파드를 모두 삭제하고 새로운 파드를 시작 새로운 파드를 시작하고 기동하면 기존 파드 삭제 첫번째는 짧은 시간 동안 어플리케이션을 사용 할 수 없게 된다. 두번째는 동시에 두가지 버전이 실행된다. 기존 파드를 삭제하고 새 파드로 교체 레플리카 셋이 있는 경우 변경된 이미지 버전을 참조하게 파드 템플릿을 변경해놓고 이전 파드를 삭제 후 새롭게 실행한다. 새로운 파드 시작 후 이전 파드 삭제 잠시동안 두배의 파드가 실행되서 하드웨어 리소스를 사용하는 방식..
kubernetes 컨피그맵과 시크릿 컨테이너화된 애플리케이션 설정 컨테이너에 정보를 넘기기 위해서는 아래 같은 방법들이 존재한다. 서버에 환경변수를 통해 전달 하기 이미지 안에 파일 복사 (이미지 안에 넣는것은 하드코딩과 다를바가 없다. 이미지에 접근 할 수 있는 모든 사람은 누구나 볼 수 있는 정보) 컨피그맵 ,(쿠버네티스에서는 설정 데이터를 최상위 레벨의 쿠버네티스 오브젝트에 저장하고 이를 파일 기반 스토이지에 저장할 수 있다.) 시크릿 (개인 암호화 키, 보안을 유지해야 하는 데이터들을 위해 시크릿을 제공한다.) 애플리케이션에 설정을 전달하는 방법 컨테이너에 명령줄 인수 전달 각 컨테이너를 위한 사용자 정의 환경변수 지정 특수한 유형의 볼륨을 통해 설정 컨테이너에 명령줄 인수 전달 1. 도커에서 명령어와 인자 전달 ENTRYPOINT..
kubernetes 볼륨 볼륨 볼륨은 pod spec 에서 정의한다. 자체적으로 생성, 삭제 불가능하고 파드의 각 컨테이너에서 마운트한다. 볼륨 예제 파드 내부에 컨테이너들이 공유할 볼륨이 있다. 볼륨을 사용한 컨테이너 간 데이터 공유 emptyDir 볼륨 사용 임시로 저장할 데이터를 빈 디렉토리에 볼륨으로 저장한다. 파드가 죽으면 데이터는 삭제된다. 워커 노드의 파일 시스템의 파일 접근 특정 워커 노드의 파일시스템에 데이터를 저장시킨다. 파드가 다른 노드로 스케줄링 되면 사용 불가능해진다. 보통 로그나 CA인증서 접근 용도로 사용된다. 퍼시스턴스 스토리지 디스크에 데이터를 유지시키는 방식으로 클러스터에 퍼시스턴트 디스크를 생성하여 마운트한다. 워커 노드에 상관없이 데이터에 접근 할 수 있다. - 디스크 생성 방법 gcloud ..
kubernetes 서비스 서비스: 클라이언트가 파드를 검색하고 통신을 가능하게 한다. 파드가 다른 파드에게 서비스를 제공하려면 다른 파드를 찾아야한다. 만약 서버의 정확한 ip 주소나 호스트를 이용해 접근을 한다면 이런 문제점을 갖는다. 파드는 일시적이기 때문에, 언제든 사라지거나 이동 할 수 있다. 쿠버네티스는 노드에 파드를 스케줄링 한 후 파드가 시작되기 전에 ip를 할당해서 미리 ip를 알 수 없다. 수평 스케일링은 여러 파드가 동일한 서비스를 제공 할 수 있음을 의미하는데, 클라이언트는 어떤 파드에 요청 하는지 알 수 없어야 한다. 모든 파드는 단일 ip로 엑세스 할 수 있어야 한다. 이러한 문제를 해결하려고 또 다른 리소스 유형인 서비스(Service) 를 제공. 서비스 소개 서비스란? 동일한 기능을 파드 그룹에 지속적..
kubernetes 레플리케이션과 그밖의 컨트롤러 쿠버네티스는 파드를 직접 생성하는것이 아니라 레플리케이션 컨트롤러 또는 디플로이먼트등을 생성해 파드를 생성하고 관리해준다. 쿠버네티스의 이점 중 하나는 쿠버네티스에 컨테이너 목록을 제공하면 해당 컨테이너를 클러스터 어딘가에서 계속 실행 할 수 있다는 점이다. 파드가 노드에 스케줄링 되는 순간 노드의 kubelet은 파드의 컨테이너를 실행하고 파드가 존재하는한 컨테이너가 계속 실행되게 한다. 이때 컨테이너가 충돌이나면 kubelet 이 컨테이너를 다시 시작하는데 어플리케이션이 다시 시작되도록 외부에서 어플리케이션 상태를 체크해야 한다. 이걸 liveness probe 를 통해 알 수 있다. 라이브니스 프로브 쿠버네티스는 라이브니스 프로브를 통해 컨테이너가 살아 있는지 확인한다. spec에서 각 컨테이너의 ..