Jay's Cookbook
Menu
  • Tags
  • Categories
  • Projects
Computer Science
OS
Network
Data Structure
Algorithm
Language
Code Architecture
Python
Javascript
Typescript
Java
Backend
Backend Theory
TypeORM
Node.js
NestJS
FastAPI
Frontend
HTML/CSS
React
Next.js
Data Engineering
DE Theory
MySQL
MongoDB
Elastic
Redis
Kafka
Spark
Airflow
AI
Basic
Pytorch
NLP
Computer Vision
Data Analytics
Statistics
Pandas
Matplotlib
DevOps
Git
Docker
Kubernetes
AWS
Kubernetes Series [Part1]: Kubernetes 설치
devops
kubernetes

Kubernetes Series [Part1]: Kubernetes 설치

Jay Kim
Jay Kim 01 Jan 2022
Kubernetes Series [Part0]: Kubernetes란 무엇인가 Kubernetes Series [Part2]: Kubernetes 기본 명령어

Table of Contents

  • 로컬환경
    • 미니큐브(minikube)
    • Docker Desktop
    • kind(Kubernetes in Docker)
  • 클라우드환경
    • GKE(Google Kubernetes Engine)
    • EKS(Elastic Kubernetes Service)
  • 참고자료

로컬환경

쿠버네티스는 여러 플랫폼 환경에서 클러스터를 구성하여 사용할 수 있습니다. 로컬 쿠버네티스는 별다른 비용 발생 없이 간단하게 클러스터를 구축해 테스트해 볼 수 있어서 테스트, 개발 환경에 적합합니다.

미니큐브(minikube)

미니큐브는 물리 머신에 로컬 쿠버네티스를 쉽게 구축하고 실행할 수 있는 도구입니다. 실행되는 쿠버네티스는 단일 노드 구성이기 때문에 여러 대의 구성이 필요한 쿠버네티스 기능은 사용할 수 없습니다. 또한 미니큐브는 로컬 가상 머신 위에 쿠버네티스를 설치하기 때문에 하이퍼바이저(Docer, Hyperkit, VirtualBox, ..)가 필요합니다. 제가 현재 사용하고 있는 맥 환경에서는 기본적으로 하이퍼킷이 설치되어 있습니다. 하지만 m1칩의 경우에는 아직 하이퍼킷을 지원하지 않기 때문에 먼저 도커를 설치, 실행한 후 미니큐브를 실행하셔야 합니다.

brew install minikube

minikube version
# minikube version: v1.25.1

minikube start --driver=docker # --kubernetes-version 옵션으로 버전 선택 가능
--------------------------------------------------------------------------------
😄  Darwin 12.1 (arm64) 의 minikube v1.25.1
✨  유저 환경 설정 정보에 기반하여 docker 드라이버를 사용하는 중
👍  minikube 클러스터의 minikube 컨트롤 플레인 노드를 시작하는 중
🚜  베이스 이미지를 다운받는 중 ...
💾  쿠버네티스 v1.23.1 을 다운로드 중 ...
    > preloaded-images-k8s-v16-v1...: 417.88 MiB / 417.88 MiB  100.00% 9.58 MiB
    > gcr.io/k8s-minikube/kicbase: 343.02 MiB / 343.02 MiB  100.00% 3.90 MiB p/
🔥  Creating docker container (CPUs=2, Memory=7903MB) ...
🐳  쿠버네티스 v1.23.1 을 Docker 20.10.12 런타임으로 설치하는 중
    ▪ kubelet.housekeeping-interval=5m
    ▪ 인증서 및 키를 생성하는 중 ...
    ▪ 컨트롤 플레인이 부팅...
    ▪ RBAC 규칙을 구성하는 중 ...
🔎  Kubernetes 구성 요소를 확인...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  애드온 활성화 : storage-provisioner, default-storageclass
🏄  끝났습니다! kubectl이 "minikube" 클러스터와 "default" 네임스페이스를 기본적으로 사용하도록 구성되었습니다.

이제 도커로 띄운 가상머신 위에서 쿠버네티스가 돌아가고 있습니다. 한 번 확인해보겠습니다.

minikube status
--------------------
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

minikube ip
# 192.168.49.2

정지하고 삭제하는 명령어도 간단합니다.

minikube stop

minikube delete

Docker Desktop

Docker Desktop은 도커를 맥/윈도우에서 사용하기 위한 목적으로 만들어졌습니다. 그리고 Docker Desktop 버전 18.06.0부터는 쿠버네티스도 사용할 수 있도록 지원하고 있습니다. 사용 방법은 간단합니다. Docker Desktop을 설치, 실행한 뒤 Enable Kubernetes 목록을 클릭해줍니다.

(쿠버네티스를 Docker Desktop으로 실행할 때는 도커에서 제공하는 가상 머신위에 쿠버네티스 클러스터를 구성하는 것 같다. 그래서 클러스터 외부에서 쿠버네티스에 접속하려 할 때, 먼저 도커의 가상 머신 안으로 엔드포인트로 접근해야 하는데 이를 도커에서 localhost로 접근하도록 해준다. 그래서 별도로 도커 가상머신의 IP주소를 알려고 할 필요가 없다. 뇌피셜)

kind(Kubernetes in Docker)

