역사 맨 처음에는 k8s가 컨테이너 런타임을 도커만 사용함 rkt같은 다른 컨테이너 런타임도 추가하고자 함 → 이러려면 필요한게 CRI였음 cri = container runtime interface cri 도입으로 oci 표준을 준수하는 다른 컨테이너 런타임을 지원할 수 있게 됨 oci = open container initiative 표...
what is etcd? 분산되고 신뢰할 수 있는 키-밸류 스토어 etcd에는 클러스터에 관한 정보를 저장 (nodes,pods,configs,secrets,accounts,roles,bindings, others) kubectl을 실행할
what is kube-api server kube-apiserver는 클러스터에서 변경을 위해 수행해야 하는 모든 작업의 중심에 있다. kubectl 명령어를 실행하면, 실제로 kubectl 유틸리티가 kube-apiserver에 접근한다. kube-apiserver는 etcd와 직접 상호작용하는 유일한 구성요소 api 서버의 역할 authentica...
what is Kube Controller Manager Kube Controller Manager는 Kubernetes에서 여러 컨트롤러를 관리 컨트롤러는 마스터 내의 사무실이나 부서와 같은 것 예를 들어, 선박에 대한 사무실은 선박의 모니터링 및 필요한 조치를 담당합니다. 새로운 선박이 도착하거나 선박이 떠나거나 파괴될 때마다 조치...
생성할 파드를 어느 노드에 배치시킬지 결정하는 결정자.
선박(노드)의 선장과 같은 역할
what is kube-proxy 요청 들어오면 포워딩 해주는 역할 docker-proxy와 동일한 역할 모든 노드에서 실행되는 프로세스 새로운 서비스를 찾아내고, 새로운 서비스가 생성될 때마다 각 노드에서 해당 서비스로 트래픽을 전달하기 위한 적절한 iptables 규칙을 생성 k8s 클러스터에서 각각의 파드는 서로 다른 모든 파드에 접근할 ...
k8s에서 생성할 수 있는 가장 작은 오브젝트
k8s는 pod, replicaset, deployment, service 같은 객체를 생성하기 위해 YAML 파일을 사용
1/2 : running container / total containers in pod webapp 파드에 2개의 컨테이너 존재하고 그 중 1개만 running 상태 파드 상세 확인 dry-run 클러스터에 명령 실행하기 전 명령의 유효성을 체크하기 위해 사용하는 옵션, 실제 반영 x, 예시) kubectl appl...
객체를 모니터링하고 지정된 수의 파드가 항상 실행되도록 보장하는 역할
dry-run으로 파일의 유효성 여부를 확인할 수는 없다..! 레플리카셋이 생성될 것이라고,, 이상이 없길래 실행시켰더니… 에러 발생 rs를 통해 배포할 파드의 라벨은 selector에 포함되어야 함 spec.selector.matchLabels >> spec.template.metadata.labels 이미 생성된 오브젝트 정보 확인 & y...
배포deploy를 위해 필요한 여러 기능을 지원함
시험 중에는 브라우저에서 YAML 파일을 복사하여 터미널에 붙여넣기 하는 것이 어려울 수 있습니다. kubectl run 명령을 사용하면 YAML 템플릿을 생성하는 데 도움이 될 수 있습니다. 때로는 YAML 파일을 생성하지 않고도 kubectl run 명령만으로 작업을 수행할 수도 있습니다. 예시 다음 조건에 부합하는 deployment 생성하기 ...
응용 프로그램 내부 및 외부의 다양한 구성 요소 간의 통신을 가능하게하는 객체
개발 환경과 운영 환경을 동일한 클러스터에서 사용하고자 하지만, 두 영역의 리소스를 각각 격리할 때 도입 가능한 개념
명령형 접근 vs 선언형
선언적 방식(imperative)으로 객체를 관리하는 명령어
객체를 그룹화해서 관리/사용하기 위한 방법
스케줄러가 파드를 특정 노드에 배치시키지 않도록 설정하는 것
노드에 라벨을 붙이고, 파드가 그 라벨이 붙은 노드에만 배포하는 것
특정 노드에 파드를 스케줄링하기 위함
스케줄러는 파드가 필요로 하는 리소스의 양과 노드에서 사용 가능한 리소스를 고려하여 파드를 배치할 가장 적합한 노드를 찾아낸다.
모든 노드마다 동일한 파드를 하나씩 띄워놓는 데몬
개념 참조 스태틱 파드 는 API 서버 없이 특정 노드에 있는 kubelet 데몬에 의해 직접 관리된다. 컨트롤 플레인에 의해 관리되는 파드(예를 들어 디플로이먼트(Deployment))와는 달리, kubelet 이 각각의 스태틱 파드를 감시한다. (
스케줄러 생성방법
Metrics Server로 k8s 클러스터 모니터링하기
k8s 배포 전략
정의 파일에 사용하는 command & args 사용법
환경 변수 관리
비밀번호 같이 숨겨야 하는 데이터는 secret 으로 관리함
EncryptionConfiguration을 사용하여 etcd에 저장되는 secret을 암호화 하기
계속 실행되어야 하는 애플리케이션 컨테이너가 아니라, 단지 pod 실행시 한 번만 수행해야하는 작업이 있을 경우 사용한다.
노드 / 스케줄링 관리 할 때 사용
k8s 버전 필요하다면 각 부분 별로 버전 업그레이드 가능함 버전 업그레이드는 마이너 버전 1개씩 업그레이드 하는 것을 권장한다(v1.11 → v1.12) 한 번에 여러 마이너 버전을 넘어가는 것이 아니라(v1.11 → v1.13) 먼저 마스터 노드 업그레이드하고 워커 노드 업그레이드 하는 순서로 작업한다. 마스터 노드가 잠시 멈춘다고 해서 워커 노드가...
cluster backup and restore
거의 모든 작업을 하는 kube-apisever 를 보안하는 것이 가장 먼저
클러스터를 위한 인증서를 생성하는 방법
kubectl certificate 명령어 알아보기
클러스터, 유저, 컨텍스트 관련 명령어
authorization mode Node ABAC : 수정사항 있으면 매번 kube-apiserver 재시작해야 하므로 관리하기 어려움 RBAC : 역할role을 생성하고, 역할에 권한을 부여하는 식으로 관리함. 그리고 유저를 역할에 소속되도록 설정함 Webhook : 외부에서 권한 관리하는 경우 사용 Alwaysallow(default) : 승...
Role Base Access Control 역할 기반 접근제어
비네임스페이스 리소스에 대한 접근 제어
유저가 사용하는 것이 아니라, 서비스 or 머신이 사용하는 계정(프로메테우스, 대시보드 같은 외부 서비스 포함)
이미지 이름 구조(?) private registry 구성한 경우 1 이미지를 private registry에서 땡겨오도록 파드 수정하기 myprivateregistry.com:5000 → 생성한 개인레포 경로 2 docker registry를 위해 알맞은 secret을 생성 3 파드에 imagePullSecrets 설정하기 이미지를 private...
파드 또는 컨테이너에 대한 권한 및 액세스 제어 설정을 정의하는 것
기본적으로 클러스터 내의 모든 파드 간에는 서로 통신이 가능하다. (만약 network policy가 없다면 web → db 통신도 가능) 그러나 보안을 위해 특정 파드 간에만 통신을 허용하고 싶을 경우, network policy를 추가하여 적용한다. 예) web → was → db 방향으로만 통신할 수 있도록 설정하는 것 Ingress & Egres...
pod definition file 기준 spec.volumes 으로 볼륨을 생성하고, spec.containers.volumeMounts 에서 생성한 볼륨을 사용하도록 작성한다. 위의 예시는 호스트 /var/log/webapp 경로가 파드의 /log 로 마운팅
테이너 레이어에서의 데이터를 계속해서 보관하고 관리하고 싶을 경우 볼륨을 사용해야 한다. PV와 PVC는 이 볼륨을 더 쉽게 관리하게 해준다.
다이나믹 프로비저닝을 하면서 수동으로 PV를 만들지 않기 위해 사용
컨테이너 런타임 환경에서 네트워킹 문제를 해결하기 위해 프로그램이 어떻게 개발되어야 하는지 정의하는 표준의 집합
마스터 노드와 워커 노드에 필요한 네트워킹 구성
클러스터 내의 파드 간의 통신을 위한 설정
Kubernetes가 네트워크 플러그인을 사용하도록 구성하는 방법을 알아보기 위한 강의
여러 네트워크 플러그인 솔루션 중 weave를 상세히 알아본다
어떻게 노드의 가상 브리지 네트워크에 IP 서브넷이 할당되고, 파드가 IP 주소를 할당받는지를 다루는 강의
파드가 노드에 호스팅되는 것과는 다르게, 서비스는 클러스터 전체에 걸쳐 호스트된다. 서비스는 기본적으로 iptables를 사용하여 NAT 규칙을 생성한다.
웹에서 도메인으로 아이피를 찾아 가듯이, k8s의 서비스도 이름으로 아이피를 찾아간다.kubernetes DNS가 서비스 이름을 아이피 주소에 매핑하여 이것을 가능하게 해준다.
중앙에서 DNS 서버를 운영해서 사용자에게 DNS 관리를 편하게 해주는 CoreDNS를 k8s 클러스터에서도 사용한다.
k8s 클러스터에 내장된 Layer 7 계층의 LB
멀티 마스터 노드 구성
여러 etcd가 구성된 경우 각 인스턴스의 데이터 정합성을 맞추는 일은 어떻게 구현될까?
준비 시험 준비 많은 분들이 수강하는 뭄샤드 형님의 바로 그 강의 수강하면서 시험을 준비했다. 많은 후기를 통해 증명되듯이, 이 강의가 얼마나 좋은지는 더 이상의 설명이 필요하지 않다. 그냥 CKA 대비를 위해 필요한 거의 모든 것을 배울 수 있는 강의라고 생각한다. 전체 강의를 1회 수강했고, 수강하면서 공부한 내용을 정리해서 블로그에 업로드했다. t...