k3s 클러스터 구축 - multipass, m1-mac

문성하·2024년 1월 3일
0

Vanila kubernetes

Kubernetes 개요/구성 기초

MSA등장 -> 컨테이너 기술 등장 -> 컨테이너 오케스트레이션의 등장
monolitic -> MSA로 변화하면서 컨테이너 기술이 등장
여러 서비스를 운영하기 위해 많은 수의 컨테이너를 관리해야하는 번거로움
컨테이너를 한번에 관리할 수 없을까 -> 컨테이너 오케스트레이션 등장
컨테이너 오케스트레이션의 대표적인 kubernetes를 알아보겠습니다.

이름의 유래kubernetes는 k와 s 사이에 8개의 글자가 들어간다고해 k8s라고 줄여쓰기도 합니다.

설명오케스트레이션이라는 이름에서 알 수 있듯이 컨테이너를 관리해주는 도구입니다.

구성쿠버네티스는 클러스터라는 단위로 구성되어 있으며, 클러스터에는마스터노드, 워커노드가 존재합니다. 마스터노드와 워커노드는 클러스터 내에 여러 개가 존재할 수 있으며, 여러 대의 마스터 노드로 구성된 클러스터를 'Multi-Master-Cluster'라고 부릅니다. 보통 3대의 마스터노드로 클러스터를 구성합니다.

세부 구성각각의 노드는 하나의 VM으로 구성하며, 마스터노드(Control Plain)이 워커 노드를 관리하는 방식으로 작동됩니다.

역할마스터 노드는 사용자로부터 요청을 받아 워커노드에게 명령을 전달합니다.워커노드는 마스터 노드로 부터 온 명령을 실질적으로 처리하는 역할을 합니다.

Control Plain 주요 컴포넌트kube-apiserver : apiserver는 사용자로부터 온 쿠버네티스 명령어(Kubectl)을 받아들입니다. 명령이 올바른 명령인지 확인하고 해당 명령을 수행하는 컴포넌트입니다.etcd : key-value 저장소입니다. 노드의 상태와 같은 여러 정보가 저장되어 있습니다.kube-scheduler : 파드를 어느 노드에 배치할지 결정해주는 컴포넌트입니다.kube-controller-manager : 컨트롤러 프로세스를 처리해줍니다.

pod/service/deployment/demonset/volume 기초 가이드

파드 : 쿠버네티스의 작업 단위입니다. 쿠버네티스는 작업을 파드 단위로 구성하며, 파드에는 1개 이상의 컨테이너가 포함됩니다.

서비스 : 쿠버네티스의 서비스는 쿠버네티스 네트워크 단일진입점을 제공합니다.
서비스에 4개의 종류가 있습니다.

ClusterIP: 디폴트 설정으로, 서비스에 클러스터 IP (내부 IP)를 할당한다. 쿠버네티스 클러스터 내에서는 이 서비스에 접근이 가능하지만, 클러스터 외부에서는 외부 IP 를 할당  받지 못했기 때문에, 접근이 불가능합니다.

Load Balancer: 외부 IP를 가지고 있는 LB를 할당시켜줍니다. NodePort와 다르게 클러스터 외부에서 내부로 접속이 가능합니다.

NodePort : 클러스터 IP로만 접근이 가능한것이 아니라, 모든 노드의 IP와 포트를 통해서도 접근이 가능하게 만들어 줍니다.

Deployment : deployment는 컨트롤러의 일종입니다.ReplicaSet : 컨트롤러의 일종으로 replicas 설정을 통해 파드의 개수를 조정합니다. replicas=2라고 지정한다면 해당 파드의 개수를 2개로 보장시켜줍니다.Deployment는 이런 ReplicaSet을 관리하는 컨트롤러입니다.

DaemonSet : 특정 노드 혹은 전체 노드에서 항상 실행시켜야 할 프로세스를 정의할 때 사용합니다. 보통 로그 수집과 같은 역할에 사용합니다.

volume : 쿠버네티스 볼륨도 파드 수준에서 다루기 때문에, 일시적인 속성을 갖습니다. 영구적인 볼륨의 특성을 갖기 위해 PV, PVC라는 개념을 도입했습니다.PV는 관리자 입장에서 정의하는 볼륨입니다. 사용자는 PVC를 통해 PV에 접근해 데이터를 영구적인 스토리지에 저장할 수 있습니다.

kubernetes 사용 - k3s + multipass - (MAC M1)

로컬에서 kubernetes를 이용하기에 어려움이 있습니다.
보통은 kubeadm과 k3s를 사용하곤 합니다. 이를 사용하기 위해 VM을 구성해야하는데, multipass라는 툴을 사용해보겠습니다.
brew install multipass --cask
multipass find를 통해 사용 가능한 이미지를 확인해봅니다.

VM 생성하기.

launch --name <vm 이름> --cpus <할당할 cpu 수> --mem <할당할 memory 수> --disk <할당할 디스크용량> <ubuntu alias>
sudo multipass launch --name master --cpus 1 --mem 1G --disk 5G jammy
sudo multipass launch --name node-1 --cpus 1 --mem 1G --disk 5G jammy
sudo multipass launch --name node-2 --cpus 1 --mem 1G --disk 5G jammy
# multipass find 입력 시 Ubuntu 이미지 버전과 Aliases가 나옵니다. -> jammy = 22.04

sudo multipass list

각 노드에 k3s 설치하기

# multipass exec <vm 이름> -- /bin/bash -c  <설치명령어>
# K3S_KUBECONFIG_MODE="644" 는 k3s installer 에게 kubectl 이 클러스터에 접근하기 위해 사용하는 설정 파일을 생성하도록 합니다.
# 참고로 '--' 는 multipass 명령어와 실제 컨테이너 안에서 실행할 명령어를 구분하기 위해 사용됩니다.
multipass exec master -- /bin/bash -c "curl -sfL <https://get.k3s.io> | K3S_KUBECONFIG_MODE="644" sh -"

# 워커노드들을 같은 클러스터에 포함시키기 위해사 마스터에 저장된 ip 주소와 k3s token 정보를 사용해야합니다.
# 아래 명령어를 입력하셔도 되고 직접 정보를 가져와 사용하셔도 됩니다.
K3S_NODEIP_MASTER="<https://$(multipass> info master | grep "IPv4" | awk -F' ' '{print $2}'):6443"
K3S_TOKEN="$(multipass exec master -- /bin/bash -c "sudo cat /var/lib/rancher/k3s/server/node-token")"

워커노드에 k3s 를 설치합시다.

multipass exec node-1 -- /bin/bash -c "curl -sfL <https://get.k3s.io> | K3S_TOKEN=${K3S_TOKEN} K3S_URL=${K3S_NODEIP_MASTER} sh -"

multipass exec node-2 -- /bin/bash -c "curl -sfL <https://get.k3s.io> | K3S_TOKEN=${K3S_TOKEN} K3S_URL=${K3S_NODEIP_MASTER} sh -"

사용 예제

multipass exec master kubectl get nodes

실습

multipass exec master -- kubectl run web --image=nginx
multipass exec master -- kubectl get po -o wide
multipass exec master -- curl ${pod의 private ip}
#nginx가 정상적으로 나오는지 확인.

0개의 댓글