우분투에서 Kubernetes를 테스트 목적으로 사용해 보기 위해서는 minikube도 있지만, 여기서는 우분투가 제공하는 microk8s에 대해 정리해 보았다. 중요한 부분은 공식 가이드를 참고하면 설명이 잘 되어 있다.
이 문서는 우분투 18.04 LTS 데스크탑 버전과 microk8s 1.14.1 버전을 기준으로 작성하였다.
설치하기
단순히 아래 명령어를 치면 설치가 완료된다. (처음부터 Docker나 kubectl을 따로 설치할 필요는 없다.)
sudo snap install microk8s --classic
Kubernetes를 시작하기 위해서는 다음 명령어를 입력한다.
sudo microk8s.start
다음 명령어를 통해 상태 확인 및 문제 여부를 파악한다.
sudo microk8s.status
sudo microk8s.inspect
inspect
를 해보면 경고가 있을 수 있는데 자세한 설명이 나오니 따라 하면 된다.
특히 ip forwarding을 키라고 하는데 설정하지 않으면 Pod 내에서 인터넷도 안 되고 Pod 간 연결도 안 될 수 있다.
sudo iptables -P FORWARD ACCEPT
위 설정은 바로 적용되며 우분투를 재시작해도 유지되게 하려면 /etc/sysctl.conf
파일에서 net.ipv4.ip_forward=1
를 주석 해제한다.
microk8s는 많이 쓰이는 기능들을 애드온 형태로 간단히 활성화/비활성화시킬 수 있도록 준비해 두었다. 먼저 dns 같은 필수 애드온을 활성화하자.
sudo microk8s.enable dns
Dashboard 사용하기
Dashboard를 활성화하기 위해서는 다음 명령어를 입력한다.
sudo microk8s.enable dashboard
Dashboard 서비스의 클러스터 IP를 확인해 보자.
microk8s.kubectl get svc/kubernetes-dashboard -n kube-system
microk8s를 설치한 머신이 로컬 머신이라면(우분투 데스크탑) 클러스터 IP로 직접 붙어볼 수 있다. 브라우저에서 https://<cluster-ip>
형식으로 붙어 보자.
참고로 매번 kubectl
앞에 microk8s.을 붙이고 싶지 않다면 다음과 같이 alias를 생성할 수 있다.
sudo snap alias microk8s.kubectl kubectl
만약 로컬 머신이 아니여서 다른 머신에서 붙어야 하는 상황이라면 간편하게 포트 포워딩 기능을 사용해 보자.
kubectl port-forward -n kube-system svc/kubernetes-dashboard 8443:443 --address 0.0.0.0
위 명령이 실행되는 동안은 다른 머신에서 8443 포트(변경 가능)로 연결 할 수 있다. micok8s를 설치한 머신 주소를 사용해 https://<target-ip>:8443
로 접속해서 Dashboard를 열어 보자.
쿠버네티스의 권한 관리 기능인 RBAC가 꺼진 상태여서 Skip 버튼을 누르고 들어가도 대부분의 작업을 할 수 있다. 하지만 설정 메뉴 페이지등에 들어가고 싶다면 아래 명령어로 토큰을 알아내서 로그인할 수 있다.
kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep default | awk '{print $1}')
Dashboard는 브라우저의 언어 설정에 따라 UI의 언어가 결정되는데 낮은 버전의 경우 한글화가 안 되어 있을 수 있다. 아래 명령어로 대시보드 버전을 높여 보자. (현재 최신 버전은 1.10.1이었다.)
kubectl set image -n kube-system deploy/kubernetes-dashboard kubernetes-dashboard=k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1
최신 버전의 Dashboard에서는 로그인 Skip 기능이 기본으로 꺼져 있으니 위에 적었던 방법으로 Token을 얻어내 로그인 하자.
상시 포트 오픈 및 SSL 설정 등을 하기 위해서는 지난 문서들을 참고하자.
Docker Registry 사용하기
테스트로 사용하기 좋도록 Docker Registry도 애드온으로 포함되어 있어 다음 명령어로 활성화할 수 있다.
sudo microk8s.enable registry
테스트할 Dockerfile을 하나 만들어 보자.
FROM nginx
아래 명령어로 Docker 이미지를 만들고 레지스트리에 등록해 보자.
sudo docker build -t localhost:32000/my-nginx .
sudo docker push localhost:32000/my-nginx
참고로 microk8s 1.14버전에서 dockerd 대신 containerd로 바뀌면서 microk8s.docker
커맨드도 사라졌다. docker를 따로 설치하자.
만약 다른 머신에서 레지스트리에 push를 하고 싶다면 localhost
대신 host명을 적어주면 된다. 하지만 https가 아니기 때문에 다음과 같은 에러가 발생한다.
http: server gave HTTP response to HTTPS client
Push 하는 측에서 대상 레지스트리를 insecure-registry로 등록하면 되는데 리눅스라면 /etc/docker/daemon.json
파일에 다음과 같이 등록할 수 있다.
{
"insecure-registries" : [ "hostname.net:32000" ]
}
윈도우즈용 Docker라면 UI의 설정에 등록하는 메뉴가 있다.
등록된 이미지를 Pod에서 사용할 땐 매니페스트에 localhost:32000/my-nginx
형식으로 참조하면 된다.
기타 유용한 애드온
ingress 같은 기능도 애드온으로 활성화할 수 있으며 microk8s가 제공하는 애드온 목록은 이곳에서 확인할 수 있다.
여러 클러스터를 관리하기 위한 kubectl 설정
여러 클러스터에 접속하는 환경이고 이미 kubectl
이 있다면 새로 설치한 microk8s의 kubeconfig 파일을 추가하면 같이 관리할 수 있다. 아래 명령어로 config 파일을 만들자.
microk8s.kubectl config view --raw > microk8s
관리할 머신으로 microk8s 파일을 복사해오자. ~/.kube/microk8s
에 복사했다고 가정하면 다음과 같이 KUBECONFIG
환경 변수에 기존 config 파일외에 새 파일을 추가할 수 있다.
export KUBECONFIG=~/.kube/config:~/.kube/microk8s
만약 localhost
가 아니라면 경우 파일 내용에서 server
항목에서 주소를 변경해 준다. 그리고 로그인 시 항상 KUBECONFIG
환경 변수가 설정되도록 하려면 ~/.profile
파일에 추가하자.
다음과 같이 microk8s로 context를 전환해보자.
kubectl config use-context microk8s
이제 microk8s에 명령을 내릴 수 있다.