IT 공부/PaaS 2024. 2. 20.
[K8S] MetalLB 설치
로드밸런서 서비스를 이용하기 위해서는 다른 오픈소스를 이용해야 하는데 그 중 MetalLB 를 이용해서 구성 1. MetalLB 설치 kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/namespace.yaml kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.11.0/manifests/metallb.yaml 다른 버전을 받으려면 v0.11.0 대신 다른 버전 입력. (현재 v0.14.3) metallb 공식 홈페이지나 github 참고 https://metallb.universe.tf/installation/ 설치 후에 cont..
IT 공부/PaaS 2024. 1. 22.
[K8S] 9. AutoScaling & Scheduler
1. 파드 리소스 우선 파드는 옵션으로 리소스에 대한 제약을 걸 수 있는데, 일정 값이상이여먄하는 리퀘스트 옵션이나 일정 이상값으로 리소스를 사용하지 못하게하는 리미트가 있습니다. 그외에도 파드 옵션이 아닌 별개의 쿠버네티스 리소스로 리밋레인지, 리소스쿼터 등으로 파드의 리소스들을 관리할 수 있습니다. 2. 오토스케일링 그럼 다시 돌아와 오토스케일링 기법인 수평적 파드 오토스케일러 HPA 에 대해 확인 해 보겠습니다. 수평적으로 파드를 자동으로 스케일링 할 수있으며, 리소스 크기를 조절할 수 있는 디플로이먼트와 같은 컨트롤러 리소스에 적용할 수 있습니다. HPA는 메트릭서버에 현재 리소스 메트릭 정보를 받아옵니다. 그 이후 측정된 메트릭 정보를 기반으로 스케일링에 필요한 파드수를 계산합니다. 목표 복제본..
IT 공부/PaaS 2024. 1. 20.
[K8S] 8. Statefulset
1. 스테이트풀셋 레플리카셋 같은 복제본을 가지고 있는 컨트롤러는 복제본을 생성할 때 파드의 이름과 IP주소를 제외하고는 동일한 파드를 생성하게 됩니다. 만일 PVC를 참조하게 된다면, 모든 파드가 같은 PVC와 연결되고, PVC와 1:1로 연결되어있는 PV와 여러 파드가 연결되게 될 것입니다. 이런 문제점을 해결하기 위해 스테이트풀셋이 등장하였습니다. 레플리카셋과 같이 상태를 저장하지않는 stateless 형태는 파드의 정보가 전부 똑같을 필요는 없습니다. 파드의 이름과 IP는 변경되어도 레플리카셋 복제본을 유지하는데 문제가 안되기 때문입니다. 그렇기에 파드가 죽거나 장애가 발생하면 다른파드로 교체를 하면 됩니다. (여기서 상태란 식별자, 지속적인 데이터, 의존성등을 의미합니다.) 반면 스테이트풀셋의 ..
IT 공부/PaaS 2024. 1. 19.
[K8S] 7. Deployment
1. 디플로이먼트 이전에 확인해봤던 리소스중에 애플리케이션의 지속적인 동작을 보장하는 레플리카셋이 있었는데, 이번에 볼 디플로이먼트는 레플리카셋의 상위 수준의 리소스입니다. 디플로이먼트는 애플리케이션을 배포하고 선언적으로 업데이트를 수행하는 리소스며 하위 레플리카셋 컨트롤러를 제어하고 그 레플리카셋이 파드들을 제어하는 구조입니다. 레플리카셋을 직접 컨트롤하는것보다는 이 디플로이먼트 컨트롤러를 이용하여 제어하는것이 좋습니다. 디플로이먼트의 주요기능으로는 버전관리 및 롤아웃 등이 있습니다. 배포와 롤링업데이트를 크게 롤아웃이라고 합니다. 롤링업데이트란 배포 중에도 서비스의 끊김 없이 배포하는것으로 전체 복제본 중 일부분을 조금씩 배포 업데이트 하는 기술입니다. 그림처럼 디플로이먼트 컨트롤러가 관리하는 레플리..
IT 공부/PaaS 2024. 1. 19.
[K8S] 6. ConfigMap, Secret
1. 컨테이너의 사용자화 그럼 이제 컨테이너에서 애플리케이션을 어떻게 사용자에게 맞출수 있는지 확인해보겠습니다. 이미지 작성시 entrypoint 나 cmd 를 이용하거나, 쉘의 환경변수나 애플리케이션의 conf 파일을 변경하는 방법도 있지만 쿠버네티스 기능인 컨피그맵과 시크릿에 대해 알아보겠습니다. 우선 쿠버네티스에서 컨피그맵이란 간단한 설정 값들을 키밸류 형태로 저장하여 사용할 수 있는 쿠버네티스 저장소입니다. 아래 그림처럼 QA, DEV, PROD 라는 세가지 환경이 있다고 가정해보겠습니다. 만약 컨피그맵을 사용하지 않고 각각의 이미지에 환경변수등을 직접 집어넣어 관리한다면, 이미지가 업데이트될때마다 총 3개 (QA, DEV, PROD) 의 이미지 버전을 관리해야할 것입니다. 만약 컨피그맵을 사용하..
IT 공부/PaaS 2024. 1. 17.
[K8S] 5. Storage
1. Storage 파드는 일회성의 성격을 띄기때문에 파드가 종료하면 파드 내에서 실행되었던 애플리케이션에 의해 변경된 데이터, 로그와 같은 파일들도 같이 삭제됩니다. 이런 데이터들을 파드가 종료되거나 사용하거나 실행중에도 다른 파드에서도 이용할 수 있게 쓰는 방법이 스토리지, 즉 볼륨 기능입니다. 2. emptyDir empty dir 은 파드가 실행되는 도중에만 필요한 휘발성 데이터들을 각 컨테이너가 함께 사용할 수 있도록 임시 저장공간을 제공해줍니다. 또는 git 에서 내용을 받아 컨테이너를 띄울 경우 초기화컨테이너 기술과 이 볼륨을 사용하면 되는데, 여기서 초기화 컨테이너란 파드의 애플리케이션 컨테이너가 실행되기전 작업을 수행하도록 설정하는 컨테이너를 말합니다. 먼저 초기화컨테이너에 깃 내용을 클..
IT 공부/PaaS 2024. 1. 16.
[K8S] 4. 네트워크 서비스
1. 서비스 파드가 일회성으로 구성되기에 쿠버네티스는 애플리케이션이 동작하는 시스템의 호스트나 정적 IP를 할당하여 애플리케이션을 찾을 수 없습니다. 이런 문제를 해결하기 위해 파드는 네트워크 서비스를 제공하기위해 단일 고정 IP를 가져야 합니다. 해결하기 위해 나온 것이 서비스라는 리소스인데 이 서비스는 애플리케이션 파드그룹에 단일 네트워크 액세스포인트를 제공해주고, 레이블 셀렉터를 이용해 백엔드 파드, 즉 서비스 대상 파드를 설정하여 그 파드목록들을 엔드포인트 리소스로 관리합니다. 또한 어피니티와 같은 옵션을 통해 매번 요청을 같은 파드로 연결하여 세션을 유지한다거나 하는 추가 옵션이있습니다. 어피니티의 주요옵션으로는 클라이언트 IP를 확인하여 같은 파드로 연결하는 Client IP 옵션이 있습니다...
IT 공부/PaaS 2024. 1. 12.
[K8S] 3. 컨트롤러 리소스
1. 레플리카셋 앞서 확인 한 파드들을 관리하는 여러 리소스들을 살펴보도록 하겠습니다. 이 레플리카셋은 파드가 특정 개수만큼 동작되는것을 보장합니다. 만약 문제가 생겼을 경우 파드를 새로 생성하여 항상 개수를 유지합니다. 레플리케이션 컨트롤러라는 비슷한 컨트롤러 리소스가 있는데, 상위호환인 레플리카셋이 있으므로 잘 사용하지 않아서 생략하겠습니다. 레플리케이션 컨트롤러와 비교했을 때 레플리카셋의 개선점은 매치 익스프레션과 같은 옵션의 추가로 레이블 셀렉터의 범용성이 늘어났다는 것입니다. 그림의 경우 레플리카셋의 복제본을 3 으로 지정해두었을 것이고 만약 하나의 파드가 종료되면 다른 파드가 즉시 생길것이고, 만약 노드가종료되면 다른 노드에 새로운 파드를 생성할 것입니다. 2. 데몬셋 데몬셋은 노드에 파드를 ..
IT 공부/PaaS 2024. 1. 11.
[K8S] 2. 파드
1. 쿠버네티스의 구성 우선 파드를 말씀드리기 전에 쿠버네티스의 간단한 구성도 부터 확인하겠습니다. 쿠버네티스 클러스터 라는 가장 큰 단위아래 노드가 있습니다. 노드는 쉽게 VM과 같은 실제 호스트이며 노드 안에 파드가 구성되어있습니다. 파드는 주로 업무단위로 구성되어있고, 그 업무안에 실제 서비스와 같은 작업들을 할 수 있는 애플리케이션이 뜨는 컨테이너가 존재합니다. 노드의 모습을 다시 확대해서 살펴보면, 이처럼 노드안에는 다양한 파드가 존재할 수 있습니다. 이전 아키텍쳐부분에서 말씀드렸던대로 큐블렛이 있어 파드구성정보를 받아 컨테이너런타임과 함께 컨테이너를 동작시킵니다. 쿠버네티스에서 가장 기본 단위요소가 되는 파드입니다. 파드는 쿠버네티스 클러스터에서 애플리케이션을 배포하고 동작하는 프로세스입니다...
IT 공부/PaaS 2024. 1. 10.
[K8S] 1. 아키텍처
1. 등장배경 MSA 가 대두하기 전 레거시시스템인 모놀리식 아키텍처가 있었습니다. 이는 흔히볼수있는 웹와스, DB 형태로 한 WAS 내에서 프론트 UI 제공, 서비스제공, 인증 등 모든 업무를 처리하는 방식이었습니다. 개발과 배포가 간단하며 단순한 확장성을 가지고 있습니다. 다만 점점더 확장되면서 코드품질이 저하되고 애플리케이션의 기동시간이 매우길고 지속적인 배포, 즉 추가적인 개발및 확장, 기술적용이 매우 어렵습니다. 이런 문제를 극복하기 위해 마이크로서비스 아키텍처가 등장하였습니다. 세분화되고 독립적으로 작동하는 MSA 는 API 를 통해 다른 서비스와 통신합니다. 유지보수와 테스트, 배포가 효율적이고 기능의 개별 테스트와 배포가 가능하면서 생산성 향상과 장애 격리가 우수합니다. 다만 시스템 자체의..
IT 공부/PaaS 2022. 11. 2.
[k8s] 쿠버네티스 설치
총 3개의 가상머신을 설치해서 노드로 쓸 가상머신 2개, 이 노드들을 다룰 어드민서버(matser) 1개 로 구성하였다. root@k8sadmin:~# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - OK root@k8sadmin:~# cat deb http://apt.kubernetes.io/ kubernetes-xenial main > EOF root@k8sadmin:~# wget -qO- get.docker.com | sh # Executing docker install script, commit: 4f282167c425347a931ccfd95cc91fab041d414f + sh -c apt-get updat..