쿠버네티스 환경

존스노우·2024년 8월 14일
0

미니큐브

  • 물리 머신에 로컬 쿠버테니스를 쉽게 구축하기 위한 도구
  • brew install minikube 를 설치해 주자
  • 윈도우환경이라 미니큐브로 책에나온데로 설치하려했지만 실패 ㅠㅠ

docker

  • 배포가 오래걸린다.. 설치 성공?

  • 윈도우에 설치 성공!

  • 로컬 머신에 기동 중인 도커 호스트를 쿠버네티스 노드로 인식

  • 쿠버네티스 클러스터 기능을 담당하고 있는 구성 요소(component) 그룹도 컨테이너로 기동된다.
  • 쿠버네티스를 활성화할 때 Show system containers (advanced)도 활성화하면 다음과 같이 docker container ls 명령어로 구성 요소를 확인할 수 있다.

쿠버네티스의 주요 구성 요소들을 설명

  • storage-provisioner: 스토리지 프로비저닝을 담당합니다.
  • kube-vpnkit-forwarder: Docker Desktop 환경에서 네트워킹을 관리합니다.
  • coredns (2개): 클러스터 내 DNS 서비스를 제공합니다.
  • kube-proxy: 네트워크 프록시로, 서비스 추상화를 구현합니다.
  • kube-controller-manager: 다양한 컨트롤러를 실행하여 클러스터의 상태를 관리합니다.
  • kube-scheduler: 새로운 파드를 적절한 노드에 할당합니다.
  • etcd: 클러스터의 모든 데이터를 저장하는 분산 키-값 저장소입니다.
  • kube-apiserver: 쿠버네티스 API 서버로, 클러스터의 중앙 제어 지점 역할을 합니다.
  • 쿠버네티스는 여러 독립적인 컴포넌트로 구성되어 있습니다.
  • 각 컴포넌트는 컨테이너로 실행되며, 특정 기능을 담당합니다.
  • 이러한 구조는 쿠버네티스의 모듈화된 아키텍처를 보여줍니다.
  • Docker Desktop 환경에서도 완전한 쿠버네티스 클러스터를 실행할 수 있습니다.

쿠버네티스 구축 도구

쿠버네티스 서비스 수준 목표(SLO) - SIG-Scalability라는 분과회는 쿠버네티스 확장성을 논의

  • 쿠버네티스는 빠르고 안정적으로 작동해야 함
  • 예를 들어, API 요청의 99%는 1초 내에 응답해야 하고, 새로운 파드는 5초 내에 시작되어야 함

쿠버네티스 클러스터의 크기 제한

  • 하나의 클러스터에는 최대 5,000개의 컴퓨터(노드)를 연결

  • 전체 클러스터에서 최대 150,000개의 컨테이너(파드)를 실행 할 수 있음

  • 한 컴퓨터에서는 보통 110개 정도의 컨테이너를 실행 함

  • 이런 제한은 쿠버네티스가 잘 작동하도록 하기 위한 가이드라인

  • 실제로는 사용하는 환경에 따라 이 숫자가 조금씩 다를 수 있다.

클라우드 vs 직접 설치

  • 클라우드 서비스를 사용하면 많은 부분을 자동으로 관리
  • 직접 설치할 경우, 컴퓨터의 성능을 직접 선택 해야 한다.

큐브 어드민

  • 큐브어드민(kubeadm)은 쿠버네티스의 공식 클러스터 구축 도구

Ubuntu 18.04 환경에서 멀티 노드 쿠버네티스 클러스터를 구성하는 방법

  • apt-transport-https: HTTPS를 통한 패키지 다운로드를 지원합니다.
  • curl: URL을 통해 데이터를 전송하는 도구

쿠버네티스 저장소 등록

  • 구글 클라우드의 패키지 저장소 키를 시스템에 추가합니다.
  • 쿠버네티스 저장소 주소를 sources.list에 추가합니다.

쿠버네티스 관련 패키지 설치

  • kubelet: 각 노드에서 실행되는 기본 쿠버네티스 에이전트입니다.
  • kubeadm: 클러스터를 부트스트랩하는 도구입니다.
  • kubectl: 클러스터를 제어하는 명령줄 도구입니다.
  • docker.io: 컨테이너 런타임입니다.

패키지 버전 고정

  • 설치된 패키지들의 버전을 고정하여 의도치 않은 업그레이드를 방지합니다.

커널 파라미터 설정

  • 브리지 네트워크와 IP 포워딩을 활성화하여 쿠버네티스의 네트워킹 기능을 지원합니다.

