Kubernetes란?
앞서 알아본 컨테이너를 시스템 차원에서 자동으로 관리해주기 위한 오픈소스 플랫폼이다.
워낙 유명하기도 하고 이전에 많이 테스트해보기도 했기 때문에 간단한 정리와 추후에 시간을 내서 더 공부하기 위한 Deep Dive 자료만 추가로 정리한다.
Kubernetes의 역할
https://kubernetes.io/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do
Kubernetes Deep Dive 자료
- 쿠버네티스 hard?way : https://netpple.github.io/docs/deepdive-into-kubernetes/k8s-hardway
- Live Debugging K8s : https://netpple.github.io/docs/deepdive-into-kubernetes/k8s-debugging
- 쿠버네티스의 인증 : https://docs.google.com/presentation/d/1bAxTbLjUxq2d81R7ZP17QuRYA7fLw3RhpRUyBBy5ETY/edit#slide=id.g11ec4c8abb2_0_0
- kube-apiserver : https://netpple.github.io/docs/deepdive-into-kubernetes/k8s-apiserver
- kube-controller-manager : https://netpple.github.io/docs/deepdive-into-kubernetes/k8s-controller-manager
- kube-scheduler : https://netpple.github.io/docs/deepdive-into-kubernetes/k8s-scheduler
- kubelet : https://netpple.github.io/docs/deepdive-into-kubernetes/k8s-kubelet
kind
Docker in Docker 방식으로 kubernetes 클러스터 환경을 구성해주는 도구이다.
Host에 Docker를 설치하고 Host에서 기동한 Docker는 Kubernetes의 Node역할을 한다.
그리고 Node역할을 하는 Docker에서 Docker를 기동해 Kubernetes 구성으로 동작하게 해준다.
Windows 환경에서 kind 설치 및 kubernetes 구성
일반적으로 kubernetes는 Linux 환경에서 구성하고 많은 예시나 Best Practice가 Linux에 맞춰져 있다.
그럼 Windows 환경에서는 어떻게 kind를 구성할까?
Virtual Machine으로 Linux 서버를 올려서 기동하는 방법도 있지만, kind에서 windows 버전 exe파일도 제공하기에 아래와 같이 테스트해보았다.
(테스트) kind windows버전으로 설치하기
kind에서도 windows 버전의 실행파일을 제공한다. 다만 windows에서 직접 kind를 실행해야 하기 때문에 windows 컨테이너를 기동할 수 있는 환경을 구성해줘야 한다.
Docker desktop을 쓰면 편리할 수 있지만, 이제 더 이상 완전 무료가 아니기 때문에 자주 쓰지 않게 되어 docker engine을 직접 구성하였다.
- Docker Engine에 대한 라이선스 : https://docs.docker.com/engine/#licensing
- "The Docker Engine is licensed under the Apache License, Version 2.0"
(단 Docker Desktop을 통해서 사용되는 것이 아닐 때에 한함)
#### 관리자 권한으로 windows powershell 실행
# container 실행을 위한 feature 활성화
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All
# docker engine 및 docker 파일 다운로드
$dockerUrl = "https://download.docker.com/win/static/stable/x86_64/docker-27.2.0.zip"
$dockerZipPath = "$Env:TEMP\docker.zip"
$dockerInstallPath = "$Env:ProgramFiles\Docker"
Invoke-WebRequest -Uri $dockerUrl -OutFile $dockerZipPath
Expand-Archive -Path $dockerZipPath -DestinationPath $Env:ProgramFiles
# Docker 서비스 등록 및 시작
& "$dockerInstallPath\dockerd.exe" --register-service
Start-Service docker
# Docker 명령어 path 등록
$dockerPath = [System.Environment]::GetEnvironmentVariable("Path", [System.EnvironmentVariableTarget]::Machine)
if ($dockerPath -notlike "*$dockerInstallPath*") {
Write-Host "Adding Docker to PATH..."
$newPath = $dockerPath + ";" + $dockerInstallPath
[System.Environment]::SetEnvironmentVariable("Path", $newPath, [System.EnvironmentVariableTarget]::Machine)
} else {
Write-Host "Docker is already in PATH."
}
#### path에 등록된 docker 명령어 사용을 위해
#### windows powershell을 새 창으로 실행
# docker 명령어 테스트
PS C:\Windows\system32> docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
PS C:\Windows\system32>
PS C:\Windows\system32> docker info
Client:
Version: 27.2.0
Context: default
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.2.0
Storage Driver: windowsfilter
Windows:
Logging Driver: json-file
# hello world 이미지 테스트 실행
PS C:\Windows\system32> docker run hello-world:nanoserver
Unable to find image 'hello-world:nanoserver' locally
nanoserver: Pulling from library/hello-world
c4e5a6832ff8: Pull complete
eb3888db953d: Pull complete
ab866df63843: Pull complete
Digest: sha256:0c6aef1999f18f35a919f56c55c2a355fa14db78a3a05cc4b8c931d8b8229616
Status: Downloaded newer image for hello-world:nanoserver
ea2dda8554a2b03256315c7051ae13621b99e12e621a9a330575bc8f99fea20a
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(windows-amd64, nanoserver-1809)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run a Windows Server container with:
PS C:\> docker run -it mcr.microsoft.com/windows/servercore:1809 powershell
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Windows에서 컨테이너를 기동시킬 준비가 되었으니 kind를 설치해보자.
# windows powershell
cd $home\desktop
mkdir kind_test
cd kind_test
curl.exe -Lo kind-windows-amd64.exe https://kind.sigs.k8s.io/dl/v0.24.0/kind-windows-amd64
Move-Item .\kind-windows-amd64.exe .\kind.exe
$kindContent = @"
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
# 1 control plane node and 3 workers
nodes:
# the control plane node config
- role: control-plane
# the two workers
- role: worker
- role: worker
"@
$path = "windows_kind_2nodes.yaml"
$kindContent | Out-File -FilePath $path -Encoding utf8
# 실행 결과
.\kind.exe create cluster --config windows_kind_2nodes.yaml --name ersia-cluster
PS C:\Users\user\Desktop\kind_test> .\kind.exe create cluster --config windows_kind_2nodes.yaml --name ersia-cluster
Creating cluster "ersia-cluster" ...
• Ensuring node image (kindest/node:v1.31.0) 🖼 ...
✗ Ensuring node image (kindest/node:v1.31.0) 🖼
ERROR: failed to create cluster: failed to pull image "kindest/node:v1.31.0@sha256:53df588e04085fd41ae12de0c3fe4c72f7013bba32a20e7325357a1ac94ba865": command "docker pull kindest/node:v1.31.0@sha256:53df588e04085fd41ae12de0c3fe4c72f7013bba32a20e7325357a1ac94ba865" failed with error: exit status 1
Command Output: docker.io/kindest/node@sha256:53df588e04085fd41ae12de0c3fe4c72f7013bba32a20e7325357a1ac94ba865: Pulling from kindest/node
no matching manifest for windows/amd64 10.0.19045 in the manifest list entries
생각대로 잘 동작하지 않았다.
에러 로그를 보니 kind에서 선언한 kindest/node 에서 windows/amd64에 맞는 이미지를 찾을 수 없다는 것 같다.
dockerhub를 확인해보니 linux 이미지만 제공하는 것으로 보인다. 그렇다면 node 이미지는 linux로만 기동해야 한다.
(추가) kind.exe를 쓰려면 Docker Desktop을 쓰자
하루 정도 테스트를 더 해보았는데, chcolatey를 통해 kind를 설치하면 Docker Desktop을 기본으로 설치하게 되어있었다.
PS C:\Users\user\Desktop\kind_test> choco install kind
Chocolatey v2.0.0
Installing the following packages:
kind
By installing, you accept licenses for the packages.
Progress: Downloading chocolatey-dotnetfx.extension 1.0.1... 100%
chocolatey-dotnetfx.extension v1.0.1
chocolatey-dotnetfx.extension package files install completed. Performing other installation steps.
...
choco feature enable -n allowGlobalConfirmation
Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint): y
Microsoft .NET Framework 4.8 or later is already installed.
...
Progress: Downloading docker-desktop 4.33.1... 100%
docker-desktop v4.33.1 [Approved]
docker-desktop package files install completed. Performing other installation steps.
...
가져오는 node 이미지를 Windows에서 Linux로 전환이 필요한데, 해당 기능은 Docker Desktop에서만 제공하는 것으로 보인다.
https://github.com/docker/for-win/issues/13761
WSL을 이용한 kind 설치
Windows Subsystem for Linux (WSL)은 별도의 가상머신이나 듀얼부팅 없이 Linux 환경을 실행할 수 있는 기능이다.
따라서 안정적이지 않을 수 있으므로 개발이나 단순 테스트용으로 적합하다.
- WSL이란? : https://learn.microsoft.com/en-us/windows/wsl/about
- 프로덕션 시나리오에 WSL을 사용할 수 있습니까? : https://learn.microsoft.com/ko-kr/windows/wsl/faq#-----------wsl--------------
Hyper Visor 기반으로 동작하나 OS를 통째로 올리는 Virtual Machine(VM)과는 달리 Linux 커널을 올리기 때문에 VM보다 좀 더 가볍게 쓸 수 있다.
# 관리자 모드의 windows powershell에서 수행
# 사용가능한 버전이 다양하게 있지만 기본 설정인 ubuntu 22.04를 사용한다
PS C:\Users\user\Desktop\kind_test> wsl --list --online
다음은 설치할 수 있는 유효한 배포판 목록입니다.
'wsl.exe --install <Distro>'를 사용하여 설치합니다.
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.6 openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed openSUSE Tumbleweed
# 설치 수행
wsl --install
PS C:\Users\user\Desktop\kind_test> wsl -v
WSL 버전: 2.2.4.0
커널 버전: 5.15.153.1-2
WSLg 버전: 1.0.61
MSRDC 버전: 1.2.5326
Direct3D 버전: 1.611.1-81528511
DXCore 버전: 10.0.26091.1-240325-1447.ge-release
Windows 버전: 10.0.19045.4780
# wsl 진입
PS C:\Users\user\Desktop\kind_test> wsl
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.153.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This message is shown once a day. To disable it please create the
/root/.hushlogin file.
wsl2 환경은 리눅스 커널 베이스이기 때문에 리눅스에서 사용할 명령어 등을 다시 설치해줘야 한다.
감사하게도 스터디 그룹에서 아래의 스크립트를 공유해주셔서 사용하였다.
출처 : https://gasidaseo.notion.site/CloudNet-Blog-c9dfa44a27ff431dafdd2edacc8a1863
# wsl 접속 후 아래의 스크립트 수행
cat <<"EOT" >> ./init_cfg.sh
echo "[TASK 1] Profile & Bashrc"
echo 'alias vi=vim' >> /etc/profile
echo "sudo su -" >> .bashrc
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
echo "[TASK 2] Disable AppArmor"
systemctl stop ufw && systemctl disable ufw >/dev/null 2>&1
systemctl stop apparmor && systemctl disable apparmor >/dev/null 2>&1
echo "[TASK 3] Install Packages"
apt update -qq >/dev/null 2>&1
apt-get install bridge-utils net-tools jq tree unzip kubecolor -y -qq >/dev/null 2>&1
echo "[TASK 4] Install Kind"
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64 >/dev/null 2>&1
chmod +x ./kind
mv ./kind /usr/bin
echo "[TASK 5] Install Docker Engine"
curl -fsSL https://get.docker.com | sh >/dev/null 2>&1
echo "[TASK 6] Install kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" >/dev/null 2>&1
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
echo "[TASK 7] Install Helm"
curl -s https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash >/dev/null 2>&1
echo "[TASK 8] Source the completion"
source <(kubectl completion bash)
echo 'source <(kubectl completion bash)' >> /etc/profile
echo "[TASK 9] Alias kubectl to k"
echo 'alias k=kubectl' >> /etc/profile
echo 'complete -F __start_kubectl k' >> /etc/profile
echo 'alias kubectl=kubecolor' >> /etc/profile
echo 'compdef kubecolor=kubectl' >> /etc/profile
echo "[TASK 10] Install Kubectx & Kubens"
git clone https://github.com/ahmetb/kubectx /opt/kubectx >/dev/null 2>&1
ln -s /opt/kubectx/kubens /usr/local/bin/kubens
ln -s /opt/kubectx/kubectx /usr/local/bin/kubectx
echo "[TASK 11] Install Kubeps & Setting PS1"
git clone https://github.com/jonmosco/kube-ps1.git /root/kube-ps1 >/dev/null 2>&1
cat <<"EOT" >> ~/.bash_profile
source /root/kube-ps1/kube-ps1.sh
KUBE_PS1_SYMBOL_ENABLE=true
function get_cluster_short() {
echo "$1" | cut -d . -f1
}
KUBE_PS1_CLUSTER_FUNCTION=get_cluster_short
KUBE_PS1_SUFFIX=') '
PS1='$(kube_ps1)'$PS1
EOT
echo "[TASK 12] To increase Resource limits"
# cat /proc/sys/fs/inotify/max_user_watches >> 8192
# cat /proc/sys/fs/inotify/max_user_instances >> 128
sysctl fs.inotify.max_user_watches=524288 >/dev/null 2>&1
sysctl fs.inotify.max_user_instances=512 >/dev/null 2>&1
echo 'fs.inotify.max_user_watches=524288' > /etc/sysctl.d/99-kind.conf
echo 'fs.inotify.max_user_instances=512' > /etc/sysctl.d/99-kind.conf
sysctl -p >/dev/null 2>&1
sysctl --system >/dev/null 2>&1
EOF
# 실행 결과
root@DESKTOP-O4EPQ9T:~# ls -rlt
total 8
drwx------ 3 root root 4096 Sep 7 22:00 snap
-rw-r--r-- 1 root root 2471 Sep 7 22:46 init_cfg.sh
root@DESKTOP-O4EPQ9T:~# chmod 750 init_cfg.sh
root@DESKTOP-O4EPQ9T:~# ./init_cfg.sh
[TASK 1] Profile & Bashrc
[TASK 2] Disable AppArmor
[TASK 3] Install Packages
[TASK 4] Install Kind
[TASK 5] Install Docker Engine
[TASK 6] Install kubectl
[TASK 7] Install Helm
[TASK 8] Source the completion
[TASK 9] Alias kubectl to k
[TASK 10] Install Kubectx & Kubens
[TASK 11] Install Kubeps & Setting PS1
[TASK 12] To increase Resource limits
이제 kind를 통해 cluster를 설치해보자.
# 위에 테스트에서 생성한 yaml 파일을 사용해 kind 수행
kind create cluster --config windows_kind_2nodes.yaml --name ersia
root@DESKTOP-O4EPQ9T:~# kind create cluster --config windows_kind_2nodes.yaml --name ersia
Creating cluster "ersia" ...
✓ Ensuring node image (kindest/node:v1.31.0) 🖼
✓ Preparing nodes 📦 📦 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
✓ Joining worker nodes 🚜
Set kubectl context to "kind-ersia"
You can now use your cluster with:
kubectl cluster-info --context kind-ersia
root@DESKTOP-O4EPQ9T:~# kind get nodes --name ersia
ersia-worker
ersia-control-plane
ersia-worker2
root@DESKTOP-O4EPQ9T:~#
root@DESKTOP-O4EPQ9T:~# kubectl cluster-info
Kubernetes control plane is running at https://127.0.0.1:34179
CoreDNS is running at https://127.0.0.1:34179/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
root@DESKTOP-O4EPQ9T:~#
root@DESKTOP-O4EPQ9T:~# kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
ersia-control-plane Ready control-plane 86s v1.31.0 172.18.0.4 <none> Debian GNU/Linux 12 (bookworm) 5.15.153.1-microsoft-standard-WSL2 containerd://1.7.18
ersia-worker Ready <none> 74s v1.31.0 172.18.0.2 <none> Debian GNU/Linux 12 (bookworm) 5.15.153.1-microsoft-standard-WSL2 containerd://1.7.18
ersia-worker2 Ready <none> 74s v1.31.0 172.18.0.3 <none> Debian GNU/Linux 12 (bookworm) 5.15.153.1-microsoft-standard-WSL2 containerd://1.7.18
정상적으로 설치 및 구동되었다. Pod도 한번 생성해보자
cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: netpod
spec:
containers:
- name: netshoot-pod
image: nicolaka/netshoot
command: ["tail"]
args: ["-f", "/dev/null"]
terminationGracePeriodSeconds: 0
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx-pod
image: nginx:alpine
terminationGracePeriodSeconds: 0
EOF
root@DESKTOP-O4EPQ9T:~# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
netpod 1/1 Running 0 34s 10.244.2.2 ersia-worker2 <none> <none>
nginx 1/1 Running 0 34s 10.244.1.2 ersia-worker <none> <none>
root@DESKTOP-O4EPQ9T:~#
root@DESKTOP-O4EPQ9T:~# kubectl exec -it netpod -- curl -s $(kubectl get pod nginx -o jsonpath={.status.podIP}) | grep -o "<title>.*</title>"
<title>Welcome to nginx!</title>
KIND의 Docker IN Docker 확인
Host PC에서 docker 컨테이너를 확인해보자
# 각 node가 container로 기동된 것을 확인
root@DESKTOP-O4EPQ9T:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05034cde72a5 kindest/node:v1.31.0 "/usr/local/bin/entr…" 12 minutes ago Up 12 minutes ersia-worker
9fac148d4554 kindest/node:v1.31.0 "/usr/local/bin/entr…" 12 minutes ago Up 12 minutes 127.0.0.1:34179->6443/tcp ersia-control-plane
a2f2f17ef6b4 kindest/node:v1.31.0 "/usr/local/bin/entr…" 12 minutes ago Up 12 minutes ersia-worker2
root@DESKTOP-O4EPQ9T:~# docker inspect ersia-control-plane | jq | grep Entrypoint -A 3
"Entrypoint": [
"/usr/local/bin/entrypoint",
"/sbin/init"
],
여기서 contol-plain 노드로 진입해 내부의 컨테이너 정보를 확인해보자
root@DESKTOP-O4EPQ9T:~# docker exec -it ersia-control-plane /bin/bash
# 노드 역할의 컨테이너에서 컨테이너가 구동되어있다.
root@ersia-control-plane:/# systemctl status containerd
● containerd.service - containerd container runtime
Loaded: loaded (/etc/systemd/system/containerd.service; enabled; preset: enabled)
Active: active (running) since Sat 2024-09-07 14:27:36 UTC; 15min ago
Docs: https://containerd.io
Main PID: 181 (containerd)
Tasks: 125
Memory: 824.6M
CGroup: /system.slice/containerd.service
├─ 181 /usr/local/bin/containerd
├─ 318 /usr/local/bin/containerd-shim-runc-v2 -namespace k8s.io -id 6e5eaf68c891289d261deaeb02fe52ac9d18e56d2d3b4ec3e30f30b030f3f036 -address /run/containerd/containerd.sock
노드 역할의 컨테이너에서는 crictl 명령어를 사용해서 내부에 동작시킨 컨테이너 정보를 상세히 살펴볼 수 있다.
root@ersia-control-plane:/# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
9780e05cdfec5 3a195b56ff154 22 minutes ago Running local-path-provisioner 0 556718c79754b local-path-provisioner-57c5987fd4-mbdff
b2444c57259dd cbb01a7bd410d 22 minutes ago Running coredns 0 577d55677de21 coredns-6f6b679f8f-pq4vm
aac02432b5960 cbb01a7bd410d 22 minutes ago Running coredns 0 e0560305aef41 coredns-6f6b679f8f-snnxl
a0aac11f7cdb1 12968670680f4 23 minutes ago Running kindnet-cni 0 ce59c9265fca6 kindnet-c6fns
d79a8fa46d55b af3ec60a3d89b 23 minutes ago Running kube-proxy 0 494088581b552 kube-proxy-l9mc4
6eb7679d31da7 2e96e5913fc06 23 minutes ago Running etcd 0 6e5eaf68c8912 etcd-ersia-control-plane
446d95b7fa666 4f8c99889f8e4 23 minutes ago Running kube-apiserver 0 e73dbe7444ec5 kube-apiserver-ersia-control-plane
33ad9bbd36bee 7e9a7dc204d9d 23 minutes ago Running kube-controller-manager 0 d481f4a9022f0 kube-controller-manager-ersia-control-plane
7bec0a92c1a70 418e326664bd2 23 minutes ago Running kube-scheduler 0 61ce21f1048a5 kube-scheduler-ersia-control-plane
root@ersia-control-plane:/#
root@ersia-control-plane:/# crictl images
IMAGE TAG IMAGE ID SIZE
docker.io/kindest/kindnetd v20240813-c6f155d6 12968670680f4 36.8MB
docker.io/kindest/local-path-helper v20230510-486859a6 be300acfc8622 3.05MB
docker.io/kindest/local-path-provisioner v20240813-c6f155d6 3a195b56ff154 19.4MB
registry.k8s.io/coredns/coredns v1.11.1 cbb01a7bd410d 18.2MB
registry.k8s.io/etcd 3.5.15-0 2e96e5913fc06 56.9MB
registry.k8s.io/kube-apiserver-amd64 v1.31.0 4f8c99889f8e4 95.2MB
registry.k8s.io/kube-apiserver v1.31.0 4f8c99889f8e4 95.2MB
registry.k8s.io/kube-controller-manager-amd64 v1.31.0 7e9a7dc204d9d 89.4MB
registry.k8s.io/kube-controller-manager v1.31.0 7e9a7dc204d9d 89.4MB
registry.k8s.io/kube-proxy-amd64 v1.31.0 af3ec60a3d89b 92.7MB
registry.k8s.io/kube-proxy v1.31.0 af3ec60a3d89b 92.7MB
registry.k8s.io/kube-scheduler-amd64 v1.31.0 418e326664bd2 68.4MB
registry.k8s.io/kube-scheduler v1.31.0 418e326664bd2 68.4MB
registry.k8s.io/pause 3.10 873ed75102791 320kB
컨테이너 내부에 pod가 기동되어 있는 것을 알 수 있다.
이렇게 내부에 기동된 컨테이너들은 Host에서 조회가 되지 않도록 격리되어있다.
테스트가 끝나면 아래와 같이 삭제하면 된다.
root@DESKTOP-O4EPQ9T:~# kind delete cluster --name ersia
Deleting cluster "ersia" ...
Deleted nodes: ["ersia-worker" "ersia-control-plane" "ersia-worker2"]
root@DESKTOP-O4EPQ9T:~#
root@DESKTOP-O4EPQ9T:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES