쿠버네티스 오토스케일링 설정
서론
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 배포, 확장 및 관리를 자동화하는 강력한 기능을 제공합니다. 오토스케일링(Auto-scaling)은 클러스터의 리소스를 효율적으로 활용하고, 애플리케이션의 성능과 안정성을 유지하는 데 중요한 역할을 합니다. 이번 포스팅에서는 쿠버네티스의 Horizontal Pod Autoscaler(HPA)와 Cluster Autoscaler를 설정하는 방법을 초보자도 이해할 수 있도록 자세히 설명합니다.
본론
Horizontal Pod Autoscaler(HPA)
HPA란?
Horizontal Pod Autoscaler(HPA)는 쿠버네티스에서 파드(Pod)의 수를 자동으로 조절하는 기능입니다. HPA는 CPU 사용량, 메모리 사용량 또는 사용자 정의 메트릭을 기반으로 파드 수를 조절하여 애플리케이션의 부하에 따라 자동으로 확장하거나 축소합니다.
HPA 설정 방법
HPA를 설정하기 위해서는 다음 단계를 따릅니다.
- Metrics Server 설치
HPA는 메트릭 데이터를 기반으로 동작하기 때문에 Metrics Server가 필요합니다. Metrics Server는 클러스터 내의 리소스 사용량을 수집하여 API 서버에 제공하는 역할을 합니다.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
- 디플로이먼트 생성
먼저 HPA를 적용할 디플로이먼트를 생성합니다. 다음은 Nginx 디플로이먼트 예시입니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
resources:
requests:
cpu: 100m
limits:
cpu: 200m
ports:
- containerPort: 80
이 YAML 파일을 사용하여 디플로이먼트를 생성합니다.
kubectl apply -f nginx-deployment.yaml
- HPA 설정
다음은 Nginx 디플로이먼트에 대해 HPA를 설정하는 YAML 파일 예시입니다.
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx-deployment
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
이 YAML 파일을 사용하여 HPA를 생성합니다.
kubectl apply -f nginx-hpa.yaml
이 설정은 CPU 사용률이 50%를 초과할 경우 파드 수를 최대 10개까지 자동으로 확장합니다.
HPA 상태 확인
HPA의 상태를 확인하려면 다음 명령어를 사용합니다.
kubectl get hpa
kubectl describe hpa nginx-hpa
이 명령어는 HPA의 현재 상태와 메트릭을 출력합니다.
Cluster Autoscaler
Cluster Autoscaler란?
Cluster Autoscaler는 클러스터의 노드 수를 자동으로 조절하는 기능입니다. 클러스터 내의 리소스가 부족할 때 노드를 추가하고, 리소스가 유휴 상태일 때 노드를 제거하여 비용을 절감합니다. Cluster Autoscaler는 주로 클라우드 환경에서 사용됩니다.
Cluster Autoscaler 설정 방법
Cluster Autoscaler를 설정하기 위해서는 클라우드 제공업체의 지원을 받아야 합니다. 여기서는 AWS EKS를 예로 들어 설명합니다.
- IAM 역할 생성
Cluster Autoscaler가 노드를 조절할 수 있도록 IAM 역할을 생성합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"autoscaling:DescribeAutoScalingGroups",
"autoscaling:DescribeAutoScalingInstances",
"autoscaling:DescribeLaunchConfigurations",
"autoscaling:DescribeTags",
"autoscaling:SetDesiredCapacity",
"autoscaling:TerminateInstanceInAutoScalingGroup",
"ec2:DescribeLaunchTemplateVersions"
],
"Resource": "*"
}
]
}
이 정책을 사용하여 IAM 역할을 생성한 후, EKS 클러스터에 연결합니다.
- Cluster Autoscaler 설치
Cluster Autoscaler를 설치합니다.
kubectl apply -f https://github.com/kubernetes/autoscaler/releases/latest/download/cluster-autoscaler-autodiscover.yaml
- Cluster Autoscaler 설정
Cluster Autoscaler 설정 파일을 편집하여 EKS 클러스터의 이름과 Auto Scaling 그룹을 지정합니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: cluster-autoscaler
spec:
template:
spec:
containers:
- name: cluster-autoscaler
image: k8s.gcr.io/cluster-autoscaler:v1.21.0
command:
- ./cluster-autoscaler
- --v=4
- --stderrthreshold=info
- --cloud-provider=aws
- --skip-nodes-with-local-storage=false
- --expander=least-waste
- --nodes=1:10:<your-auto-scaling-group-name>
설정을 완료한 후 Cluster Autoscaler를 다시 배포합니다.
kubectl apply -f cluster-autoscaler.yaml
오토스케일링의 모니터링 및 디버깅
HPA 모니터링
HPA의 상태와 메트릭을 모니터링하려면 kubectl get hpa
명령어를 사용합니다. 자세한 정보를 확인하려면 kubectl describe hpa
명령어를 사용합니다.
Cluster Autoscaler 로그 확인
Cluster Autoscaler의 로그를 확인하려면 다음 명령어를 사용합니다.
kubectl logs -f deployment/cluster-autoscaler -n kube-system
이 명령어를 사용하여 Cluster Autoscaler의 동작과 관련된 로그를 확인할 수 있습니다.
결론
쿠버네티스의 오토스케일링은 클러스터의 리소스를 효율적으로 사용하고 애플리케이션의 성능을 유지하는 데 중요한 역할을 합니다. Horizontal Pod Autoscaler(HPA)는 파드의 수를 자동으로 조절하고, Cluster Autoscaler는 클러스터의 노드 수를 자동으로 조절하여 리소스를 최적화합니다. 이번 포스팅에서는 HPA와 Cluster Autoscaler의 개념과 설정 방법을 자세히 설명했습니다. 이를 통해 쿠버네티스 클러스터에서 오토스케일링을 효과적으로 설정하고 관리할 수 있기를 바랍니다.