a story

wsl: docker, kind 설치 본문

기타

wsl: docker, kind 설치

한명 2023. 11. 5. 12:57

WSL(Windows Subsystem for Linux) 환경에서 kind를 실행하기 위해 필요한 패키지들을 설치한다.

docker 설치

참고로 Microsoft 공식 문서의 가이드에서는 docker desktop 에 대한 설치 가이드만 있다.

https://learn.microsoft.com/ko-kr/windows/wsl/tutorials/wsl-containers

단순히 docker 인스턴스를 설치하기 위해 아래를 참고한다.

https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

 

apt 리포지터리 설정한다.

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

 

docker 설치한다.

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

 

다만 이렇게 해도 docker 명령을 수행해보면 아래와 같이 에러가 발생하는 것을 알 수 있다.

# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
# systemctl status docker
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

 

기본적으로 systemd에서 docker를 실행해 줄 것으로 기대하지만, wsl에서는 기본적으로 systemd 가 실행되지 않기 때문에 아래와 같이 /etc/wsl.conf 를 작성한다.

https://learn.microsoft.com/ko-kr/windows/wsl/systemd

[boot]
systemd=true

참고로, 위 방법이 제대로 동작하지 않는다면 사전에 wsl --update를 수행해야 할 수 있다. (WSL 버전이 0.67.6 이상)

> wsl --update
설치 중: Linux용 Windows 하위 시스템
[==========================59.0%===                        ]
Linux용 Windows 하위 시스템이(가) 설치되었습니다.

 

이제 사용 가능하다.

# systemctl status docker
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2023-11-05 12:52:49 KST; 23s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 397 (dockerd)
      Tasks: 14
     Memory: 102.7M
     CGroup: /system.slice/docker.service
             └─397 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.436289714+09:00" level=info msg="Loading contai>
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.537940657+09:00" level=info msg="Loading contai>
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.574554915+09:00" level=warning msg="WARNING: No>
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.574608315+09:00" level=warning msg="WARNING: No>
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.574617075+09:00" level=warning msg="WARNING: No>
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.574621785+09:00" level=warning msg="WARNING: No>
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.574642268+09:00" level=info msg="Docker daemon">
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.574820321+09:00" level=info msg="Daemon has com>
Nov 05 12:52:49 DESKTOP-UN5DI0K systemd[1]: Started Docker Application Container Engine.
Nov 05 12:52:49 DESKTOP-UN5DI0K dockerd[397]: time="2023-11-05T12:52:49.609024013+09:00" level=info msg="API listen on >
# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

 

설치 확인

sudo docker run hello-world

 

아래와 같은 결과를 얻는다면 정상이다.

# sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete
Digest: sha256:88ec0acaa3ec199d3b7eaf73588f4518c25f9d34f58ce9a0df68429c5af48e8d
Status: Downloaded newer image for hello-world:latest

Hello from Docker!

 

kind 설치

kind는 docker에 컨테이너로 노드를 실행 시켜서 kuberentes를 실행하므로써 로컬 환경에서 kubernetes 테스트를 가능케하는 도구이다. 

 

아래를 참고한다.

https://kind.sigs.k8s.io/docs/user/quick-start/#installation

# For AMD64 / x86_64
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
# For ARM64
[ $(uname -m) = aarch64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-arm64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind

 

실제로 kind는 바이너리에 불과함을 알 수 있다.

kind로 클러스터를 생성하면, 아래와 같이 컨테이너 이미지가 각 노드 처럼 실행되는 것을 알 수 있다.

CONTAINER ID   IMAGE                  COMMAND                  CREATED       STATUS       PORTS                       NAMES
e9d61cb5b472   kindest/node:v1.27.3   "/usr/local/bin/entr…"   8 hours ago   Up 8 hours   127.0.0.1:44423->6443/tcp   calico-control-plane
1d481afc16a6   kindest/node:v1.27.3   "/usr/local/bin/entr…"   8 hours ago   Up 8 hours                               calico-worker

 

 

kind로 로컬 환경에서 kubernetes 를 테스트 해보기 위해 docker와 kind를 설치했다. 

kind 실제 사용은 앞으로 작성될 블로그를 참고할 수 있다.