K3S?
k3s 는 경량화된 쿠버네티스로(Lightweight Kubernetes) 으로, 기본적인 Kubernetes의 기능이 제공되는 자원이 한정된 edge 환경에 매우 적합한 프로그램입니다. 라즈배리파이와 같은 아주 작은 임베디드 기기에도 충분히 잘 돌아가게 최적화가 되어 있다고 합니다.
따라서, 저는 이 K3S를 이용해서 Local 환경에서 Cluster를 구성하는 방법을 작성해보려고 합니다.
k3s 의 대략적 구성은 다음과 같습니다.
아래에는 K3S 홈페이지 링크 입니다. 더 자세한 설명을 원하시면 다음 링크를 따라가시면 됩니다.
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
'IT Tools > k8s & Docker' 카테고리의 다른 글
[Google Coral TPU] Micro SD card 없이 Coral TPU Dev Board 환경 세팅 / 설치 하기 (0) | 2021.03.15 |
---|---|
[Docker] Docker란? Docker 기초 : Hello-world 컨테이너 실행 (0) | 2020.12.18 |