IT/Kubernetes 12

kubecost의 Container Request Right Sizing Recommendation 기능 살펴보기

Kubecost의 강력한 기능중 하나인 "Container Request Right Sizing Recommendation" 기능에 대해서 살펴보자. 이 기능을 통해서 Container의 CPU, Memory 의 request, limit 값을 최적화 할수 있다. Container Request CPU, Memory Kubernetest Pod 는 Scheduling시에 Manifest에 작성된 Request CPU, Memory 만큼의 리소스가 여유있는 Worker Node를 찾ㄴ는다. 여기서 여유가 있다는 의미는 실제 사용율이 아닌 아래 값을 의미한다. (Worker Node의 Spec) - (해당 Worker Node에 배포된 Pod의 Reqeust CPU, Memory의 합) 즉, Containe..

IT/Kubernetes 2023.01.23

로그로 확인한 EKS autoscaler 동작

EKS 에서 필수로 설정하는 Cluster Autoscaler 의 동작을 자세히 살펴보자. 마땅한 소개문서가 없어서 출력되는 로그를 보면서 동작을 분석해봤다. Cluster Autoscaler Logs 확인 Cluster Autoscaler를 정상적으로 설치했다면 아래 명령어로 log를 확인할수 있다. $ kubectl logs -f --tail=100 -n kube-system deployment.apps/cluster-autoscaler 로그를 확인해보면, 10초마다 출력된다. 즉, 10초마다 Node의 상태를 확인하고 scale-up/down 을 판단하여 동작한다. 주기를 변경하고 싶다면, "--scan-interval" 옵션으로 변경 가능하다. (아래 help 참고) Logs 를 살펴보자 전체 로..

IT/Kubernetes 2022.11.13

Deplyment에서 EBS PV 사용하기 (feat. EKS, 공유볼륨, EFS와 EBS 차이점)

EBS vs EFS EKS에서는 PV로 EBS, EFS를 사용할 수 있다. 두개의 차이점을 간단히 설명하면 아래와 같다. EBS 하나의 EC2에만 mount 할수 있음 AZ 단위 서비스 가격이 상대적으로 저렴 (0.1$/GB) 볼륨의 크기를 사전에 결정 (수동 확장 가능) EFS 다수의 EC2에 mount 할수 있음(NAS 용도) Region 단위 서비스 가격이 상대적으로 비쌈 (0.2$/GB) 볼륨의 크기는 자유롭게 확장 가능 정리하면 EFS는 NAS처럼 다수의 EC2와 AZ에서 공유볼륨을 사용하고자 할때 사용하며, EBS는 단일 EC2에서 데이터를 저장할때 사용하는 스토리지라는 것이다. (물론 비용은 EFS가 더 비싸고) EBS를 Pod간 공유볼륨으로 사용할수 있을까? 일반적으로 Kubenetes 환..

IT/Kubernetes 2022.04.23

왜 StatefulSet을 사용할까 (feat. deployment와의 차이점)

MSA 에서는 어플리케이션의 stateless 를 강조한다. 그래야 Application 의 의존성이 사라지고, 배포, 확장 등이 용이하기 때문이다. 반면에 Kubernetes 에는 Stateful Pod를 생성하기 위해서 Statefulset 워크로드를 제공한다. 이것은 언제 사용되는지 정리해 봤다. StatefulSet 이란? 스테이트풀셋은 애플리케이션의 스테이트풀을 관리하는데 사용하는 워크로드 API 오브젝트이다. 파드 집합의 디플로이먼트와 스케일링을 관리하며, 파드들의 순서 및 고유성을 보장한다 . 디플로이먼트와 유사하게, 스테이트풀셋은 동일한 컨테이너 스펙을 기반으로 둔 파드들을 관리한다. 디플로이먼트와는 다르게, 스테이트풀셋은 각 파드의 독자성을 유지한다. 이 파드들은 동일한 스팩으로 생성되었..

IT/Kubernetes 2022.04.22

Kubernetes PV Reclaim Policy 에 따른 Status 변화 정리 (feat. Persistant Volume, 상태, 반환정책, PVC)

Kubernetes PV의 상태변화에 대해서 자세히 알아보자 PV(Persistant Volume)의 상태(Status)란? 말 그대로 PV의 상태를 의미하며 총 4가지가 있다. 아래는 공식문서에 나와있는 내용이다. 이중 Released 상태는 데이터를 확인할수는 있으나 재사용할 수 없는 상태이다. 데이터를 재사용하기 위해서는 데이터 백업후 PV를 재생성 해야한다. PV의 상태는 아래처럼 확인할수 있다. (아래는 Bound 상태) PV(Persistant Volume)의 반환정책(Reclaim Policy)란? PV 상태가 Bound->미사용으로 변경될때 저장되어 있는 데이터와 PV를 어떻게 처리할 것인가에 대한 정책이다. PV는 PVC가 바인딩이 되면 Bound 상태가 되고 바인딩된 PVC가 없을때 미..

