1. MicroK8s 설치
- Ubuntu 환경에서 MicroK8s 설치
# 최신 버전의 MicroK8s 설치
$ sudo snap install microk8s --classic
# 특정 버전의 MicroK8s 설치
$ sudo snap install microk8s --classic --channel=1.27
1.1. 관리자 권한 그룹에 추가
- MicroK8s 설치 후, 사용자가 MicroK8s를 사용하기 위해서는 관리자 권한 그룹에 추가해야 함
# 관리자 그룹에 MicroK8s 추가
sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
# 새로운 그룹 적용
$ newgrp microk8s
1.2. MicroK8s 시작 및 중지
- MicroK8s 시작과 중지 방법
# MicroK8s 시작
$ microk8s start
# MicroK8s 중지
$ microk8s stop
1.3. MicroK8s with Kubectl
- MicroK8s 는 kubectl 을 자체 패키지로 제공하고 있음
# MicroK8s 에서 제공하는 kubectl 명령어
$ microk8s kubectl get all --all-namespaces
- kubectl 을 사용하기 위해서는 MicroK8s 의 config 내용을 .kube/config 에 복사해야 함
# MicroK8s 의 config 내용을 .kube/config 에 복사
$ microk8s config > ~/.kube/config
# kubectl 명령어 실행
$ kubectl get all --all-namespaces
2. MicroK8s add Node (Worker Node)
- MicroK8s 에서는 add-node 명령어를 통해 Worker Node 를 추가할 수 있음
- Master Node 에서 add-node 명령어를 실행하면, Worker Node 에서 실행할 수 있는 명령어를 제공함
# MicroK8s 에서 제공하는 add-node 명령어
$ microk8s add-node
# MicroK8s 에서 제공하는 add-node 명령어의 결과
From the node you wish to join to this cluster, run the following:
microk8s join <MASTER_IP>:25000/<TOKEN>
Use the '--worker' flag to join a node as a worker not running the control plane, eg:
microk8s join <MASTER_IP>:25000/<TOKEN> --worker
If the node you are adding is not reachable through the default interface you can use one of the following:
microk8s join <MASTER_IP>:25000/<TOKEN>
microk8s join 10.0.0.1:25000/<TOKEN>
microk8s join 172.17.0.1:25000/<TOKEN>
2.1. MicroK8s Worker Node join
- Master Node 에서 획득한 add-node 명령어를 Worker Node 에서 실행하면, Worker Node 가 Master Node 에 join 됨
# worker node join
$ microk8s join <MASTER_IP>:25000/<TOKEN> --worker
2.1.1. Worker Node Host 정보 추가
- Master Node 로 join 을 위해 Worker Node 의 Host 정보를 추가해야 함
# hosts 파일 수정
$ sudo vi /etc/hosts
# Worker Node 의 Host IP 와 Host Name 추가
<WORKER_IP> worker
2.2. Master Node 에서 Worker Node 추가 확인
- Master Node 에서 Worker Node 가 정상적으로 추가되었는지 확인
# Master Node 에서 Worker Node 확인
$ microk8s kubectl get nodes
NAME STATUS ROLES AGE VERSION
master Ready <none> 10d v1.27.4
worker Ready <none> 10d v1.27.4
3. Multus 에드온 설치
Multus 사용을 위해 Multus 에드온을 설치해야 함
3.1. Multus 에드온 설치
- Multus 에드온 설치를 위해 MicroK8s 에서 제공하는 community 에드온을 활성화 해야 함
- community 에드온을 활성화 후 Multus 에드온 설치
# Multus Community 에드온 활성화
$ microk8s enable community
# Multus 에드온 설치
$ microk8s enable multus
3.2. Multus 에드온 확인
- Multus 에드온이 정상적으로 설치되었는지 확인
# Multus 에드온 확인
$ microk8s kubectl get pods -n kube-system --selector=app=multus
NAME READY STATUS RESTARTS AGE
kube-multus-ds-bdqcq 1/1 Running 0 3d22h
kube-multus-ds-8mq2j 1/1 Running 1 (3d20h ago) 3d22h
4. ROS2 통신을 위한 Multus 설정
- Multus 사용을 위한 Network 생성
- 사용할 Network IP 확인 후 Multus 설정
apiVersion: "k8s.cni.cncf.io/v1"
kind: NetworkAttachmentDefinition
metadata:
name: my-network
namespace: my-namespace
spec:
config: '{
"cniVersion": "0.3.0",
"name": "my-network",
"type": "macvlan",
"master": "eth0",
"mode": "bridge",
"isDefaultgateway": true,
"ipam": {
"type": "host-local",
"ranges": [ [ {
"subnet": "192.168.0.0/16",
"rangeStart": "192.168.1.160",
"rangeEnd": "192.168.1.180",
"gateway": "192.168.70.1"
} ] ] }
}'
4.1. ip route 확인
- Multus 에서 사용할 Network IP 확인
# ip route 확인
$ ip route
default via 192.168.70.1 dev eth0 proto dhcp metric 100
10.1.102.64/26 via 10.1.102.64 dev vxlan.calico onlink
blackhole 10.1.235.0/26 proto 80
10.1.235.13 dev cali3beb9936836 scope link
10.1.235.15 dev cali7701ec796a3 scope link
... 생략 ...
169.254.0.0/16 dev eth0 scope link metric 1000
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.70.0/24 dev eth0 proto kernel scope link src 192.168.70.15 metric 100
4.2. Multus Network 사용 설정
- Deployment 에 Multus Network 사용 설정 예시
apiVersion: apps/v1
kind: Deployment
metadata:
name: ros-talker-deployment
namespace: my-namespace
labels:
app: ros-talker
spec:
selector:
matchLabels:
app: ros-talker
template:
metadata:
labels:
app: ros-talker
annotations:
k8s.v1.cni.cncf.io/networks: my-network # 생성된 Multus Network 사용 설정
spec:
... 생략 ...
4.3. Multus Network 사용 확인
- Multus Network 사용 설정이 정상적으로 되었는지 확인
# Multus Network 사용 확인
$ microk8s kubectl get describe pod ros-talker-deployment-5f9b9b6d6f-4q9qf -n my-namespace
Name: ros-talker-deployment-69f999bbc4-crtbw
Namespace: default
Priority: 0
Service Account: default
Node: worker-node-1/192.168.0.10
Start Time: Thu, 03 Aug 2023 15:50:42 +0900
Labels: app=ros-talker
pod-template-hash=69f999bbc4
Annotations: cni.projectcalico.org/containerID: 46d80536187192d787e05cae17efd93b5992738d43a8b945bc1f14dbd580a6ff
cni.projectcalico.org/podIP: 10.1.102.106/32
cni.projectcalico.org/podIPs: 10.1.102.106/32
k8s.v1.cni.cncf.io/network-status:
[{
"name": "k8s-pod-network",
"ips": [
"10.1.102.106"
],
"default": true,
"dns": {}
},{
"name": "my-namespace/my-network",
"interface": "net1",
"ips": [
"192.168.1.163"
],
"mac": "8a:e9:bc:15:77:82",
"dns": {}
}]
k8s.v1.cni.cncf.io/networks: my-network
k8s.v1.cni.cncf.io/networks-status:
[{
"name": "k8s-pod-network",
"ips": [
"10.1.102.106"
],
"default": true,
"dns": {}
},{
"name": "my-namespace/my-network",
"interface": "net1",
"ips": [
"192.168.1.163"
],
"mac": "8a:e9:bc:15:77:82",
"dns": {}
}]
Status: Running
... 생략 ...