동영상 : Kubernetes 개념
Kubernetes의 작동개념
- 객체모델: 관리하는 각각의 대상은 객체로 표시되며, 객체의 속성과 상태를 보고 변경할수 있다
- 선언적 관리원칙: 관리대상이 될 객체에 대해서 원하는 상태를 K8s에 알리면, K8s는 그 상태를 구현하고 유지하도록 작동한다.
Kubernetes 객체
- Object Spec: 원하는 스펙을 우리가 정의
- Object status: 현재 상태를 Kubernetes 가 알려줌
Pod
- 배포 가능한 가장 작은 kubernetes 객체(not container)
- Container가 존재할수 있는환경을 제공함(여러개의 container도 존재할수있음)
- 만일 여러개의 Container가 하나의 pod안에 있다면, 각 Container에 network, storage를 공유하게 시킴
- 각 Pod마다 고유한 IP가 존재
- 자가복구가 되지않음
실제로 배포가 되는 과정(예시)
- 사용자가 3개의 pod 가 떠있기를 바라고있음
- 현재상태에 0 개의 pod 가 떠있는 상태임
- Kubernetes Control Plane은 원하는상태와 현재상태를 비교하고, 필요에 따라서 pod를 띄우게 함
퀴즈: Kubernetes Concepts
Q. What is the difference between a pod and a container?
A. A pod contains one or more containers.
동영상: Kubernetes 제어영역(Control Plane)
Control-Plane
kube-APIserver
- 사용자와 직접 상호작용 하는 단일 구성요소
- 포드 시작을 포함하여, 클러스터의 상태를 확인하거나 변경하는 명령어를 수락하는것.(kubectl명령어 사용)
- 사용자를 대신에서 Etcd와 통신함
- 다른 노드들의 kubelet에 명령을 보냄
kubectl 명령어의 역할
- kube-APIserver에 연결하고, Kubeneretes API를 사용하여 서로 통신하는것
Etcd
- 분산 데이터베이스
- 클러스터의 상태를 안정적으로 저장하는것
- e.g. 어떤 노드가 클러스터의 일부고, 어떤 포드가 어디서 실행되어야하는지에 대한 데이터
- 사용자는 직접 관리할 일 없음
kube-scheduler
- 노드에 포드를 예약함
- 각 포드의 요구사항 을 평가하고, 가장 적합한 노드를 선택함
- 그러나 실제로 노드에서 포드를 실행하는 작업을 하진 않음
kube-controller-manager
- kube-apiserver를 확인해서 지속적으로 클러스터의 상태를 모니터링
- 클러스터의 현재상태와 원하는상태가 동일하지않는다면, 이를 맞추려고 행동함
- 사용자는 특정종류의 kubernetes 컨트롤러를 사용해서 문제를 해결함
kube-cloud-manager
- 공급자(GCP, AWS) 등의 클라우드 제공업체와 상호작용하는 컨트롤러를 관리함
NODE
kubelet
- control-plane이 아닌, Node에 설치되는것
- 각 노드는 kubelet을 실행함
- 사용자가 control-plane의 kube-apiserver에 명령을 내리면, kube-apiserver가 노드의 kubelet에 명령을 내리는 방식으로 구현됨
- 컨테이너 런타임을 사용해서 pod를 시작하고, 실행하며, 수명 주기를 모니터링하고 kube-apiserver에 다시 보고를 함
kube-proxy
- 클러스터의 pod 간 네트워크 연결을 유지해주는것
- linux kernel의 ip tables를 사용하여 연결
container runtime란?
- container를 띄우기위해서 어떻게 해야하는지 알고있는 소프트웨어
- GKE에서는 containerd를 사용함
퀴즈: Kubernetes Control Plane
Q1. Which control plane component is the cluster's database?
A. etcd
Q2. What is the role of the kubelet?
A. To serve as Kubernetes’s agent on each node
Q3. Which control plane component is the only one with which clients interact directly?
A. kube-apiserver
동영상: Google Kubernetes Engine 개념(GKE만 해당)
Node Scaling
- Kubernetes는 노드 자체를 만들어낼수 없음.
- 클러스터 관리자가 직접 노드를 만들어서, Kubernetes에 조인시켜주어야함
GKE
- 추가노드가 필요하다면, 자동으로 Compute Engine가상 인스턴스를 실행하고 이를 노드로 등록함
Node Pool
- 메모리 양이나 CPU세대 같은 구성을 공유하는 클러스터내의 하위 집합
- 사용자는 원하는 노드풀로 라벨을 지정만 하면 됨
- 노드 풀 단위에서 auto scaling 가능
GKE Region
- 쿠버네티스가 하나의 리전에만 존재했다가, 만약 하나의 리전에 장애가 생기면 서비스 전체 장애가 발생하는것을 막기 위한것에서 시작됨
- 여러개의/단일 리전에서 여러개의 Zone(하나의 구역) 에 폭넓게 존재하면서, 단일 영역의 region에서 폭넓게 존재하는것을 목적으로함
- 기본적으로 3개의 Zone에 배포되고, 각각의 Zone에는 Control-plane이 존재함
퀴즈: Google Kubernetes Engine Concepts
Q1. In GKE clusters, how are nodes provisioned?
A. As Compute Engine virtual machines
Q2. What is the purpose of configuring a regional cluster in GKE?
A. To allow applications running in the cluster to withstand the loss of a zone
Q3. In GKE, how are control planes provisioned?
A. As abstract parts of the GKE service that are not exposed to Google Cloud customers
동영상: Kubernetes 객체 관리(Object)
Object
- yaml 파일 형태로 배포
코드관리하는곳에 같이 넣게되면, 나중에 백업하기도 좋고 편하게 될것
apiVersion: 객체를 생성하는데 사용되는 Kubernetes API 버전
kind: 원하는 객체
metadata: 객체를 구분할수 있는 구성(이름, 라벨 등). 하나의 네임스페이스에서는 하나의 name만 존재할수있다.
- label은 k-v형태로 존재하며, 사용자가 객체와 객체 하위집합을 식별하고 구성하는데에 유용함.
- kubectl 명령어에서 selector=?=? 라는 방식으로 지정 가능
그러나 해당 방식의 단점
- 동일한 파드를 여러개의 배포를 해야한다면, 여러개의 파일을 만들고, 전부 라벨을 다르게 만들어주어야함
- 파드는 스스로 복구되거나 수리되지 않으며, 영원히 실행되는것도 아님
→ 파드의 상태를 관리하는 컨트롤러 담당 객체를 선언해야함(statefulset, demonset, deployment …)
노드의 리소스관리(namespace)
- 쿠버네티스는 물리적 단일 클러스터를 namespace 라는 가상화된 클러스터로 가상화할수있다
- namespace내의 리소스 사용(CPU,Ram) 에 대한 제한을 정의할수있다
- Namespace를 꼭 써야하는건 아니지만, Label을 써도 된다. 즉, 편한거를 사용하면된다
퀴즈: Kubernetes Object Management
Q1. In a manifest file for a Pod, in which field do you define a container image for the Pod?
A. spec
Q2. What are Kubernetes namespaces useful for? Choose all that are correct (2 correct answers).
A. Namespaces allow you to use object names that would otherwise be duplicates of one another.
A. Namespaces let you implement resource quotas across your cluster.
Q3. What is the purpose of the Deployment object?
A. To ensure that a defined set of Pods is running at any given time.
문서: 알아야 할 컨트롤러 객체
ReplicaSets Controller
- 동일한 pod 가 모두 동시에 실행되게 하는것
Deployment
- 사용자가 원하는 갯수만큼 Replicaset을 사용해서, pod를 업데이트 할수있게 하는거
- 여기서 생성된 Pod에는 영구ID가 주어지지않음
- 예를들어, Replicaset의 갯수를 늘리는 상황이라면, Deployment는 새로운 Replicaset을 생성하고, 새로운 Replicaset에서 Pod의 갯수를 늘리고, 이전의 Replicaset을 제거
Replication Controller
- Replicaset + Deployment 을 합친것과 유사
- 그러나, 현재 사용이 권고되지않음
StatefulSet
- 로컬 상태를 유지하는 Application을 배포해야하는경우
- 여기서 생성된 Pod에는 고유한 영구ID, 네트워크, 디스크를 가집니다
DaemonSet
- 특정 Pod가 클러스터내의 여러노드에서 실행되기를 바랄때
- 새로운 노드가 추가되면 Daemonset이 자동으로 해당 노드의 Pod를 필수사양으로 설정함
퀴즈: Kubernetes Controller Objects
Q1. What is the purpose of a Service? Choose all that are true (2 correct answers)
A. To provide a load-balancing network endpoint for Pods
A. To allow you to choose how Pods are exposed
Q2. If you are deploying applications in your Pods that need persistent storage, which controller type should you use?
A. StatefulSet
동영상: Migrate for Anthos 아키텍처
마이그레이션에 필요한 아키텍쳐 순서
- Migrate for Compute Engine 이 On-prem/cloud 에서 데이터를 가져올수 있도록, 데이터 파이프라인을 생성하도록 허용해야함
- Migrate for Anthos 가 GKE 클러스터에 설치되고, 해당 배포를 기반으로 마이그레이션 완료
동영상: 마이그레이션 경로
Migrate for Anthos 를 하면 일어나는일
- processing cluster를 생성하고, 거기에 Migrate for Anthos 구성요소를 설치함
- 마이그레이션 소스를 추가
- 마이그레이션의 세부정보로 마이그레이션 객체를 생성, Yaml 파일에 계획템플릿이 만들어짐
- 배포에 필요한 Application의 컨테이너이미지와 Yaml파일이 완성되면, 마이그레이션을 위한 Artifact가 생성됨
- 테스트 실행
- 배포 진행
퀴즈: Kubernetes Architecture
Q1. You need to ensure that the production applications running on your Kubernetes cluster are not impacted by test and staging deployments. Which features should you implement and configure to ensure that the resources for your production applications can be prioritized?
A.
Q2. You are designing an application, and you want to ensure that the containers are located as close to each other as possible, in order to minimize latency. Which design decision helps meet this requirement?
A. Place the containers in the same Pod.
Q3. You have deployed a new Google Kubernetes Engine regional cluster with four machines in the default pool for the first zone and left the number of zones at the default. How many Compute Engine machines are deployed and billed against your account?
A. Twelve. (Four nodes are deployed in each of three zones. A control plane node is deployed in each zone which is indirectly billed against your account through the cluster management fee.)
Q4. You want to deploy multiple copies of your application, so that you can load balance traffic across them. How should you deploy this application's Pods to the production Namespace in your cluster?
A. Create a Deployment manifest that specifies the number of replicas that you want to run.
Q5. When configuring storage for stateful applications, what steps must you take to provide file system storage inside your containers for data from your applications that will not be lost or deleted if your Pods fail or are deleted for any reason?
A. You must create Volumes using network based storage to provide durable storage remote to the Pods and specify these in the Pods.
Q6. Which Kubernetes component does the kubectl command connect to in order to carry out operations on a cluster?
A. kube-apiserver
'외부활동' 카테고리의 다른 글
[구글 클라우드 쿠버네티스 스터디잼 중급] 수료했습니다 +후기 (0) | 2023.06.25 |
---|---|
[구글 클라우드 쿠버네티스 스터디잼 중급] Kubernetes Architecture 오타 (0) | 2023.06.25 |
[구글 클라우드 쿠버네티스 스터디잼 중급] Introductions to containers and kubernetes (0) | 2023.06.22 |
[구글 클라우드 쿠버네티스 스터디잼 중급] 하다가 퀵랩에 문의한썰: 1달 무료구독 안생김 (0) | 2023.06.22 |
[오픈소스 컨트리뷰션] 번외코스1. 머신러닝 분산처리 프레임워크 동작 이해하기 (0) | 2023.06.21 |