muf / orion-doc-page

0 stars 0 forks source link

Learn k8s (입문) #1

Open muf opened 1 week ago

muf commented 1 week ago
image image image

세팅 과정을 통해 알아보는 k8s A-Z

kubectl을 통해 kube API와 통신하여 여러가지 리소스를 등록해보자 ("apply")

추가 궁금증

muf commented 1 week ago

CRI-O ?

https://chatgpt.com/c/672f34f6-fc14-8002-83a8-6e97209e1781

CRI-O는 Kubernetes와 컨테이너 오케스트레이션에서의 필요성을 충족시키기 위해 탄생했습니다. 그 배경에는 Kubernetes의 컨테이너 런타임에 대한 표준화와 간소화 요구가 있었으며, 이를 위해 CNCF(Cloud Native Computing Foundation)에서 2016년에 개발을 시작했습니다.

CRI-O의 탄생 배경과 발전 과정을 살펴보면 다음과 같습니다: Kubernetes의 성장과 Docker의 한계: Kubernetes는 초기부터 Docker를 기본 컨테이너 런타임으로 사용했지만, Docker는 범용 컨테이너 관리 도구로 설계되었기 때문에 Kubernetes에 불필요한 기능이 많았습니다. 이러한 기능은 Kubernetes에 필요한 컨테이너 관리를 위해선 과도하고, 성능과 보안에도 영향을 줄 수 있었습니다. CRI의 등장: Kubernetes는 다양한 컨테이너 런타임을 지원하기 위해 **Container Runtime Interface(CRI)**라는 표준을 제안했습니다. CRI는 컨테이너 런타임과 Kubernetes API 서버 간의 상호작용을 표준화하여, Kubernetes에서 다양한 런타임을 사용할 수 있도록 했습니다. OCI 표준과의 연계: 컨테이너 업계는 Open Container Initiative(OCI)를 통해 컨테이너 런타임과 이미지의 표준화를 추진하고 있었으며, CRI-O는 이 OCI 표준을 채택하여 OCI 호환 런타임(runc)과 컨테이너 이미지를 쉽게 사용할 수 있도록 설계되었습니다. CRI-O의 탄생: 이러한 필요성을 바탕으로 CRI-O 프로젝트가 시작되었으며, CNCF의 지원을 받아 빠르게 성장했습니다. CRI-O는 Docker 대신 Kubernetes에 최적화된, 가볍고 효율적인 컨테이너 런타임으로 자리 잡았습니다. Docker를 거치지 않고 Kubernetes와 직접 통신하면서 OCI 표준을 준수하는 컨테이너를 관리할 수 있는 기능을 제공하게 되었습니다. Kubernetes에서 Docker Shim의 제거: 2020년에는 Kubernetes가 Docker shim을 제거하기로 결정하면서, Docker 의존성을 줄이고자 하는 방향성이 더욱 뚜렷해졌습니다. 이로 인해 CRI-O와 같은 가벼운 CRI 준수 런타임이 더욱 주목받게 되었습니다. CRI-O는 Kubernetes에 특화된 환경에서 간소화된 컨테이너 런타임을 제공하기 위해 시작되었으며, Kubernetes와의 연동성과 보안성, 경량화를 목표로 발전했습니다.

Flannel

클러스터 내부에서 Pod끼리의 통신

외부 >>> 내부 통신

그러니까 노드 1에 pod 2개, 2에 4개, 3에 4개이면 로드 밸런서는 노드 밸런서는 노드1,2,3에 2:4:4 비율로 요청을 전달하고, 각 노드에서는 kube-proxy에 의해 pod으로 균등하게 나눠서 전달되는거지? > yes

clsuterIP 타입은 도저히 이해가 안감; > 이해됨 어라 생각했던거랑 약간 다르긴하네

image image image image
muf commented 1 week ago

Static Pod의 주요 특징은 다음과 같습니다:

Kubelet에 의해 관리: Static Pod는 각 노드의 Kubelet이 /etc/kubernetes/manifests 같은 특정 디렉토리에 있는 YAML 파일을 읽고 생성합니다.

Kubernetes API 서버와 무관하게 동작: API 서버가 다운되어도 Kubelet은 Static Pod를 계속 관리할 수 있습니다. 따라서 중요한 시스템 컴포넌트가 클러스터의 문제로 인해 중단되지 않도록 보장합니다.

API 서버에 의해 조회 가능: Static Pod는 직접 관리되지 않지만, Kubelet이 이 Pod 정보를 Kubernetes API 서버에 등록하여 kubectl get pods 명령으로 조회할 수는 있습니다.

자체적으로 유지 관리됨: Static Pod는 Kubelet이 실행되고 있는 한 계속 유지됩니다. 만약 Static Pod에 문제가 발생하면, Kubelet이 다시 시작하거나 재생성하여 항상 실행 상태를 유지합니다.

이를 통해 Static Pod는 클러스터 관리와 안정성에 중요한 역할을 하며, 특히 마스터 노드의 구성 요소로 자주 사용됩니다.

muf commented 1 week ago
image
muf commented 1 week ago

k8s_start.pptx

muf commented 1 week ago
muf commented 1 week ago
muf commented 1 week ago

k8s_start.pptx

muf commented 1 week ago

muf commented 1 week ago

근데 왜 게이트웨이의 주소가 있지? 그건 좀 다른 게이트웨이인듯 (ELB의 분산된 게이트웨이) ELB 내에서도 N개의 게이트웨이로 나눠서 라우팅을 수행하는 것으로 이해 (확장 가능한 구조)

muf commented 1 week ago

클러스터들이 서로 직접 네트워크 레벨에서 연결되지 않은 경우, Istio는 East-West Gateway를 사용하여 트래픽을 다른 클러스터로 라우팅합니다.

근데 East-West Gateway 방식은 아닐것 같은데. (맞나?) 아닐듯

ServiceEntry, ServiceExport, ServiceImport ...


멀티 네트워크 연결을 통한 서비스 디스커버리 (Primary-Primary 또는 Primary-Remote 방식):

각 클러스터에 네트워크 레벨에서 연결을 설정하여, Istio가 서로 다른 클러스터에 있는 서비스도 자동으로 디스커버리하고 트래픽을 라우팅할 수 있도록 구성합니다. 이 설정에서는 Istio가 여러 클러스터에 존재하는 동일한 이름의 서비스를 디스커버리하여, 한 클러스터에 서비스가 없을 때 다른 클러스터로 트래픽을 라우팅할 수 있습니다. 이를 위해서는 모든 클러스터에 East-West Gateway를 구성하여, 클러스터 간 트래픽이 내부적으로 전달될 수 있도록 해야 합니다. East-West Gateway를 통한 트래픽 라우팅:

클러스터 간 네트워크가 분리된 환경이라면, 각 클러스터에 East-West Gateway를 배포하여 다른 클러스터의 서비스를 프록시하는 방식으로 접근할 수 있습니다. 예를 들어, 한 클러스터에 해당 서비스가 없으면 East-West Gateway를 통해 다른 클러스터로 트래픽을 전달할 수 있습니다. 이때는 VirtualService와 DestinationRule을 사용하여, 특정 서비스가 없는 경우 다른 클러스터의 East-West Gateway로 트래픽을 라우팅하도록 설정할 수 있습니다.


VirtualService를 통해