GitHub

https://github.com/Choidongjun0830

클라우드 27

Cluster High Availability

마스터 노드가 사라져도 워커 노드는 동작한다. 사용자는 실패할 때까지 앱에 접속할 수 있다.컨테이너나 포드가 고장나면컨테이너나 포드가 ReplicaSet의 일부라면 ReplicaSetController가 새 포드를 로드하라고 지시해야 한다. 하지만, 마스터의 컨트롤러는 사용이 불가능하다. 그래서 컨테이너나 포드를 로드하라고 지시할 수 있는 것과 스케줄링할 수 있 것이 없다. kube-apiserver도 없기 때문에, kubectl도 사용 불가능하다. 그래서 여러개의 마스터 노드를 사용하는 것을 고려해야 한다.  High Availability란 단일 실패 지점을 피하기 위해 모든 구성 요소가 여러개가 있는 것여러개의 마스터 노드가 있는데, 각각의 마스터 노드에 동일한 요청이 가면 안된다. 그래서 로드 밸..

클라우드 2024.12.30

Ingress

k8s에는 기본적으로 Ingress Controller가 없다. 그래서 배포해야하는데, 종류로는 GCE, Nginx, Contour, HAPROXY 등이 있다. Ingress Controller는 Load Balancer가 아니다. 예를 들어 Nginx를 사용하면 새로운 정의나 새로운 Ingress 리소스를 위한 쿠버네티스 클러스터를 모니터링하고 그에 따라 Nginx 서버를 구성한다. 이것을 위해서는 Service Account가 필요하다.Nginx Controller는 쿠버네티스에서 또 다른 Deployment로서 배포된다. 그래서 nginx 이미지를 사용하여 Deployment를 배포하는 것으로 시작한다. err-log-path, keep-alive, ssl-protocols를 ConfigMap에 설..

클라우드 2024.12.30

Operating System Upgrade

유지 보수 목적으로 소프트웨어 기반 업그레이드나 패치 적용, 보안 패치 등을 클러스터에 적용클러스터에서 노드 중 하나가 다운되면?포드는 접근 불가능 포드를 어떻게 배치하느냐에 따라 유저가 영향 받음 포드의 replica가 다운된 노드에만 배치되어 있으면 그 포드는 아예 접근 불가 노드가 5분(디폴트 값) 이상 다운되면 그 노드의 포드들은 종료되고, 다른 노드에서 다시 생겨남. 이후에 노드가 다시 활성화되어도 노드는 비어있다. 다운된 노드가 언제 돌아올지 모르니까 더 안전한 방법은 drain 이후 노드 재부팅. kubectl drain 해당 노드에서 포드는 정상적으로 종료되고, 다른 노드에 재스케줄링 명령. kubectl cordon 현재 노드에 배포된 Pod는 그대로 유지하면서, 추가적인 Pod의 배포를..

클라우드 2024.12.18

Monitor Kubernetes Cluster

Node level Metrics클러스터내 노드의 개수Healthy 노드의 개수성능 지표 (CPU, 메모리)네트워크디스크 활용도...Pod level metrics포드 개수각 포드의 성능 지표...이런 Metrics에 대한 분ㄴ석을 제공할 수 있는 솔루션이 필요함. Metric Server, 프로메테우스 등의 오픈 소스들을 활용해야함.  Metric Server쿠버네티스 클러스터 당 메트릭 서버는 1개 메트릭 서버는 각 노드와  포드에서 메트릭을 수집함.수집한 것을 메모리에 저장. 디스크에 메트릭을 저장하지 않음. kubelet에는 cAdvisor가 포함되어 있음.cAdvisor는 포드에서 성능 메트릭을 수집하고, kubelet API를 통해 메트릭을 공개해 메트릭 서버가 메트릭을 수집할 수 있도록 한다..

클라우드 2024.12.17

Node Selector, Node Affinity

