CNI 의 뜻 컨테이너 네트워크 인터페이스의 약자로 CNI이다. CNI 의 목적 컨테이너간의 네트워크 제어 -> 컨테이너 런타임과 오케스트레이션 툴(ex k8s) 사이의 네트워크 계층을 공통적으로 구현하기 위해 만들어진 공통 인터페이다 -> 위의 목적을 구현하기 위해 다양한 CNI 가 존재한다. kubernetes에서 CNI 설정 /etc/cni/net.d 에서 cni를 설정한다. default로는 kubenet이라는 아주 제한된 기능의 cni를 제공하지만, 이 cni로는 기능이 충분하지 않으므로 third party의 CNI를 사용한다. CNI 별 기능 비교적 많은 기능을 제공하는 cni 플러그인에는 Calico나 Weave Net이 있다. 그리고 기능이 별로 없는 cni플러그인은 flannel이 있다..
대두된 배경 인스턴스가 많아지면서 이를 관리하는 일과 인스턴스 사이의 오버헤드가 복잡해져 이를 해결하기 위해 구상된 아키텍쳐이다. 기존 문제점을 해결한 방법 1. Application 보다는 Infrastructure Layer에서 service 관리 2. 서비스(인스턴스)간 통신을 추상화: 내부 네트워크 추적, 제어 등 가능케함 3. Envoy Proxy사용 Servie Mesh의 기능 서비스의 매트릭 수집 추적 TLS 서비스 디스커버리 로드밸런싱 동적 요청 라우팅 서킷브레이킹 타임아웃 구현방법 proxy를 sidecar로 서비스마다 배치함 서비스 메쉬관련 Tool Istio Linkerd Conduit
Istio 작동방식은? 1. 클라이언트가 특정 포트로 요청을 보낸다. 2. K8s LoadBalancer 가 그 포트에서 요청을 받아서 해당 클러스터의 worker에게 전달한다. 3. 클러스터안에서 해당 요청은 Istio IngressGateway Service (LB의 전달을 기다리고 있음) 로 라우트된다. 4. Istio IngressGateway Service (K8s service) 는 해당 요청을 Istio IngressGateway Pod (K8s deployment)으로 전달한다. 5. Istio IngressGateway Pod은 해당 요청을 해당 어플리케이션(k8s pod)의 서비스(k8s service)로 라우팅한다. 6. 마지막으로 해당 어플리케이션의 서비스는 해당 요청을 해당 어플리..
middleware - request와 함께 작동하는 함수 (요청이 처리되기전 작동함) - response를 반환하기 전에도 작동 call next - request를 패래미터로 받음 - 그런다음, request를 path operation에 전달 - response를 상응하는 path operation에 반환 DB dependency - 함수를 사용하여 한개의 request가 db에 한 thread이상 상호작용을 할 수 있음 - 그래서 한 request에 대해서 의존성을 주입하여 각각의 request가 자기자신만의 DB connection을 가질 수 있음 SQLalchemy에서 session - DB 파라미터에 타입을 선언함 SessionLocal - 데이터베이스 세션 - 생성할때 session mak..
Prometheus - kubelet의 통해 container - target system에서 메트릭을 수집하는 "폴링"방식 모든 메트릭에 대한 데이터를 중앙 서버로 보내지 않아도 된다는 점에서 과부하를 방지할 수 있다. - 프로메테우스가 "주기적으로" exporter에서 메트릭을 읽어와서 수집(메모리와 로컬디스크에 저장됨) -> exporter는 저장기능 없음 - 장기간 데이터 유지 -> 시계열 데이터 저장소로 구성되어 있어 많은 양의 정보를 빠르게 검색 가능 모든 쿠버네티스 오브젝트의 메트릭을 가지고 있는 kube state metric kubelet에 포함된 cAdvisor를 통해 컨테이너의 메트릭 정보를 볼 수 있음 k8s metric server & k8s client library /metri..
한 개의 쿠버네티스 클러스터에는 다음과 같이 Master 노드를 포함하여 여러개의 Worker 노드로 구성되어 있다. 공식 홈페이지의 구성도는 다음과 같다. 전체 Cluster의 리소스를 직접적으로 모니터링 하는 것보다는 각각 노드 레벨에서의 할당가능한 자원량을 모니터링하는 것이 정확할 수 있다 . 파드는 자신과 노드의 여러가지 조건에 따라서 특정 노드에 스케쥴링 되기 때문이다. 이때 파드가 고려하는 것은 리소스에 대한 개별 및 총체적 요구 사항, 하드웨어/소프트웨어/정책적 제약, 어피니티(affinity) 및 안티-어피니티(anti-affinity) 명세, 데이터 지역성, 워크로드-간 간섭, 데드라인 등이 있다. Pod 는 Node의 모든 자원을 활용할 수는 없다. Node 는 다음과 같이 4가지로 자..
내가 준비했었던 CKA의 연습문제 그리고 실제시험에는 다음과 같은 유형의 문제가 나온다. 이 글에서는 이 문제를 해결하면서 쿠버네티스의 인증에 대해서 풀어볼 것이다. Create a new user called john. Grant him access to the cluster. John should have permission to create, list, get, update and delete pods in the development namespace . The private key exists in the location: /root/CKA/john.key and csr at /root/CKA/john.csr. Important Note: As of kubernetes 1.19, the Cert..
클래스 외부 오브젝트 = 오브젝트 함수 = 함수 변수 = 변수 클래스 내부 (메모리 영역이 다름) 오브젝트 = 인스턴스 함수 = 메소드 변수 = 클래스변수 또는 인스턴스변수 프로그램을 실행하면 프로그램 정보가 메모리에 할당되고 프로그램에서 사용하는 변수들을 저장할 다양한 메모리 공간이 필요하다 1. 코드(code) 영역 2. 데이터(data) 영역 3. 스택(stack) 영역 4. 힙(heap) 영역 CPU는 프로그램 코드를 가져와 메모리를 관리하고 명령문(function, method)을 실행한다.
vm에 nat, nat network, host only 등의 네트워크 어댑터를 이용하여 네트워크 설정을 하고 master node를 셋팅하면 master node의 internal ip가 private ip로 나올 것이다. 이 경우에는 kubeadm join을 했을 때 certificate is valid for 10.96.0.1, 10.0.2.15, not 라는 에러가 나올 것이다. (물론 이전에 master node의 apiserver가 그 공인ip에서 포워딩되도록 했다는 전제이다.) 왜냐하면 master node의 kubeadm init을 내부ip로 했기 때문이다. 해결방법은 certification이 worker node에서 추가하려는 master node의 공인 ip에 valid되게 만드는 것..