추가설명

  • 부트스트랩의 의미:
    "부트스트랩"이라는 용어는 "스스로 시작하다" 또는 "초기 설정을 자동화하다"라는 의미로 사용됩니다. 컴퓨터 과학에서는 시스템이나 프로세스를 자동으로 시작하고 초기화하는 과정을 의미합니다.
  • kubeadm의 역할:
    kubeadm은 쿠버네티스 클러스터를 쉽고 빠르게 설정하는 도구입니다. 구체적으로 다음과 같은 작업을 수행합니다:

마스터 노드 초기화

  • 컨트롤 플레인 컴포넌트(예: API 서버, 컨트롤러 매니저, 스케줄러) 설치 및 구성
  • etcd(클러스터의 데이터 저장소) 설정
  • 보안 인증서 생성 및 배포

워커 노드 조인

  • 새로운 노드를 클러스터에 안전하게 추가

애드온 배포:

네트워크 플러그인, DNS 서버 등의 필수 애드온 설치

kubeadm을 사용하는 이유

  • a) 복잡성 감소: 수동으로 설정하면 복잡하고 오류가 발생하기 쉬운 과정을 자동화합니다.
  • b) 표준화: 일관된 방식으로 클러스터를 구성하여 관리와 문제 해결을 용이하게 합니다.
  • c) 확장성: 클러스터에 새로운 노드를 쉽게 추가할 수 있습니다.
  • d) 업그레이드 지원: 클러스터의 버전 업그레이드를 지원합니다.

실제 사용 예

  • kubeadm init: 마스터 노드를 초기화하고 클러스터를 생성합니다.
  • kubeadm join: 워커 노드를 기존 클러스터에 추가합니다.
  • kubeadm upgrade: 클러스터를 새 버전으로 업그레이드합니다.

명령어 설명:

  • sudo apt update: 패키지 목록을 최신화합니다.
  • sudo apt install: 필요한 패키지를 설치합니다.
  • curl: 웹에서 데이터를 다운로드합니다.
  • sudo tee: 파일에 텍스트를 쓰는 명령어입니다.
  • sudo apt-mark hold: 패키지 버전을 고정합니다.
  • sudo sysctl --system: 시스템 설정을 적용합니다.

쿠버네티스 마스터 구축

마스터 노드 준비하기

  • 먼저, 컴퓨터의 swap 기능을 끕니다. 이는 쿠버네티스가 잘 작동하기 위해 필요
  • 잠깐 끄려면 sudo swapoff -a 명령어를 사용합니다.
  • 계속 꺼두려면 /etc/fstab 파일에서 swap 줄 앞에 #을 붙여 주석 처리합니다.

마스터 노드 설정하기

  • kubeadm init 명령어로 마스터 노드를 시작합니다.
  • 이 때 --kubernetes-version으로 버전을, --pod-network-cidr로 내부 네트워크 범위를 정합니다.
  • 명령어가 성공하면 화면에 중요한 정보들이 나옵니다. 이를 잘 저장해두세요!

마스터 노드에서 추가 설정

  • 화면에 나온 대로 몇 가지 명령어를 실행합니다.
  • 이는 kubectl이라는 도구가 쿠버네티스와 대화할 수 있게 해주는 설정이에요.

워커 노드 추가하기

  • 마스터 노드 설정이 끝나면 워커 노드를 추가하는 명령어가 나옵니다.
  • 이 명령어를 워커 노드로 쓸 다른 컴퓨터에서 실행하면 됩니다.
  • 워커 노드를 여러 개 추가하고 싶다면, 각 컴퓨터에서 이 명령어를 반복해서 실행- 하세요.
  • 여기까지 하면 기본적인 클러스터 구조는 완성
  • 기본적인 쿠버네티스 클러스터가 만들어집니다. 마스터 노드가 전체를 관리하고, 워커 노드들이 실제 일을 하는 구조

플라넬

  • 기본적으로 도커에서 기동한 컨테이너에 할당된 IP 주소는 호스트 외부에서 볼 수 없는 내부 IP(Internal IP) 주소
  • 각 노드에 배포된 컨테이너 간의 통신은 불가능한 상태

쿠버네티스 클러스터의 네트워크 요구사항

  • 여러 노드를 사용하는 쿠버네티스 클러스터에서는 모든 노드의 컨테이너끼리 통신할 수 있어야 해요.
  • 이를 위해 각 호스트의 내부 네트워크를 연결해야 합니다.