minikube와 Docker Desktop은 단일 노드로 구성된 쿠버네티스였다면, kind는 도커 컨테이너를 여러 개 띄워서 컨테이너 각각을 노드로 사용함으로써 멀티 노드 클러스터를 구축할 수 있습니다.
(kind 공식문서 참고)

brew install kind

kind version
--------------------
kind v0.11.1 go1.17.2 darwin/arm64

잘 설치가 되었습니다. 이제 kind를 이용해 쿠버네티스에서 마스터와 워커 노드 역할을 하는 노드를 각각 3개씩 띄워 다음과 같이 멀티 노드 클러스터를 구축해보겠습니다.

(실행 결과 리소스 부족으로 kindcluster-worker2를 만들다가 오류가)

# kind로 클러스터 구축을 위한 kind.yaml
apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
  image: kindest/node:v1.23.1
- role: control-plane
  image: kindest/node:v1.23.1
- role: control-plane
  image: kindest/node:v1.23.1
- role: worker
  image: kindest/node:v1.23.1
- role: worker
  image: kindest/node:v1.23.1
- role: worker
  image: kindest/node:v1.23.1
kind create cluster --config kind.yaml --name kindcluster
----------------------------------------------------------------------
Creating cluster "kindcluster" ...
 ✓ Ensuring node image (kindest/node:v1.23.1) 🖼
 ✓ Preparing nodes 📦 📦 📦 📦 📦 📦
 ✓ Configuring the external load balancer ⚖️
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✗ Joining worker nodes 🚜 

실행 결과 리소스 부족으로 kindcluster-worker2를 만들다가 오류가 발생하여 마스터의 서버는 1개, 워커는 2개로 다시 구성해 실행해 보았습니다.

apiVersion: kind.x-k8s.io/v1alpha4
kind: Cluster
nodes:
- role: control-plane
  image: kindest/node:v1.23.1
- role: worker
  image: kindest/node:v1.23.1
- role: worker
  image: kindest/node:v1.23.1
kind create cluster --config kind.yaml --name kindcluster
----------------------------------------------------------------------
Creating cluster "kindcluster" ...
 ✓ Ensuring node image (kindest/node:v1.23.1) 🖼
 ✓ Preparing nodes 📦 📦 📦
 ✓ Writing configuration 📜
 ✓ Starting control-plane 🕹️
 ✓ Installing CNI 🔌
 ✓ Installing StorageClass 💾
 ✓ Joining worker nodes 🚜
Set kubectl context to "kind-kindcluster"
You can now use your cluster with:

kubectl cluster-info --context kind-kindcluster

Have a nice day! 👋

클러스터가 성공적으로 구축되었습니다.
쿠버네티스에서 실행중인 노드를 확인해보겠습니다.

kubectl get nodes
----------------------------------------------------------------------------
NAME                        STATUS   ROLES                  AGE   VERSION
kindcluster-control-plane   Ready    control-plane,master   58s   v1.23.1
kindcluster-worker          Ready    <none>                 25s   v1.23.1
kindcluster-worker2         Ready    <none>                 25s   v1.23.1

클러스터는 다음 명령어로 삭제하시면 됩니다.

kind delete cluster --name kindcluster
------------------------------------------
Deleting cluster "kindcluster" ...

클라우드환경

GKE(Google Kubernetes Engine)

  • 클러스터 생성하기

  • gcloud (Google SDK)설치 프로그램 다운로드
    • https://cloud.google.com/sdk/docs/install?hl=ko 접속
    • tar -xzf google-cloud-cli-402.0.0-darwin-arm.tar.gz
    • ./google-cloud-sdk/install.sh
    • ./google-cloud-sdk/bin/gcloud init
    • source ~/.zshrc
  • 나의 GKE에 관한 정보를 ~/.kube/config 파일에 저장 => kubectl 명령어를 전달할 쿠버네티스 클러스터 설정
    • gcloud components install gke-gcloud-auth-plugin
  • 클러스터에 연결
    • gcloud container clusters get-credentials my-cluster --zone us-central1-a --project second-lodge-364202
  • 연결 테스트
    • kubectl get pods
  • 노드 수 줄이기 (사실상 GKE 종료하는 방법)
    • gcloud container clusters resize my-cluster --num-nodes=0 --zone us-central1-a

EKS(Elastic Kubernetes Service)

참고자료

  • 쿠버네티스 완벽 가이드 책
  • subicura님의 kubenetes안내서
Kubernetes Series [Part0]: Kubernetes란 무엇인가 Kubernetes Series [Part2]: Kubernetes 기본 명령어

You may also like

See all kubernetes
01 Feb 2022 Kubernetes Series [Part18]: Kafka on Kubernetes
devops
kubernetes

Kubernetes Series [Part18]: Kafka on Kubernetes

01 Feb 2022 Kubernetes Series [Part17]: Spark on Kubernetes
devops
kubernetes

Kubernetes Series [Part17]: Spark on Kubernetes

01 Feb 2022 Kubernetes Series [Part16]: MongoDB on Kubernetes
devops
kubernetes

Kubernetes Series [Part16]: MongoDB on Kubernetes

Jay Kim

Jay Kim

Web development, data engineering for human for the Earth. I share posts, free resources and inspiration.

Rest
Lifestyle
Hobby
Hobby
Hobby
Hobby
2025 © Jay's Cookbook. Crafted & Designed by Artem Sheludko.