MicroK8s는 Kubernetes 배포를 쉽게 할 수 있도록 설계된 경량 Kubernetes 배포 도구입니다.
K3s와 함께 가벼우면서도 Production 환경에 적합한 Kubernetes 배포 도구로 사용됩니다.

여러 가지 Add-on을 통해 다양한 기능을 쉽게 설정할 수 있다는 것이 장점입니다.
다만 Kubernetes의 구성 요소와 비슷한 역할을 하면서도 동작 방식이나 이름이 다르고, 업데이트와 지원이 잘 되지 않는 편이며, 이로 인해 디버깅과 이슈 해결이 쉽지 않을 수 있습니다.

Known Issues

dqlite 정합성 문제

VM 재기동 시 MicroK8s가 제대로 기동되지 않거나 노드 연결이 안 되는 현상이 발생할 수 있습니다.

  • 원인
    • 다중 노드의 경우 VM이 한꺼번에 종료되면서 Lost quorum이 발생하고 dqlite 정합성이 깨짐12
    • microk8s stop 명령어 없이 OS 업데이트/강제 종료 등 예기치 않은 종료로 데이터 손상
  • 해결
    • 각 노드의 MicroK8s와 문제가 되는 Add-on을 순차적으로 재시작합니다.
    • 일부 파일의 경우 손상된 파일을 삭제하거나, 빈 파일로 초기화가 필요할 수 있습니다.
    • ctr을 통해 직접 프로세스에 접근하여 어느 정도 백업을 할 수도 있습니다.
  • 예방: 각 노드를 순차적으로 종료하거나, VM 종료/시작 전후로 microk8s stop/start 실행

네트워크 문제

MicroK8s는 여러 가지 잠재적인 네트워크 문제를 일으킬 수 있습니다. 몇몇 문제는 Known Issue임에도 수정되지 않는 경우도 있습니다.

원인설명
iptables-legacy vs nftables 호환MicroK8s는 iptables-legacy, 최근 OS는 nftables를 사용하므로 호환성 문제가 있을 수 있습니다.
IP table 미제거중지/제거 시점에서 IP table이 제거되지 않을 수 있습니다.
Calico Pod CIDR 충돌CIDR 충돌로 인해 Calico가 제대로 작동하지 않을 수 있습니다.
방화벽 차단firewalld/UFW 등의 방화벽이 Calico 인터페이스 차단 가능
재부팅 후 nf_conntrack 미로드모듈 미로드 시 kubelite(kube-proxy)가 procfs의 conntrack 파라미터를 못 읽어 crash → 노드 간 통신 불가. modprobe nf_conntrack + /etc/modules-load.d/ 등록으로 부팅 시 자동 로드. 구버전 이슈로, 패치 이후 버전은 kubelite 기동 전 모듈을 직접 로드34

기타

  • MicroK8s는 디스크 용량이 부족해지면 현재 실행 중인 이미지를 제외한 이미지를 지워 용량을 확보합니다. (일회성 시스템 이미지도 포함)
  • microk8s ctr image import는 실행한 노드에만 이미지를 가져옵니다.
  • MicroK8s의 Add-on과 명령어들은 스크립트 형태로 작성된 경우가 많고 GitHub에서 확인 가능합니다.
  • NTP 서버 설정이 제대로 되지 않았다면 노드 간 시간이 동기화되지 않아 앱에서 관련된 문제가 생길 수 있습니다. AWS, Azure 등의 클라우드 서비스에는 NTP 서버가 기본으로 설정되어 있기 때문에 발생하지 않는 문제입니다.

Footnotes

  1. https://discuss.kubernetes.io/t/recovery-of-ha-microk8s-clusters/12931

  2. https://microk8s.io/docs/restore-quorum

  3. https://github.com/canonical/microk8s/issues/4462

  4. https://github.com/canonical/microk8s/pull/4705