Node SelectorPod가 특정 노드에서만 작동하도록 하는 것.복잡한 요구 사항이 있으면 Node Selector로는 구현 불가 apiVersion: v1kind: Podmetadata: name: myapp-podspec: containers: - name: data-processor image: data-processor nodeSelector: size: Large //label Node AffinityNode Selector와 달리 특정 노드에 특정 Pod를 할당하는 것을 제한 가능 apiVersion: v1kind: Podmetadata: name: myapp-podspec: containers: - name: data-processor image: data-p..

클라우드 2024.12.16

Taints and Tolerations

Taint는 오점.노드에 Taint를 설정해주는 것.Tolerations는 오점을 견딜 수 있는지.Pod가 노드의 오점을 견딜 수 있는지 설정해주는 것. 오점이 없으면 스케줄러는 Pod를 적절히 아무 노드에 할당할 수 있다.오점이 있으면 오점을 견딜 수 없는 Pod는 그 노드에 할당할 수 없다. Pod가 Node의 오점을 견딜 수 있다고 해서, 그 Pod가 무조건 그 Node로 가는 것이 아니다.이것은 nodeAffinity를 통해서 할 수 있다. Taints와 Tolerations는 그냥 Pod가 그 Node에 할당될 수 있는지만 설정하는 것이다.마스터 노드에는 자동으로 Taint가 설정되어서 Pod가 할당되지 않는 것이다. Node에 Taint 설정kubectl taint nodes node-name..

클라우드 2024.12.16

Maual Scheduling

클러스터에 스케줄러가 없다면 직접 스케줄링해야 한다. yaml 파일에는 nodeName이라는 필드가 있는데, 디폴트로는 설정되어 있지 않다.nodeName 필드는 스케줄러가 자동으로 추가하는 값이다. 스케줄러가 없다면, nodeName 필드가 비어있어서 Pod는 Pending 상태로 남아있을 것이다. nodeName 필드를 노드의 이름으로 채워줘야 한다. 그러면 Pod는 지정된 노드에서 만들어진다. 이미 만들어진 Pod를 다른 Node로 옮기고 싶다면 Binding Object가 필요하다. 이미 배포한 Pod의 nodeName을 수정하기 위해서는 yaml 파일 수정 후 delete 후 다시 배포하거나, replace 명령어를 통해서 바꾸어야 한다.

클라우드 2024.12.16

Secret, ConfigMap

애플리케이션 코드에 설정 정보, 민감 정보를 두면 정보 변경 시, 이미지를 다시 빌드해야 한다.Secret과 ConfigMap에 각각 민감 정보와 설정 정보를 두면, 정보를 변경해도 이미지를 다시 빌드하지 않아도 된다. ConfigMap 정보와 Secret 정보는 etcd에 저장되어, API 서버를 통해 접근해야 한다. 환경 변수 방식이 있고, 볼륨 마운트 방식이 있다.환경 변수 방식은 Pod가 실행 중에 변경 시 재시작이 필요하다.볼륨 방식은 Pod가 실행 중에 변경시 재시작이 필요하지 않다.이를 위해서는 애플리케이션이 디스크에 있는 configuration file을 보고 있어야 한다. 이것이 불가능하면 도와주는 side-car container를 같이 돌린다. ConfigMap: 외부 Configu..

클라우드 2024.12.07

환경 변수

#Plain Key Valueenv:- name: APP_COLOR value: pink #ConfigMapenv:- name: APP_COLOR valueFrom: configMapKeyRef: name: configmapname#Secretenv:- name: APP_COLOR valueFrom: secretKeyRef:ConfigMap설정할게 많을 경우에는 Pod yaml에 하나하나 적기 번거로움 다른 파일에서 가져와서 Pod에 추가할 수 있고, ConfigMap에서 한꺼번에 관리 가능 키 - 값으로 구성됨 Pod가 생성되면 키 - 값 쌍이 환경변수로 사용될 수 있게 함 apiVersion: v1kind: ConfigMapmetadata: name: app-configd..

클라우드 2024.11.28
728x90