공부하고 기록하는, 경제학과 출신 개발자의 노트

학습일지/kubernetes 25

KubeCon 2020 - Kubernetes Leader Election for Fun and Profit

Kubernetes Leader Election for Fun and Profit Nick Young, VMware 소개할 내용은 세 가지 What is Leader Election & how do you implement Guides for using it Common Patterns What is Leader Election k8s는 API server에서 쓰는 leader election code를 사용자의 controller에서도 쓸 수 있게 지원하고 있다. Elect 1 instance as a leader. only 1 instance can make changes. 사용할 수 있는 기능으로는 write changes back = Controller Pattern 클러스터 외부에서 작업을 수행..

kubernetes Dynamic Informers with client-go

Watching Kubernetes custom resources with dynamic informers & golang https://youtu.be/fBY8sVVjM2s k8s Operator를 만들 때, CRD의 reconcile 로직을 적용하기 위해 Get / List Loop를 쓰는 경우가 있다. ineffective / slow way to find changes. 예컨대 리소스가 backoff 상태라면 Get / List 요청을 보내는 주기가 갈수록 느려진다. 리소스가 많을 경우 pagination 등... 고려할 것들이 늘어남 client go에서 제공하는 (shared) cache를 사용해서 보완하기도 함 위의 방식들보다 더 나은, InformerFactory를 사용해서 Watcher를..

if kakao 2022 - Kubernetes Controller를 위한 테스트코드 작성

https://youtu.be/B80-GByJFEA Controller : Loop 돌면서 클러스터의 상태를 확인하고, 상태 변화 / 유지에 필요한 작업을 Request 보내거나 직접 수행하는 컴포넌트. 대표적인 예시가 replicaSet. ingress-nginx controller는 http routing rule 설정을 담당. 하나의 클러스터가 연관된 여러 리소스의 상태를 체크하고 유지시켜준다는 점에서는 편리함 controller 로직에 문제가 있을 경우 연관된 리소스가 전부 영향을 받을 수 있다는 단점이 있음. 그러므로 테스트코드 작성이 중요함. 예시: 간단한 CRD와 Reconcile 로직 - BlueGreen CRD 아래 예시는 BlueGreen이라는 CRD를 관리하는 Controller를 생..

ContainerDays 2021 - Into the Core of Kubernetes: the internals of etcd 정리

영상: https://youtu.be/YIBQrP1grPE 발표자: Michael Gasch (VMware) 발표자분이 따로 정리했던 글: https://www.mgasch.com/2021/01/listwatch-part-1/ Onwards to the Core: etcd A journey to the core behind the Kubernetes ListerWatcher interface www.mgasch.com kubernetes 아키텍처 설명 k8s에서 쓰는 etcd Data model k8s Controller / operator에서 etcd를 어떻게 사용하는지 k8s는 크게 세 개의 레이어로 구분할 수 있다. Control Plane: Controller Manager, Scheduler, ..

CKA 대비 kubernetes 스터디 - 8. Networking (2)

Networking Cluster Nodes k8s cluster는 여러 개의 노드 - 마스터 노드, 워커 노드 - 가 network interface로 연결되어 있는 형태. 각각의 노드에는 ip address가 매핑되어 있어야 하고, unique hostName이 있어야 하며, 고유한 Mac Address 값이 있어야 한다. 기존 VM을 복사해서 노드를 생성할 때 특히 유의할 부분임. kubernetes 컴포넌트를 실행하고, 컴포넌트 간 통신을 위해 열려 있어야 하는 포트들. https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/#steps-for-the-first-control-plane-node ..

CKA 대비 kubernetes 스터디 - 8. Networking (1)

알아둬야 할 Linux Networking Prerequisite 내용. Basics : Linux Networking A가 B에게 통신하려면? Switch에 연결한다. -> switch는 두 개의 시스템을 연결하는 네트워크를 생성한다. switch에 연결하기 위해서는, 각 호스트가 사용해야 할 인터페이스가 있다. ip link 명령어로 해당 PM / VM의 인터페이스를 확인할 수 있다. 예컨대 예시의 경우 eth0 이라는 이름의 인터페이스가 확인됨. switch 내부의 네트워크가 192.168.1.0 이라고 가정한다면, 두 개의 컴퓨터 A와 B는 아래의 명령어를 사용해서 switch 내부의 네트워크에 자신의 정보를 등록할 수 있다. ip addr add 192.168.1.10/24 dev eth0 ip..

CKA 대비 kubernetes 스터디 - 7. Storage

Docker Storage 크게 두 가지 개념이 있다. Storage Driver docker는 데이터를 어디에 저장하는지, container에서 fileSystem을 어떻게 관리하는지. docker image를 실행하면, /var/lib/docker 라는 경로를 컨테이너 내부에 생성한다. aufs, containers, image, volumes 등 하위 경로도 같이 만들어진다. 여기까지가 docker에서 흔히 말하는 'data' 필드. Docker의 Layered Architecture dockerfile의 맨 윗줄부터 하나씩 레이어를 쌓아가면서 이미지를 생성한다. 각 레이어는 이전 레이어에서 추가된 내용만을 저장하며, 로컬에 캐시된다. 따라서, 비슷한 dockerfile을 빌드하게 될..

CKA 대비 kubernetes 스터디 - 6. Security (2)

API Group - prerequisite for Authorization version: 클러스터 버전 확인용. health / monitor: checking health를 위해 사용함. logs : 3rd party 프로덕트와 통신할 목적으로 사용함 API - cluster functionality를 위한 API라서 좀더 상세히 다룬다. api : Core Group. k8s 자체의 핵심 기능을 주로 담당한다. Namespace, node, Persistent Volumes 등등 apis : Named Group. more organized / newer features are available. 특정 리소스를 docs에서 선택하면, 어떤 API에서 호출할 수 있는지 확인해준다. 아니면 클러스터에..

CKA 대비 kubernetes 스터디 - 6. Security (1)

Security Primitives in K8s 기본적인 cluster의 security 옵션 access to these hosts must be secured. root access disabled password based Authentication 사용하지 않음 SSH key-based authentication 사용. 기타 k8s가 올라가있는 VM / PM 자체의 Security. 시험에서는 k8s 내부 리소스에 관련된 Security가 주로 나옴 kube-apiserver : 모든 요청과 통제를 담당하는 컴포넌트. 따라서 이 컴포넌트의 보안이 제일 중요함 누가 접근할 수 있는가? 무엇을 어디까지 통제할 수 있게 할 것인가? 가 핵심. Who can Access의 경우... Authenticat..

CKA 대비 kubernetes 스터디 - 5. Cluster Maintenance

OS Upgrade maintenance를 목적으로 (보안패치라던가, SW 업그레이드라던가) 클러스터의 특정 노드를 내려야 하는 경우. 만약 특정 노드가 죽었을 경우 노드가 금방 복구될 경우 -> kubelet은 이전에 돌고 있던 pod을 다시 시작시킨다. 큰 이상 없음. 5분 이상 노드가 죽었을 경우 -> pod가 해당 노드에서 아예 제거된다. (dead로 간주함) 다시말해 마스터 노드는 특정 노드의 사망판정을 내리기까지 5분은 대기한다. 만약 해당 pod가 replicaSet으로 관리되고 있다면, 다른 노드에서 pod를 재생성한다. '5분' 인 이유는 pod Eviction time 때문이다. kube-controller-manager에서 설정된 값. --pod-eviction-timeout=5m0s..