미니큐브

- 물리 머신에 로컬 쿠버테니스를 쉽게 구축하기 위한 도구
- 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 테스트용으로 좋을듯.
-
플레이그라운드는 웹 화면에서 쿠버네티스를 손쉽게 테스트할 수 있으므로 매우 편리
-
최대 다섯 대의 인스턴스를 기동할 수 있고 화면에 표시되는 순서대로 큐브어드민을 사용하여 쿠버네티스 클러스터를 구축함으로써 사용
- 생략한건 많았지만 전체적으로
- 쿠버네티스의 여러 환경을 설명했으며, 크게 ‘로컬 쿠버네티스’, ‘쿠버네티스 구축 도구’, ‘관리형 쿠버네티스 서비스’ 방법이 있었다.
-
로컬 쿠버네티스: 물리 머신 한 대에 구축하여 사용
-
쿠버네티스 구축 도구: 도구를 사용하여 온프레미스/클라우드에 클러스터를 구축하여 사용
-
관리형 쿠버네티스 서비스: 퍼블릭 클라우드의 관리형 서비스로 제공하는 클러스터 사용