본문 바로가기
728x90

쿠버네티스9

CKA 합격 후기 안녕하세요! 저는 작년 10월부터 회사에서 VM 기반 MSA 환경을 쿠버네티스 환경으로 이전하는 프로젝트를 맡아서 진행하면서 쿠버네티스를 시작하였습니다. 그러는 도중 쿠버네티스에 대해 더 깊이 알고 싶었고, 실제로 쿠버네티스 운영자가 갖춰야 할 최소한의 지식 범위가 어느정도인지 알기 위해 CKA 시험을 준비하였고 95점으로 합격하였습니다! 시험 합격한 기념 + 저 뿐만 아니라 쿠버네티스를 공부하는 다른 개발자분들을 위해 CKA 준비 과정을 공유하고자 이 글을 작성하였습니다. CKA 준비 과정 저는 2022년 5월 말부터 CKA를 준비하였고, 2022년 9월 4일에 시험을 쳤습니다. 제가 시험을 칠 때는 1.24 버전이었습니다. 시험 준비하는 데 약 3달이 걸렸는데 요약하자면 다음과 같습니다. 강의 (약 .. 2022. 9. 14.
쿠버네티스 Static Pods 쿠버네티스의 컨트롤 플레인 노드에 있는 kube-scheduler 는 파드가 생성되면 파드를 적절한 노드로 스케줄링한다. 하지만 kube-scheduler가 없다면(장애가 난다면), 또는 kube-apiserver가 없다면 파드를 생성하거나 스케줄링을 할 수 없다. 하지만 kube-scheduler, kube-apiserver 의 도움 없이 파드를 배포할 수도 있다. 실제로 파드를 직접 배포하는 컴포넌트는 각 노드에서 구동 중인 kubelet이기 때문이다. (사실은 kube-apiserver가 kubelet 에게 파드가 생성되었으니 파드를 배포시키라고 지시한다.) kube-apiserver 가 시키지 않고도 kubelet 이 스스로 파드를 배포하게 만들 수 있다. 노드의 /etc/kubernetes/ma.. 2022. 7. 16.
[9] 쿠버네티스 볼륨 Volume 컨테이너(파드)가 뜨면 컨테이너 만의 공간이 생성되고 이 공간은 임시적으로 사용된다. 만약 파드가 죽는다면 해당 공간은 사라진다. 웹 애플리케이션과 같은 Stateless한 애플리케이션인 경우에는 문제가 없지만, 애플리케이션이 특정 데이터를 저장해야 하는 경우나 파드에서 같이 실행되는 컨테이너 간에 임시 파일을 공유해야 하는 경우에 문제가 발생하게 된다. 컨테이너 애플리케이션이 특정 데이터를 저장해야 하는 경우에는 애플리케이션이 죽으면 쿠버네티스가 컨테이너를 다시 띄우겠지만 컨테이너 공간이 사라지기 때문에 해당 데이터는 당연히 삭제된다. 파드에서 같이 실행되는 컨테이너 간에 임시 파일을 공유해야 하는 경우, 파일을 저장하는 컨테이너가 죽어버리면 위와 똑같은 이유로 임시파일에 저장된 데이터는 .. 2022. 2. 20.
[8] 쿠버네티스 서비스 지금까지는 파드로 컨테이너 기반 애플리케이션을 띄우고 디플로이먼트로 파드의 레플리카 수와 버전을 관리하였다. 하지만 이것만으로는 파드로 띄운 웹 애플리케이션을 쿠버네티스 클러스터 외부로 서비스할 수 없다. 왜냐하면 파드는 파드 고유의 IP를 가지긴 하지만 클러스터 내부용 IP이며, 파드는 클러스터의 상태에 맞게 생성되고 삭제되기 때문에 파드는 영구적인 리소스가 아니다. 즉, 파드가 장애가 났다고 판단하면 디플로이먼트가 파드를 재구동 시키면서 파드의 IP가 유지되지 않아서 파드가 클러스터 외부와 통신이 가능한다 하더라도 제대로된 서비스를 할 수가 없다. 이러한 파드의 특성 때문에 쿠버네티스의 클러스터 외부에서 파드와 통신할 수 있도록 하는 메커니즘이 필요하다. 필요한 기능은 먼저 파드가 영구적인 리소스가 .. 2022. 2. 9.
[7] 쿠버네티스 디플로이먼트 쿠버네티스는 파드를 생성하여 컨테이너 애플리케이션을 구동한다. 그런데 실제로 쿠버네티스 환경으로 운영할 때는 파드 자체를 생성하지 않고 디플로이먼트와 같은 워크로드 리소스를 생성하여 파드 집합을 관리한다. 이 워크로드 리소스는 원하는 파드의 종류와 갯수가 실행될 수 있도록 원하는 상태(desired state) 를 보장하는 컨트롤러를 구성한다. 이 장에서는 워크로드 리소스 중 하나인 디플로이먼트에 대해 알아보자. 디플로이먼트 디플로이먼트는 파드와 레플리카셋에 대한 선언적 업데이트를 제공한다. 디플로이먼트에서 원하는 상태(desired state)를 기술하며, 디플로이먼트 컨트롤러가 현재 상태를 원하는 상태로 변경한다. 디플로이먼트는 새로운 레플리카셋을 생성할지, 기존 디플로이먼트를 제거하고 제거 대상 모.. 2022. 1. 23.
[5] 쿠버네티스 오브젝트 (2) 이번에는 쿠버네티스 오브젝트에서 공통적으로 가지는 항목에 대해 알아볼 것이다. 이 장에서는 쿠버네티스 오브젝트와 쿠버네티스 오브젝트의 메타데이터 항목인 네임스페이스, 레이블, 애노테이션에 대해 알아볼 것이다. 쿠버네티스 오브젝트 쿠버네티스 오브젝트는 쿠버네티스 시스템에서 영속성을 가지는 오브젝트이다. 쿠버네티스는 클러스터의 상태를 나타내기 위해 오브젝트를 이용하는데, 여기서 클러스터 상태라는 것은 다음과 같다. 동작 중인 컨테이너 애플리케이션 애플리케이션이 이용할 수 있는 리소스 애플리케이션의 재구동, 업데이트, 내고장성과 같은 것에 대한 동작 정책 Spec, Status 대부분의 쿠버네티스 오브젝트는 오브젝트를 구성하기 위해 spec 과 status 라는 두 개의 필드를 가진다. spec 은 오브젝트에.. 2022. 1. 2.
[4] 쿠버네티스 오브젝트 (1) 쿠버네티스는 클러스터 환경에서 컨테이너 기반 애플리케이션을 배포하고 서비스하며 관리하는 컨테이너 애플리케이션 오케스트레이터 역할을 한다. 쿠버네티스에서 컨테이너 기반 애플리케이션을 포함하여 애플리케이션을 배포하고 관리하는 역할을 하는 객체들을 모두 쿠버네티스 오브젝트 라고 한다. 구체적으로는 다음의 의미를 갖는다. 동작 중인 컨테이너 기반 애플리케이션 컨테이너 기반 애플리케이션을 구동시키는 노드 애플리케이션이 사용할 수 있는 리소스 재구동, 업그레이드 및 내결함성에 대한 애플리케이션의 정책 쿠버네티스 오브젝트를 생성하게 되면 쿠버네티스 시스템은 해당 오브젝트가 존재하는지 확인하기 위해 지속적으로 작동한다. 그리고 쿠버네티스 오브젝트는 명세(spec)과 상태(status)를 갖는 객체이다. 여기서 명세는 .. 2021. 11. 24.
[3] 쿠버네티스 고가용성 클러스터 설치 이번 장에서는 고가용성 클러스터를 구성하는 방법애 대해 알아보자. kubeadm으로 설치하며, 여러 개의 컨트롤 플레인 노드를 구성하기 위한 방법에 대한 자료이므로, minikube를 사용하고 있거나, 여러 개의 컨트롤 플레인 노드를 구성할 필요가 없으면 스킵해도 좋다. 안타깝게도 고가용성 클러스터 방식으로 설치하지 않은(단일 컨트롤플레인 노드로 구성된 클러스터) 클러스터는 허물고 다시 생성해야 할 것이다. (만약 이게 아니라면 방법 알려주시면 감사하겠습니다..) 고가용성 클러스터 종류 고가용성 쿠버네티스 클러스터를 구성하는 방법은 두 가지가 있다. 이번 글에서 설치 방법은 stack형 만을 다룰 것이다. Stack형 컨트롤 플레인 노드: etcd 멤버와 컨트롤 플레인 노드가 같이 위치해있는 구조로 Ex.. 2021. 11. 20.
[1] 쿠버네티스 소개 쿠버네티스 쿠버네티스는 구글에서 만든 컨테이너 오케스트레이션 오픈소스 플랫폼으로, 분산된 여러 서버에 여러 컨테이너 애플리케이션을 쉽게 배포하고 관리할 수 있도록 하는 환경을 만들기 위해 쿠버네티스를 사용한다. 그럼 쿠버네티스에서는 어떻게 분산된 여러 서버에 컨테이너 애플리케이션을 배포하고 관리할까? 클러스터 쿠버네티스는 컨테이너 애플리케이션을 배포할 여러 서버들을 하나의 클러스터로써 관리한다. 쿠버네티스에서는 클러스터로 묶은 서버들을 노드라고 부른다. 그리고 노드의 종류로는 컨트롤 플레인 노드와 워커 노드가 있다. 워커 노드 는 실제로 쿠버네티스에 배포된 애플리케이션이 구동되는 노드이고, 컨트롤 플레인 노드는 워커노드와 컨테이너 애플리케이션 등 쿠버네티스 전체를 관리하는 역할을 한다. 그리고 각 노드에.. 2021. 11. 20.
728x90