본문 바로가기

Cloud-native/Kubernetes

(65)
[Kubernetes]What is Kubernetes Horizontal Pod Autoscaler (HPA) 쿠버네티스에서, HorizontalPodAutoscaler는 워크로드 리소스(예: 디플로이먼트 또는 스테이트풀셋)를 자동으로 업데이트하며, 워크로드의 크기를 수요에 맞게 자동으로 스케일링하는 것을 목표로 한다. → 부하 증가에 대해 파드를 더 배치하는 것을 뜻한다. 부하량이 줄어들고, 파드의 수가 최소 설정값 이상인 경우 HPA는 스케일 다운을 지시한다. 알고리즘 원하는 레플리카 수 = ceil[현재 레플리카 수 * ( 현재 메트릭 값 / 원하는 메트릭 값 )] 예시 - 1 현재 메트릭 값 200m, 원하는 값 100m인 경우 200/100 = 2 레플리카 수는 2배가 된다. 예시 - 2 현재 메트릭 값 50m, 원하는 값 100m인 경우 50/100 = 0.5 레플리카 수는 1/2배가 된다. yaml ..
[Kubernetes]How to use Kubernetes Headless service .spec.clusterIP: None 으로 설정하면 클러스터 IP가 없는 서비스를 만들 수 있다. 이런 서비스를 'headless' 서비스라고 한다. 로드 밸런싱이 필요 없거나 단일 서비스 IP가 필요 없을 때 사용한다. .spec.selector 를 설정하면 쿠버네티스 API로 확인할 수 있는 엔드포인트가 만들어진다. selector가 없으면 Endpoints가 만들어지지 않는다. 서비스와 연결된 파드를 직접 가리키는 DNS A 레코드도 만들어 진다. 단, selector가 없더라도 DNS 시스템은 ExternalName 타입의 서비스에 사용할 CNAME레코드가 만들어진다. Example - headless apiVersion: v1 kind: Service metadata: name: headles..
[Kubernetes]How to use Kubernetes ExternalName 값과 함께 CNAME 레코드를 리턴하여, 서비스를 externalName 필드의 콘텐츠 (예:foo.bar.example.com )에 매핑한다. 어떤 종류의 프록시도 설정되어 있지 않다. → 외부 서비스를 쿠버네티스 내부에서 호출하고자 할때 사용할 수 있다. 참고: ExternalName 유형을 사용하려면 kube-dns 버전 1.7 또는 CoreDNS 버전 1.7 이상이 필요하다. Example - ExternalName apiVersion: v1 kind: Service metadata: name: externalname-service spec: type: ExternalName # externalName: google.com #연결하려는 외부 도메인 값을 설정 .spec.externalName: g..
[Kubernetes]How to use Kubernetes LoadBalancer 클라우드 공급자의 로드 밸런서를 사용하여 서비스를 외부에 노출시킨다. 외부 로드 밸런서가 라우팅는 NodePort와 ClusterIP 서비스가 자동으로 생성된다. 클라우드에서 제공하는 로드밸런서와 파드를 연결한 후 로드밸런서의 IP를 이용해 클러스터 외부에서 파드에 접근할 수 있도록 한다. EXTERNAL-IP 항목에 로드밸런서 IP를 표시한다. 이 IP를 사용해 클러스터 외부에서 파드에 접근한다. 실제 요청 service → kube-proxy → iptables 생성(실체는 iptables) Example - LoadBalancer apiVersion: v1 kind: Service metadata: name: loadbalancer-service spec: type: LoadBalancer sele..
[Kubernetes]How to use Kubernetes NodePort 사용자는 서비스(NodePort)를 통해 모든 노드의 지정된 포트로 파드에 접근할 수 있다. 클러스터 외부에서 클러스터 안 파드로 접근할 때 사용할 수 있는 가장 간단한 방법이다. node1:30080, node2:30080 처럼 노드에 상관 없이 서비스에 지정된 포트를 사용하여 파드에 접근할 수 있다. 특이한점은 node1에만 실행되어 있는 파드가 있을때도 node2:30080 으로 접근했을 때 node1에 실행된 파드로 연결한다. Example - Nodeport 사용자는 nodeIP:30080 을 통해 파드 A에 접근할 수 있다. apiVersion: v1 kind: Service metadata: name: nodeport-service spec: type: NodePort selector: ap..
[Kubernetes]How to use Kubernetes ClusterIP 사용자는 서비스IP(ClusterIP)로 파드에 바로 접근할 수 없고 같은 클러스터안의 파드나 노드에서 접근할 수 있다. 기본 서비스 타입. 쿠버네티스 클러스터 안에서만 사용할 수 있다. 기본 구조 apiVersion: v1 kind: Service metadata: name: my-service spec: type: ClusterIP clusterIP: 10.0.10.10 selector: app: MyApp ports: - protocol: TCP port: 80 targetPort: 9376 .spec.type: 서비스 타입 설정 .spec.ClusterIP: 클러스터 IP를 직접 설정, 설정하지 않으면 자동 할당한다. .spec.selector: 서비스와 연결할 파드에 설정한 .labels 필드 ..
[Kubernetes]What is Kubernetes Service 파드 집합에서 실행중인 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법 여러개 파드에 접근할 수 있는 고유한 IP를 제공한다. 파드 집합에 대한 단일 DNS명을 부여한다. 다양한 기능을 제공하지만 본질적으로 로드밸런서 역할을 한다. 개념 동적으로 변하는 파드들에 고정적으로 접근할 때 사용하는 방법이 쿠버네티스 서비스 이다. 서비스를 사용하면 파드가 클러스터 안 어디에 있든 고정 주소를 이용해 접근할 수 있다. 인그레스로도 접근 할 수 있고 아래와 같은 차이가 있다. 서비스 → L4 영역 통신에서 사용 인그레스 → L7 영역 통신에서 사용 서비스 타입 ClusterIP 기본 서비스 타입. 쿠버네티스 클러스터 안에서만 사용할 수 있다. 클러스터 안 노드나 파드에서는 클러스터 IP를 이용해서 서비스에 연..
[Kubernetes]How to use Kubernetes CronJob and Job Contents CronJob의 Manifest 정의 및 배포 CronJob의 실행 시간 제약 CronJob의 동시성 관리 CronJob의 History Limit Job의 Manifest 정의 및 배포 CronJob Manifest 정의 및 배포 cronjob-concurrency.yaml apiVersion: batch/v1 kind: CronJob metadata: name: hello-concurrency spec: schedule: "*/1 * * * *" startingDeadlineSeconds: 600 concurrencyPolicy: Forbid jobTemplate: spec: template: spec: containers: - name: hello image: busybox args..