kubernetes 6

로그로 확인한 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

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

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

쿠버네티스 ReplicaSet 사용법 (scale, 삭제, pod 제외)

ReplicaSet 이란? 레플리카셋의 목적은 레플리카 파드 집합의 실행을 항상 안정적으로 유지하는 것이다. 이처럼 레플리카셋은 보통 명시된 동일 파드 개수에 대한 가용성을 보증하는데 사용한다. [출처] https://kubernetes.io/ko/docs/concepts/workloads/controllers/replicaset/ 쉽게 정리하면, 가용성의 위해 동일한 파드의 개수를 유지하는 기능이다. 예를 들어 A라는 pod의 개수를 3개로 유지하기로 설정했다면, Node가 다운되어 pod가 사라져도 다른 Node에 pod를 자동으로 생성해서 pod를 3개로 유지하고, 다른 운영자가 pod 를 실수로 지우거나 새로 생성하더라도 쿠버네티스 자체에서 pod의 개수가 3개가 되도록 지속적으로 유지한다. Re..

IT/Kubernetes 2022.01.15
반응형