본문 바로가기

컨테이너/Kubernetes

ubuntu에 k3s 마스터 노드 설치 쉽고 간단하게

ubuntu에 k3s 마스터 노드 설치 방법

- OS 환경 : ubuntu 22.04

 

 

k3s란?

- 간단하고 쉽게 kubernetes를 운영하기 위해 컨테이너 관련 기술을 주로 개발하는 Rancher Labs에서 만든 kubernetes의 또다른 버전

 

 

 

k3s 특징 - kubernetes(k8s)와의 차이

  • 경량화
    - k3s는 k8s에 비해 외부 클라우드 서비스와의 연동 기능을 최소한도로 줄이고 고가용성(HA) 배포를 위해 기본으로 사용하던 etcd의존성을 없애고 sqlite를 기본값으로 사용
    - Docker와 같은 의존성을 모두 삭제하고 containerd와 같은 가벼운 대체제 사용
    - 기존 k8s에서 지원하는 과거 버전의 API 또한 지원하지 않음
  • 설치가 간단
    - 쉘 스크립트 하나로 대부분의 배포판에서 설치 가능
    - 설치 후 자동으로 systemd 서비스 또한 마들기 때문에 사용자가 신경써야 될 것들이 거의 없음

 

Ubuntu에 k3s 설치

 

# k3s 설치

- k3s는 systemd 또는 openrc 기반 시스템에 서비스로 설치하는 편리한 방법인 설치 스크립트 제공

curl -sfL https://get.k3s.io | sh -

 

- k3s 서비스는 노드 재부팅 후 또는 프로세스가 충돌하거나 종료된 경우 자동으로 다시 시작되도록 구성

- kubectl, crictl, ctr, k3s-killall.sh, k3s-uninstall.sh를 포함한 추가 유틸리티가 설치됨

- kubeconfig 파일은 /etc/rancher/k3s/k3s.yaml에 의해 작성되고 kubectl은 자동으로 이걸 사용

 

 

# k3s.service에 권한 부여

chmod 644 /etc/rancher/k3s/k3s.yaml

 

 

# k3s.service 상태 확인

systemctl status k3s.service

 

 

k3s 마스터 노드 세팅

- 마스터 노드에 다음과 같은 포트가 열려있어야함

더보기

프로토콜 / 포트 범위 / 목적

  • TCP / 6443 / API 서버
  • TCP / 2379 - 2380 / etcd 서버 client API
  • TCP / 10250 / kubelet API
  • TCP / 10251 / kube-scheduler
  • TCP / 30000 - 32767 / nodePort services

 

 

# 마스터 통신을 위한 설정

 

mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown -R $(id -u):$(id -g) ~/.kube
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
source ~/.bashrc

- 만약에 마스터 통신을 위한 설정을 하지 않으면 kubectl get nodes 명령을 했을 때,

Unable to connect to the server: x509: certificate signed by unknown authority 에러가 발생하게 된다.

- 마스터 통신 설정 후에 kubectl get nodes를 하면 정상적으로 확인이 됨

ubuntu에 k3s 마스터 노드 설치 완료! ROLES에 master라고 표시되고 상태(STATUS)가 Ready인 것을 확인할 수 있음

 

 

 

# 설치 확인

 

kubectl cluster-info

 

 

 

k3s Node Token값 / Master id 확인

 

- k3s 클러스터에 워커 노드를 추가하기 위해 마스터 노드에서 NODE_TOKEN값과 마스터 노드의 IP인 MASTER_IP 값을 확인

 

# 마스터 노드 토큰 확인

NODE_TOKEN=$(sudo cat /var/lib/rancher/k3s/server/node-token)
echo $NODE_TOKEN

# 마스터 노드 IP 확인

MASTER_IP=$(kubectl get node [master node의 NAME] -ojsonpath="{.status.addresses[0].address}")
echo $MASTER_IP

 

 

 

6443 포트가 안열려 있어서 에러가 뜨는 경우 ubuntu에 6443 포트 open

 

- ubuntu에서 기본적으로 제공하는 방화벽은 UFW(Ubuntu Firewall) 이다.

- 기본적으로 ufw는 비활성화(inactive)가 되어 있음

- ufw를 활성화 해준다.

ufw enable

 

 

# 6443 포트를 오픈해준다.

sudo ufw allow 6443/tcp

 

 

# 다시 ufw 상태를 확인해보면 active상태임을 확인할 수 있음

 sudo ufw status verbose