본문 바로가기

IT Tools/k8s & Docker

[K3S] Lightweight Kubernetes인 K3S 설치 및 클러스터 세팅

K3S?

k3s 는 경량화된 쿠버네티스로(Lightweight Kubernetes) 으로, 기본적인 Kubernetes의 기능이 제공되는 자원이 한정된 edge 환경에 매우 적합한 프로그램입니다. 라즈배리파이와 같은 아주 작은 임베디드 기기에도 충분히 잘 돌아가게 최적화가 되어 있다고 합니다.
따라서, 저는 이 K3S를 이용해서 Local 환경에서 Cluster를 구성하는 방법을 작성해보려고 합니다.

 

k3s 의 대략적 구성은 다음과 같습니다.

k3s, how it works

 

아래에는 K3S 홈페이지 링크 입니다. 더 자세한 설명을 원하시면 다음 링크를 따라가시면 됩니다.

https://k3s.io/

 

K3s: Lightweight Kubernetes

We are a Cloud Native Computing Foundation sandbox project.

k3s.io

 


For k3s Server

K3S Server 는 Kubernetes에서의 master 와 같은 역할을 합니다. 
클러스터를 관리하고, 컨테이너들의 스케줄링 및 모니터링 등등의 역할을 합니다.

본 설치 환경에서는 K3S server 와 이에 묶일 나머지 K3S Agent들이 같은 네트워크 상에 있어야 합니다.
이번 환경에서는 각 기기들이 같은 Wifi 에 연결되어 있다고 생각하고 명령을 수행할 것 입니다.

일단 K3S server 역할이 될 host에서 터미널을 열어준 뒤 다음 명령을 실행하여 
다른 노드들과 같이 연결된 network interface를 찾고 그 interface의 ip 주소를 찾습니다.

$ ifconfig

현재 노드들은 wlan0 이라는 network interface에 각각 ip를 할당받은 상태 입니다.


후에 다음 명령을 실행하여 k3s를 설치합니다.

$ curl -sfL https://get.k3s.io | sh -s - --docker --node-ip {NODE IP} \
--advertise-address {NODE IP} --flannel-iface {INTERFACE} \
--node-name master --write-kubeconfig-mode 644

$ curl -sfL https://get.k3s.io | sh -s - --docker --node-ip 172.30.226.60 --
advertise-address 172.30.226.60 --flannel-iface wlan --node-name master

node-ip 와 advertise-address 라는 곳에 현재 server node에 할당된 ip 주소, --flannel-iface 에 현재 k3s에 적용할 네트워크 인터페이스 이름, 마지막으로 --node-name 에 현재 노드의 이름을 지정해주었습니다.

설치 후에 다음과 같은 작업을 해주어서 kubectl 이라는 명령어를 sudo 와 k3s 라는 추가 명령어 없이 사용 가능 하도록 합니다.
ex) 원래는 $ sudo k3s kubectl ~~ 로 k3s 명령을 수행하는데 $ kubectl ~~ 만 입력하면 되도록

# use command of k3s without sudo
$ sudo chmod -R 777 /etc/rancher/k3s/k3s.yaml
# use command of k3s without k3s and use python k8s client API
$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

그리고 server의 공개키를 조회합니다. 조회 하면 엄청나게 긴 문자가 나타날 것 입니다.

$ sudo cat /var/lib/rancher/k3s/server/node-token
K10ba77d7f23~~~~생략~~~~f4830b6::server:162232eb245ee11f

For K3S Agent


이제 실제 컨테이너들이 주로 배포될 Agent 노드의 설정 방법입니다.
각 agent 터미널에서
아까 조회한 server노드의 ip 주소와 공개키를 다음 명령어 처럼 활용하여 k3s를 설치하면 됩니다.

 

# agent (172.30.77.241)
$ curl -sfL https://get.k3s.io | K3S_URL=https://172.30.226.60:6443
K3S_TOKEN=K10ba77d7f23~~~~생략~~~~f4830b6::server:162232eb245ee11f sh -s - --docker --flannel-iface
wlan0 --node-ip 172.30.77.241 --node-name agent1

k3s_url 에 server 의 ip 주소와 k3s가 실행된 port 번호 (기본적으로 6443입니다.) 로 url을 입력하고, 
K3S_TOKEN 에는 아까 조회한 server 공개키
flannel-iface 에는 서버와 같이 연결된 네트워크 인터페이스 이름

node-ip 에는 그 interface에서 할당된 해당 노드 ip 주소

node-name 에는 클러스터에서 나타날 노드의 이름을 적어주면 됩니다.

이제 이렇게 실행이 끝나고
server node 터미널에서
다음 명령어를 실행하면 연결된 node 들이 리스트로 나타나는 것을 확인할 수 있습니다.

$ kubectl get nodes

 

반응형