IT/Kubernetes 2022.04.01

kubernetes pod debugging 방법 5가지

kubernetes 를 사용하다보면 pod 를 debugging 할일이 있다. 일반적으로 application을 디버깅을 하기 위해서는 application이 실행되는 서버에 접속해서 로그를 확인거나, application의 api를 호출해야 한다. 그런데, kubernetes에서는 대부분의 pod들이 클러스터 내에서만 접속이 가능하기 때문에 외부에서 접속하거나, api를 호출할수 없는 경우가 상당수이다. 1. pod가 정상적으로 실행되지 않을때 - kubectl decribe kubectl describe po [pod 이름] pod가 실행되기전 에러가 발생한다면, describe 명령을 사용한다. pod가 왜 정상적으로 실행되지 않았는지 원인을 추정해볼수 있다. 마지막 출력내용을 보면 에러가 발생한 ..

IT/Kubernetes 2022.03.06

CKA (Certificate Kubernetes Administrator) 자격증 시험준비부터 합격까지

회사 업무상 Kubernetes 를 사용할 일이 있어서, CKA 자격증 시험을 준비했다. 올해 1월초부터 준비했고, 3/1 시험을 보고 합격했으니 총 2개월 정도 걸린것 같다. 준비과정부터 학습한 내용 및 시험결과까지 대체적으로 만족스러웠다. 배경 일단 나는 개발자 백그라운드로 shell 이나 CLI 사용법에 익숙했고, Container의 기본적인 개념이나 Docker 사용정도는 가능한 상태였다. Kubernetes를 사용해본적이 없었고, 이번 자격증 시험을 준비하면서 실제 사용은 처음 해봤다 (CKA 시험 준비의 목적이었다) 시험준비 먼저 자격증에 대해서 잘 이해하기 위해서 인프런 CKA 자격증 소개 강좌를 들었다. 무료이고 길지 않기 때문에 CKA 자격증에 대해서 자세히 알고 싶다면 한번 들어보기를 ..

IT/Kubernetes 2022.03.03

kubernetes woker node 장애가 발생한다면 kubelet 을 살펴보자

아래 그림은 kubernetes architecture 이다. 기본적으로 각 worker node(=Compute machines) 에는 kubelet과 kube-proxy가 존재하는데, 이중 kubelet에 대해서 좀더 자세히 살펴보자. kubelet 이란? 클러스터의 각 노드에서 실행되는 에이전트. Kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다. Kubelet은 다양한 메커니즘을 통해 제공된 파드 스펙(PodSpec)의 집합을 받아서 컨테이너가 해당 파드 스펙에 따라 건강하게 동작하는 것을 확실히 한다. Kubelet은 쿠버네티스를 통해 생성되지 않는 컨테이너는 관리하지 않는다. [출처] https://www.redhat.com/ko/topics/containers/kubernete..

IT/Kubernetes 2022.02.23

쿠버네티스 pod가 실행되는 node 선택하기 (feat. nodeName, taint, affinity, toleration)

pod를 특정 node에서 실행시시켜야 하는 경우가 있다. (GPU 등 특정 HW가 있는 node거나, node별로 용도가 구분되어 있는 경우) 이를 위한 쿠버네티스의 기능을 정리해봤다. 1. node 이름으로 선택하기 - NodeName apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kube-01 가장 단순한 방법이다. pod의 spec에 nodeName을 정의하면 해당 node에서 실행된다. 다만 nodeName과 일치하는 node가 없을 경우 자동으로 삭제되는 등 아래와 같은 제약이 있어서 잘 사용되지는 않는다. (실제로 잘못된 nodeName으로 pod를 스케줄링..

IT/Kubernetes 2022.01.20

쿠버네티스 cpu, memory 관리하기 (feat. 사용량 확인, limit, 리소스 모니터링)

pod가 실행되기 위해서는 cpu, memory 가 필요하며, 이는 pod가 실행되는 node의 리소스를 사용한다. 쿠버네티스는 각 pod가 얼만큼의 리소스(cpu, memory)가 필요한지에 따라, 실행될 node를 적절히 선택한다. 따라서 각 pod가 필요한 리소스를 적절하게 설정해줘야 효율적으로 node의 리소스를 활용할 수 있다. 여기서는 이처럼 pod가 필요한 리소스를 설정하고, 현재 사용되고 있는 리소스를 관리, 모니터링 할 수 있는 방법을 알아본다. 1. Pod가 필요한 cpu, 메모리 (Requests, Limits) pod의 spec.containers[].resources 에 아래와 같은 4개 정보를 설정해야 한다. requests와 limits 이라는 항목이 있으며, 각각 cpu, m..

IT/Kubernetes 2022.01.16
반응형