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

학습일지/kubernetes 25

CKA 대비 kubernetes 스터디 - 4. Application LifeCycle Management

Rollout Updates / Rollback Rollout이 진행될 때 k8s에서는 어떤 절차로 작업이 진행되는가 앱을 처음 배포할 때 - 새로운 Deployment를 생성한다 해당 deployment는 rollout을 발생시킨다. rollout은 새로운 revision을 생성한다. (revision 1) 버전이 올라가거나 소스코드가 바뀌는 등의 업그레이드가 발생하면, new deployment를 생성한다. new Rollout이 생성되고, 새로운 revision이 생성된다. 두 개의 revision이 유지되고 있기 때문에 새로운 버전으로 rollout하는 것 / 이전 버전으로 rollback하는 것이 가능하다. Rollout 명령어 / 상태 확인하는 방법. Deployment Strategy는 크게..

헷갈리니까 확실히 알고 쓰자! Docker의 Entrypoint, cmd와 k8s의 command, args 비교하기

Command Argument. Configuring Application은 아래 세 가지 의미를 포함한다. Configuring Command / Argument on Application Configuring Env variable Configuring secret 시험에서의 공식 범위는 아니지만, 과소평가해서는 안 되는 영억. docker 커멘드가 k8s에는 어떻게 대응할 수 있는지 확인하기 위함. docker run ubuntu를 실행하면, 컨테이너는 실행을 완료하고 종료한다. 종료된 컨테이너까지 확인하려면 docker ps -a 명령어를 써야 한다. 이미 exit한 컨테이너를 확인할 수 있다. VM과 달리 Container는 OS 호스팅을 하지 않는다. 프로세스 가상화 개념이므로, 프로세스가 끝..

CKA 대비 kubernetes 스터디 - 3. Logging / Monitoring

CKA에서 비중있게 다루는 내용이 아니다. 일반적으로는 모니터링을 위한 tool이 따로 있고, 그걸 k8s에 붙여 쓰는 경우가 많기 때문. k8s에 내장된 모니터링 컴포넌트 사용법과 애플리케이션 모니터링 방법만 다룬다고 보면 된다. 별 내용 없음 Logging and Monitoring 강의 설명 기준으로는, k8s에서 built-in으로 제공하는 완벽한 모니터링 툴은 없는 상태. 여러 모니터링 툴을 붙여서 사용하고 있다. Metrics Server: Node / Pod에서 정보를 수집, 취합한 뒤 메모리에 저장하는 도구. 따라서 metrics storage 기능을 지원하지 않는다. How metrics are Generated on the Node / Pod? kubelet 내부에 subComponen..

CKA 대비 kubernetes 스터디 - 2. Scheduler

Manual Scheduling 만약 k8s에서 해주는 scheduling 대신 직접 스케줄링을 진행하고 싶다면? 모든 pod에는 선택옵션으로 nodeName 필드를 추가할 수 있다. 보통은 사용자가 입력하는 게 아니고 k8s manifest를 적용하는 과정에서 자동으로 부여되는 값. Scheduler는 pod의 nodeName 필드를 탐색하면서, 해당 필드가 정의되지 않은 pod를 찾아낸다. 이 Pod들이 scheduling 대상이 됨. 선별된 pod에 scheduling 알고리즘을 돌려서, 해당 pod가 실행될 nodeName을 결정한다. pod에 스케줄링이 되지 않으면, pod는 pending 상태를 유지한다. 스케줄링 알고리즘을 사용하지 않는 상태에서 가장 쉬운 pod 스케줄 방법은 nodeNam..

CKA 대비 kubernetes 스터디 - 1. Core Concept

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/ Cluster Architecture kubernetes의 목적은 host your application in the form of containers in an automated fashion. 따라서 많은 수의 container 기반 애플리케이션을 배포하고, 애플리케이션 간 통신이 가능하다. 비유를 통해 쉽게 설명하면 Kubernetes가 하는 역할은 크게 보면 두 가지로 나뉜다. 배로 비유하자면 Cargo Ships that Carrys Containers Monitoring / Managing the Cargo Ships. Kubernetes Cl..

