목록Study/K8S (72)
전공공부

1. Static Pod kubelet은 별도의 클러스터 형태가 아니라 kubelet과 docker만 있다면 pod를 만들 수 있습니다. 그러면 kube api 서버 없이는 어떻게 동작하는지 봅시다. /etc/kubernetes/manifests 에 pod.yaml 파일을 두면 이 디렉토리 하부의 파일들은 포드로 읽을 수 있습니다. application이 내려가게 되면 자동으로 kubelet이 pod를 재생성합니다. (만일, 완전히 삭제를 하려면 /etc/kubernetes/manifests에서 삭제하면 포드가 완전히 삭제됩니다.) 이것이 Static Pod 입니다. kubelet은 pod level만을 이해 할 수 있습니다. 그렇기 때문에 static pod를 만들 수 있습니다. Static Pod가 ..
1. Kube-scheduler - 역할 : 기본 스케줄러이다. 일반적으로 POD, Deployment 배포시 사용 된다. - 한계점 : 특정 응용 프로그램의 Requirement를 따라 갈 수 있는 특정 Node에만 두어야 한다면 어떨까? 2. 커스텀 스케줄러의 사용 쿠버네티스는 응용이 자유롭다. 그래서 여러개의 스케줄러를 둘 수 있는데 아래 예를 살펴보자 default-scheduler : kube-scheduler에서 자동으로 만들어진 스케줄러이다. 기본 스케줄러의 구성 내역은 아래와 같다. scheduler-config.yaml apiVersion: kubescheduler.config.k8s.io/v1 kind: KubeSchedulerConfiguration profiles: - schedul..

1. Node Selectors 정의 : 노드 붙을 곳을 정해주는 역할을 수행하는 것 pod-definition.yaml apiVersion: kind: Pod metadata: name: myapp-pod spec: containers: - name: data-processor image: data-processor nodeSelector: size: Large kubectl create -f pod-definition.yaml 1-1 Label Node 위와 같이 size 가 key 이고 Large가 value인 Label을 포함하는 노드가 존재해야 그 노드에 붙을 수 있게 된다. 따라서, 아래와 같은 명령어를 이용해서 붙여보자 kubectl label nodes = 위 셋팅 이후에 pod-defin..
1. How to Schedule? 정상적인 동작을 하는 스케쥴러라면 알아서 노드 후보자를 쫙 꺼낸 뒤 자동으로 스케쥴 될 노드에 바인딩 객체를 만들어서 포드를 할당하게 됩니다. 노드를 모니터링하고 스케줄 해줄 객체가 존재하지 않는다면 어떻게 될까요? pod.yaml 파일 내부의 spec.nodeName 부분에 할당 할 노드의 이름을 써줘야 합니다. (nodeName은 pod create 할 때만 사용 할 수 있습니다.) 또는, 바인딩 객체를 실제로 생성하고 바인딩 API가 그것을 읽게해야 합니다. apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - name: nginx image: nginx nodeName: kube-01 2. Lab..

Service 정의 : 애플리케이션 안 팎의 요소들과 통신을 할 수 있게 하는 요소입니다. 예시 : POD 간의 통신을 가능 할 수 있게 하는 요소입니다. 백엔드 POD 프론트 엔드 POD DB 등 External Connection to K8S 쿠버네티스 클러스터에 외부 사용자가 접근 하려면 어떻게 해야 할까요? SSH로 curl 요청으로 들어가서 하면 10.244.0.0으로 소통 할 수 있지만 이것은 사실 서버 내부에 들어와서 연결을 하는 것이니 지금 원하는 외부 요청이 아니다. NodePort 방식 노드 IP로 연결을하는 방법은 curl 192.168.1.2:30008 으로 연결을 하는 것인데 노드 포트로 연결해서 바깥에서 연결하는 방식이다. 이는 노드 포트 방식으로 부르기도 한다. 연결하는 방법은..
어떻게 kubectl 명령어가 적용이 되는지 알아보자. Local file을 이용해서 apply 명령어를 적용하면 쿠버네티스 내장 메모리에 오브젝트를 만든다. yaml 파일로 저장한 것은 Last applied Configuration (json) 파일로 변화가 됩니다. 이때 메모리와 yaml 파일 그리고 json 파일로 변환된 파일이 어떻게 상호 작용하는지 알아봅시다. nginx update to 18 -> 19로 업데이트가 될 때를 생각해봅시다. Local yaml 파일에서 우선 update를 할 것이고 그럼, k8s object가 이를 인지하고 바뀌게 됩니다. 그리고, Last applied Configuration을 저장하는 json이 바뀐 버전으로 업데이트 됩니다. 그러면 이때, Last app..
1. Imperative 접근 방식 무엇이 요구되는지, 어떻게 접근을 해서 해결을 할 지 지정이 모두 되어 있다. 2. Declarative 접근 방식 어떻게 접근을 해서 해결을 할 지는 시스템이 지정하고 어떤 것이 실행 될지만 지정한다. 예시 그러면, nginx의 버전을 상승 시키고 싶으면 어떻게 할까? Declarative 방식 간단하게 yaml 파일을 수정하면 이를 적용하는 방식 Create Objects k apply -f pod.yaml # 이것도 가능하지만 k apply -f /path/config-dir # 디렉토리를 적용하면 디렉토리 하부의 yaml 파일을 읽어서 모두 설정을 할 수 있다. Update Objects k apply -f pod.yaml Imperative 방식 Create ..

1. Deployment 정의 : 배포를 담당하는 것으로 Pod를 업데이트 할 수 있는 롤링 업데이트 기능과 여러개의 Pod를 관리 할 수 있음 (ReplicaSet의 기능) , 롤백 기능 지원, scale을 지원 함(일시정지 후 pod scaling) - 롤링 업데이트란 : Pod를 한번에 재배포하는 것이 아닌 하나씩 내리고 업데이트 하고 내리고 업데이트 하고를 반복하여 사용자에게 영향을 끼치지 않는 상태에서 무중단 배포를 진행하는 것이다. 역할 : 실질적으로는 ReplicaSet의 역할을 모두 하면서 ReplicaSet을 가지고 롤링 업데이트, 롤백 기능을 추가적으로 한다고 생각하면 된다. (무중단 배포를 지원 할 수 있게 하는 요인) 2. YML apiVersion: apps/v1 kind: Dep..