본문 바로가기

네트워크/k8s

(47)
[k8s] 23. Pod - Node Scheduling - 실습 Pod - Node Scheduling 실습 노드가 여러 개 있어야 좋은데, 여건상 2개의 노드로 실습 ㅠㅠ 1. Node Affinity 노드에 두 라벨을 만들고, 파드에 Node Affinity를 사용하여 노드1에 할당되도록 할 것 Pod - MatchExpressions apiVersion: v1 kind: Pod metadata: name: pod-match-expressions1 spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - {key: kr, operator: Exists} containers: - name: container im..
[k8s] 22. Pod - Node Scheduling Node Scheduling 파드는 기본적으로 스캐줄러에 의해서 노드에 할당하지만, 사용자나 운영자가 직접 스캐줄할 수 있음 1. NodeName, NodeSelector, NodeAffinity --> Node 선택 파드를 특정 노드에 할당되도록 선택하기 위해 사용 노드들이 있고, 노드마다 가용한 CPU와 라벨이 있음 노드1-3은 한국에 있고, 4-5는 미국에 있음 이 때, 파드를 만들면 스캐줄러는 CPU 자원이 많은 노드1에 할당 NodeName: 스캐줄러와 상관없이 해당 노드의 이름으로 파드가 할당 실제로 잘 사용 안 함 NodeSelector: 파드의 키와 벨류를 달면, 해당 라벨이 달린 노드에 할당됨 여러 노드에 같은 키와 벨류를 가진 라벨이 있을 수 있어, 스캐줄러에 의해서 라벨이 달린 노드들..
[k8s] 21. Pod - QoS Classes Pod - QoS Classes 어떨 때 쓸까 노드에 리소스가 있음 노드 위에 파드가 세 개 있고 균등하게 자원 사용 중 이 상황에서 파드1이 추가적으로 자원을 사용해야 하는 상황이 생김 근데 자원이 없다고 에러가 나야하나 아니면 다른 파드를 희생시켜야 할까? 쿠버네티스는 앱의 중요도에 따라 이런걸 관리할 수 있도록 QoS Classes를 지원 BestEffort가 부여된 파드가 먼저 다운됨 --> 회수된 자원을 파드1이 사용 그 다음 파드2가 남은 자원보다 더 많은 자원을 요구할 때 Burstable이 다운되고 자원이 회수됨 어떻게 설정할까 컨테이너에 resources 설정이 있는데 requests와 limits에 따라 메모리와 CPU를 어떻게 설정하느냐에 따라 결정 Guaranteed 파드에 여러 컨..
[k8s] 20. Pod - ReadinessProbe, LivenessProbe - 실습 Pod - ReadinessProbe, LivenessProbe 1. ReadinessProbe 이 구성을 만들고, 외부에서 이 서비스에 계속 트래픽을 날릴 것 Service apiVersion: v1 kind: Service metadata: name: svc-readiness spec: selector: app: readiness ports: - port: 8080 targetPort: 8080 Pod apiVersion: v1 kind: Pod metadata: name: pod1 labels: app: readiness spec: containers: - name: container image: kubetm/app ports: - containerPort: 8080 terminationGraceP..
[k8s] 19. Pod - ReadinessProbe, LivenessProbe 어떤 상황에 쓰는가 파드를 만들면, 컨테이너가 생기고, 파드와 컨테이너 상태가 Running이 되고 앱도 구동이 됨 서비스와 파드가 연결이 되고, 서비스의 아이피가 외부에 알려지고, 외부에서 사람들이 서비스를 통해 접근 한 서비스에 2개의 파드가 연결되어 있으니 50%씩 트래픽이 나눠진다고 하자 ReadinessProbe를 사용하는 상황 갑자기 노드2가 다운되고 그 위에 파드2도 다운됨 사람들은 남은 하나의 노드에만 접속을 하게됨 죽은 파드2는 Auto Healing 기능을 통해 다른 노드3 위에 재생성 되려고 함 파드2와 컨테이너가 Running이 되어 서비스와 연결되지만 앱이 Booting 중인 상황이 발생 이 때, 트래픽이 파드2로 오게되면 사용자는 에러페이지를 보게 됨 이 때, ReadinessP..
[k8s] 18. Pod - Lifecycle Pod - Lifecycle Lifecylce 사람은 삶이 있음 파드도 사람의 삶처럼 라이프 사이클이 있음 각 단계에 따라 행하는 행동이 다름 여러 기능들이 파드의 특정 단계와 관련이 있음 내용이 복잡하지만 꼭 이해해야 함 Pod의 라이프사이클 파드 생성 후 내용을 보면 Status 밑에 많은 내용이 있음 Status 안에 Phase가 있음 Phase: 파드의 전체 상태를 대표하는 속성 Conditions: 파드가 생성되면서 실행하는 단계와 상태를 알려줌 파드 안에 Container들이 있음 Containers의 State는 Container를 대표함 Phase, Conditions Phase: Pending, Running, Succeeded, Failed, Unknown 5개의 상태가 있음 Condi..
[k8s] 17. DaemonSet, Job, CronJob - 실습 DaemonSet, Job, CronJob 실습 1. DaemonSet DaemonSet - HostPort apiVersion: apps/v1 kind: DaemonSet metadata: name: daemonset-1 spec: selector: matchLabels: type: app template: metadata: labels: type: app spec: containers: - name: container image: kubetm/app ports: - containerPort: 8080 hostPort: 18080 DaemonSet - NodeSelector apiVersion: apps/v1 kind: DaemonSet metadata: name: daemonset-2 spec: se..
[k8s] 16. DaemonSet, Job, CronJob DaemonSet, Job, CronJob 1. DaemonSet 노드들이 있고 자원들이 다 다를 때, ReplicaSet은 스캐줄러에 의존하여 파드를 노드에 배치 자원이 많으면 노드에 파드를 많이 배치하고, 자원이 없으면 적게 배치 DaemonSet은 노드의 자원과 상관없이 각 노드마다 같은 파드를 배치시킴 자원과 관계없이 파드를 동일하게 배치해야하는 서비스 Prometheus: 노드의 성능수집용 fluentd: 노드의 로그수집용 GlusterFS: 노드의 자원을 갖고 네트워크 파일 시스템 구축용 특징 셀렉터와 템플릿이 있어서 모든 노드에 템플릿으로 파드를 만들고 셀렉터로 파드를 데몬셋과 연결시킴 만약 노드들의 OS 종류가 달라 노드의 라벨이 붙어있고, os:ubuntu에 파드를 설치하고 싶지 않은 상..