Kubernetes Deep Dive - (8). Storage

Storage Container File System ephemeral. 컨테이너를 삭제하거나 재실행하면 컨테이너 file system의 데이터도 같이 삭제됨. 컨테이너가 계속 사용해야 하는 데이터라면 Volumes를 사용하는 편이 좋다. Volumes Runtime에는 컨테이너가 접근 가능한 outside-container storage. real time change - 컨테이너가 참조하고 있는 파일 값이 변경될 경우 external storage의 값도 같이 바뀐다. Persistent Volumes 보다 추상화된 형태. k8s object처럼 Persistent Volumes를 생성해서 pod이 사용할 수 있게 한다. runtime 때, 컨테이너는 storage에 직접 접근하는 대신 Persist..

Kubernetes Deep Dive - (7). Service

Service 외부에서 사용자가 Application Pod에 접근할 수 있도록 하는 k8s Object. 클라이언트의 요청을 받고 pod에게 로드밸런싱으로 트래픽을 전달하는 역할도 겸한다. 실제로 사용자 (클라이언트)가 사용하게 될 ip주소와 Port가 Endpoint. Service Types Service에는 여러 타입이 있고, 각 타입마다 애플리케이션을 어떻게 / 어디로 expose 시킬 것인지의 Rule이 조금씩 다름. Service Type의 디폴트는 ClusterIP. CKA에는 LoadBalancer와 ExternalName도 범위에 들어간다고 함 ClusterIP 클러스터 내에서 Pod끼리 통신하고자 할 때 사용. 클러스터 외부 노출이 아니라 클러스터 내부에서의 노출임. 즉 Same cl..

Kubernetes Deep Dive - (6). Network

K8s Network pod끼리 통신은 어떻게 할 것인가? 에 관련된 문제들. Network Implementation으로 여러 종류가 있지만, kubeadm을 사용한다면 Calico가 가장 적절함. 기본적인 규칙 모든 pod는 Network Address Translation (NAT) 없이 다른 Pod과 통신이 가능해야 한다. (어느 node에서 동작하건 상관없이) IP / DNS 또는 localhost로 접근이 가능해야 함 같은 Single Cluster 내부에 있다면, 어느 노드에 있는 pod이라 해도 IP주소나 local DNS로 서로 통신이 가능하다. CNI Plugins k8s의 Network Implementation을 제공하는 여러 plugin 중 하나. k8s 공식문서에서 cluster..

Kubernetes Deep Dive - (5). Deployment

Scaling Application in k8s Application scalability : 애플리케이션의 트래픽이 증가할 때 / 감소할 때 유연하게 대처할 수 있는 능력 Stateless App : 클라이언트 데이터를 서버에서 세션 단위로 저장하지 않는 애플리케이션. Horizontal Scale에 유리한 구조 (Pod 개수를 늘려서 트래픽에 대응할 수 있음) Stateful App : 클라이언트 데이터를 서버에 저장하고, 서버의 interal state가 로직에 필요한 형태. K8s에서는 ReplicationController를 사용해서 pod의 개수를 조절함. ReplicationController의 형태 apiVersion: v1 kind: ReplicationController metadata..

Kubernetes Deep Dive - (4). Pods and Containers

Pods / Containers in k8s Manage Application Configuration in k8s 일반적으로 Application의 Config는 Dynamical하게 관리되는 경우가 많음. k8s의 경우 runtime 시점에서 config을 자유롭게 변경해서 적용할 수 있도록 지원하고 있다. Non-sensitive : 토큰이나 auth key 등 confidential을 제외한 데이터들 ConfigMap과 pods / containers는 M:N 관계. 숫자나 범위 제한 없이 자유롭게 매핑이 가능하다. secret 파일 생성에 쓰인 username.txt와 password.txt는 secret을 생성한 뒤에는 서버에서 삭제해도 된다. Secret 객체가 encoded username..