플라넬(Flannel)의 역할

  • 플라넬은 이 문제를 해결하는 도구
  • 노드 사이에 가상의 터널(오버레이 네트워크)을 만들어요.
  • 이 터널을 통해 서로 다른 노드의 파드(컨테이너 그룹)끼리 통신할 수 있게 됩니다.

플라넬 설치 방법:

정리

  • 클러스터에서 노드 간 네트워크 통신의 중요성과 이를 해결하는 방법을 소개

퍼블릭 클라우드 관리형 쿠버네티스 서비스

관리형 쿠버네티스 서비스의 장점

  • 퍼블릭 클라우드에서 제공합니다.
  • 영구 볼륨, 로드 밸런서 등을 쉽게 사용할 수 있습니다

GKE(Google Kubernetes Engine)의 특징

  • 다양한 편리한 기능을 제공합니다:
  • 릴리스 채널
  • 노드 자동 업데이트
  • 노드 자동 복구
  • 노드 자동 프로비저닝

GKE의 비용 절감 방법

  • GCE가 노드로 사용됨.
  • 선점형 인스턴스를 사용할 수 있습니다.
  • 24시간 제한이 있지만 저렴합니다.
  • 적절한 설정으로 서비스 중단 없이 사용 가능합니다.
  • 랜덤으로 서서히 노드 교체하는 preemptible-killer 사용 등..

GKE와 Google Cloud Platform(GCP)의 통합

  • 클라우드 로깅과 자동 연계됩니다.
  • HTTP 로드 밸런서, GPU 사용 등이 가능합니다.

노드 풀(NodePool) 기능

  • 노드에 레이블을 붙여 그룹화할 수 있습니다.
  • vCpu 수가 많은 노드 메모리 용량이 많은 노드 같이 머신 성능이 다른 노드를
  • 클러스터에 배치 / 노드 풀로 레이블 부여해 두면 스케줄링 배포시 제약조건 가능
  • 다양한 성능의 노드를 효율적으로 관리할 수 있습니다.

GKE 클러스터 생성 방법

  • Google Cloud SDK 설치가 필요합니다.
  • GUI나 gcloud 명령어로 클러스터를 생성할 수 있습니다.
  • 사용 가능한 쿠버네티스 버전을 확인하고 클러스터를 생성합니다.

GKE 구축


GKE 클러스터 생성 방법

  • GUI나 gcloud 명령어를 사용할 수 있습니다.
  • gcloud 명령어 사용 시 단계:
  • a. 사용 가능한 쿠버네티스 버전 확인
  • b. 클러스터 생성 명령어 실행 (버전, 지역, 노드 수 지정)

주의사항

  • Kubernetes Engine API가 활성화되어 있어야 합니다.
  • 활성화되지 않았다면 에러 메시지의 URL을 통해 활성화할 수 있습니다.

클러스터 접속 설정

  • 인증 정보는 자동으로 ~/.kube/config에 저장됩니다.
  • 필요시 get-credentials 명령어로 다시 가져올 수 있습니다.

클러스터 관리

  • kubectl을 사용하여 관리합니다.
  • 관리자 권한 설정이 필요합니다.

클러스터 삭제

  • gcloud 명령어를 사용하여 삭제할 수 있습니다.

추가 관리 도구

  • 구글 클라우드 콘솔의 대시보드를 사용할 수 있습니다.

이 외

  • AKS , EKS 는 제외 나중에 필요할때 보고

  • 도커에서 제공하는 쿠버네티스 플레이그라운드(playground)24 테스트용으로 좋을듯.

  • 플레이그라운드는 웹 화면에서 쿠버네티스를 손쉽게 테스트할 수 있으므로 매우 편리

  • 최대 다섯 대의 인스턴스를 기동할 수 있고 화면에 표시되는 순서대로 큐브어드민을 사용하여 쿠버네티스 클러스터를 구축함으로써 사용

  • 생략한건 많았지만 전체적으로
  • 쿠버네티스의 여러 환경을 설명했으며, 크게 ‘로컬 쿠버네티스’, ‘쿠버네티스 구축 도구’, ‘관리형 쿠버네티스 서비스’ 방법이 있었다.
  • 로컬 쿠버네티스: 물리 머신 한 대에 구축하여 사용

  • 쿠버네티스 구축 도구: 도구를 사용하여 온프레미스/클라우드에 클러스터를 구축하여 사용

  • 관리형 쿠버네티스 서비스: 퍼블릭 클라우드의 관리형 서비스로 제공하는 클러스터 사용

profile
어제의 나보다 한걸음 더

0개의 댓글