지돌이의 블로그 입니다!

Full guide는 아니구... 단순히.. 방법만...

 

microk8s.enable helm 명령을 실행 하면 실제로는 /snap/microk8s/xxxx/actions/enable.helm.sh 가 실행된다.

 

문제는 /snap/microk8s/xxxx 가 그냥 디렉터리가 아니라 설치이미지가 read-only 으로 마운트된 디렉터리라 수정이 불가능하단 것이다.

 

처음에는 microk8s의 systemd mount관련 파일을 수정해서 해당 위치를 다른 디렉터리로 bind하고.. 참 별걸 다했었는데 이후 생각해보니 더 간단한 방법이 있었다.

 

그냥 해당 파일 하나만 bind 하는 것이다.

 

1. 미리 http://get.helm.sh/helm-$HELM_VERSION-linux-$(arch).tar.gz 을 다운받아 놓고 필요한 대로 수정 (image 경로를 local-registry 로 바꾼다는 등)해서 저장시켜 놓고 (e.g. /tmp/helm.tar.gz)

 

2. /snap/microk8s/xxxx/actions/enable.helm.sh 을 /tmp/enable.helm.sh 같은데 복사한 뒤 해당 파일에서 curl로 helm.tar.gz을 다운받는 대신에 /tmp/helm.tar.gz을 이용하도록 수정하고

 

3. chmod +x /tmp/enable.helm.sh 권한주는거 잊지 마시구..^^

 

4. mount -o bind /tmp/enable.helm.sh /snap/microk8s/xxxx/actions/enable.helm.sh

으로 해당 파일을 새로운 파일로 bind시켜준다.

 

이렇게 하면 microk8s.enable helm 을 하면 /tmp/enable.helm.sh 이 먹게 된다.

 

 

microk8s을 offline으로 설치하는 것은 참 복잡하다..

 

1. $ snap download microk8s

명령으로 microk8s 설치 파일을 미리 다운받아 놓고

2. 필요한 기본 이미지(pause, coredns, tiller, registry 등)들을 이미 다운받아 놓고 (ctr image pull => ctr image export)

# snap ack microk8s.assets

# snap install microk8s.snap

으로 microk8s을 설치한 뒤 다시 이미지를 임포트한다. (ctr image import)

3. 필요한 것들을 microk8s.enable 으로 설치하고 (deployment등은 이미 microk8s내에 존재해서 인터넷 연결이 불필요하지만 docker 이미지는 없기 때문에 필요한건 미리 import 해놓아야 한다.)

4. 쓰면 된다... :)

 

* 참고

필요한 이미지를 export 하기 위해서 리스트를 볼 때
$ sudo ctr -a /var/snap/microk8s/common/run/containerd.sock -n k8s.io images ls
이렇게 볼 수 있긴 하지만 이유는 모르겠으나 이러면 누락된게 생긴다.

위 방법을 통해 리스트를 1차로 뽑고 (아래 방법에서는 pause등이 나오지 않기 때문에 위 방법을 먼저 써야 한다.)

$ microk8s.kubectl get pods --all-namespaces -o yaml | grep "image:" | cut -d':' -f 2 | cut -c2- | uniq

이렇게 보면 실제 pod에서 쓰는 이미지 목록을 얻을 수 있다!

 

Comment +0