Ubuntu ๊ธฐ๋ฐ shellPod ์ด๋ฏธ์ง + ์๋ํ ์คํฌ๋ฆฝํธ๋ก ์ด์ ์์ฐ์ฑ ํฅ์
๐ก ์ ์ด ์์ ์ ํ๊ฒ ๋์๋๊ฐ?
Kubernetes๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด, ์ด๋ค **๋ ธ๋(Node)**์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋์ง ์ง์ ํ์ธํด์ผ ํ ์ผ์ด ์๊ธด๋ค.
๋ณดํต์ SSH๋ก ํด๋น ๋
ธ๋์ ์ ์ํด์ top, netstat, ps ๋ฑ์ ํตํด ์์คํ
์ํ๋ฅผ ๋ณด๊ฒ ๋๋ค.
ํ์ง๋ง ์ค์ ์ด์ ํ๊ฒฝ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ํฉ์ด ํํ๋ค:
- SSH ํฌํธ๊ฐ ๋ซํ ์๊ฑฐ๋ Bastion์ ํตํด์๋ง ์ ์ ๊ฐ๋ฅ
- ๋ชจ๋ ๋ ธ๋์ ์ ๊ทผํ ์ ์๋ SSH ํค๊ฐ ์กด์ฌํ์ง ์์
- GKE, EKS, AKS์ฒ๋ผ ๊ด๋ฆฌํ Kubernetes์์๋ SSH ์ ๊ทผ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐจ๋จ๋จ
์ด๋ด ๋ ๋์์ด ๋๋ ๊ฒ์ด ๋ฐ๋ก K9s์ nodeShell ๊ธฐ๋ฅ์ด๋ค.
๐งญ nodeShell ๊ธฐ๋ฅ์ด๋?
K9s๋ ์ธ๊ธฐ ์๋ Kubernetes ํฐ๋ฏธ๋ UI ํด์ด๋ค.
์ฌ๊ธฐ์ nodeShell ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด, ํน์ ๋
ธ๋์ ๋ค์์คํ์ด์ค์ ์ง์ ์ฐ๊ฒฐ๋ Pod๋ฅผ ์์ฑํด์ ๋ง์น SSH์ฒ๋ผ ์์ ์ง์
ํ ์ ์๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก nodeShell์ ๋ค์ ๋์์ ํ๋ค:
- ํ์ฌ ์ ํํ ๋ ธ๋ ์์ privileged + hostPID Pod๋ฅผ ๋์ด๋ค.
- ํด๋น Pod ์์์
nsenter๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ๋ ธ๋์ PID 1 (init) ์ ์ง์ ํ๋ค. - ๋คํธ์ํฌ, ํ์ผ์์คํ , mount, UTS, IPC ๋ค์์คํ์ด์ค๊น์ง ํจ๊ป ์ ๊ทผํ๋ค.
- ๊ฒฐ๊ณผ์ ์ผ๋ก, ๊ทธ ๋ ธ๋์ ๋ฃจํธ ํ๊ฒฝ์ bash๋ก ์ง์ ํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋๋ค.
ํ์ง๋ง ๋ฌธ์ ๋โฆ
โ ๏ธ ๊ธฐ๋ณธ shellPod๋ BusyBox ๊ธฐ๋ฐ์ด๋ค
K9s๋ ๊ธฐ๋ณธ์ ์ผ๋ก BusyBox ๊ธฐ๋ฐ์ ์ต์ํ shellPod๋ฅผ ๋์ด๋ค. ๊ทธ๋์ ๋ค์๊ณผ ๊ฐ์ ๋ถํธ์ด ์๋ค:
bash๊ฐ ์๋๋ผsh๋ง ์ ๊ณต๋จps,top,ss,netstat,vim,curl์์- ์์คํ ์ง๋จ์ ์ ๋๋ก ํ๊ธฐ ์ด๋ ค์
์ด์์๋ผ๋ฉด, ์ค์ ์์ ์ด๋ฐ ํด์ด ๋น ์ง ํ๊ฒฝ์ ์ฌ์ค์ ๋ฌด์ฉ์ง๋ฌผ์ด๋ค.
๐ฏ ๋ชฉํ: Ubuntu ํ๊ฒฝ์์ ์ค์ shellPod ๊ตฌ์ฑ
์ฐ๋ฆฌ๋ ์๋์ ๊ฐ์ shellPod๋ฅผ ๋ง๋ค๊ณ ์ ํ๋ค:
- Ubuntu 22.04 ๊ธฐ๋ฐ
bash,ps,top,nsenter,procps,util-linuxํฌํจ- Docker ์ด๋ฏธ์ง๋ก ๋ฐฐํฌ ๊ฐ๋ฅ
- K9s์ ์ฐ๋๋๋๋ก ์๋ ์ค์
- ์์ ํ ๋ฒ์ ๋ด์์ ์ด์์ ํ์ฉ ๊ฐ๋ฅ
๐ 1. Dockerfile ์์ฑ
FROM ubuntu:22.04
RUN apt-get update && \\
apt-get install -y util-linux procps bash && \\
rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["nsenter", "--target", "1", "--mount", "--uts", "--ipc", "--net", "--pid", "--", "bash"]
์ค๋ช
util-linux:nsenterํฌํจ๋จ. โ ์ด๊ฒ ํต์ฌ.procps:ps,top๊ฐ์ ์์คํ ๋ชจ๋ํฐ๋ง ํด ์ ๊ณต-target 1: PID 1 = ๋ ธ๋์ init process โ ๊ฐ์ฅ ์์ ๊ถํ-mount,-net,-pid๋ฑ์ namespace ๊ณต์ ํ๋๊ทธbash์คํ๋จ โ ์ต์ํ ํ๊ฒฝ
์ด ์ด๋ฏธ์ง๋ก Pod๋ฅผ ๋์ฐ๋ฉด, ๋ ธ๋ ์์ฒด์ ์ง์ ํ ๋ฏํ bash ํ๊ฒฝ์ด ์ ๊ณต๋๋ค.
โ๏ธ 2. ์ด๋ฏธ์ง ๋น๋ & ํธ์ ์๋ํ (build_and_push.sh)
./build_and_push.sh ghcr.io/myuser/k9s-nodeshell latest
๊ธฐ๋ฅ ์ค๋ช
- Dockerfile์ด Ubuntu 22.04 ๊ธฐ๋ฐ์ธ์ง ๊ฒ์ฌ
- Docker ์ด๋ฏธ์ง ๋น๋ ์ํ
- GitHub Container Registry(ghcr.io) ๋ฑ์ ํธ์
์ฌ์ฉ๋ฒ
./build_and_push.sh <repository> <tag>
์์:
./build_and_push.sh ghcr.io/myuser/k9s-nodeshell latest
DockerHub๋ ๊ฐ๋ฅํ์ง๋ง, ๊ฐ์ธ ํ๋ก์ ํธ๋ ๋ณด์ ์ธก๋ฉด์์๋ GitHub Container Registry ๊ถ์ฅ
๐ง 3. K9s ์ค์ ์๋ํ ์คํฌ๋ฆฝํธ (setup_k9s_shellpod.sh)
./setup_k9s_shellpod.sh ghcr.io/myuser/k9s-nodeshell:latest
๋์ ๋ฐฉ์
$HOME/.config/k9s/config.yamlํ์ผ์ ์ฐพ์ (๋๋ ์์ฑ)k9s.shellPod.image๊ฐ์ ์ฐ๋ฆฌ๊ฐ ๋ง๋ ์ด๋ฏธ์ง๋ก ์๋ ์ค์ - ์์ผ๋ฉด ์๋ก ์ถ๊ฐ, ์์ผ๋ฉด ๊ฐ๋ง ๋ฎ์ด์
์๋์ผ๋ก ์์ฑ๋๋ ์ค์ ์์
k9s:
shellPod:
image: ghcr.io/myuser/k9s-nodeshell:latest
namespace: default
limits:
cpu: 100m
memory: 100Mi
์ค์ ์ ์๋์ผ๋ก ๋ณ๊ฒฝํ ์๋ ์์ง๋ง, ์ค์๋ ์คํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ ์คํฌ๋ฆฝํธ ์ฌ์ฉ์ ์ถ์ฒ
๐ฅ 4. ์ค์ ์ฌ์ฉ๋ฒ โ K9s์์ ์ ์ง์
k9s์คํnํค๋ฅผ ๋๋ฌ ๋ ธ๋ ๋ทฐ๋ก ์ด๋- ์ ์ํ ๋ ธ๋๋ฅผ ์ ํ
sํค๋ฅผ ๋๋ฅด๋ฉด โ shellPod๊ฐ ์๋ ์์ฑ๋๋ฉฐ bash ์ ์
๊ฒฐ๊ณผ ํ๋ฉด


- ์ด ์ํ๋ ํด๋น ๋
ธ๋์
/๋๋ ํฐ๋ฆฌ๋ก ์ง์ ์ง์ ํ ๊ฒ๊ณผ ๋์ผ ps,top,netstat๋ฑ ์์คํ ๋๊ตฌ ์ฌ์ฉ ๊ฐ๋ฅ- ์ปจํ ์ด๋ ๊ฒฉ๋ฆฌ ์์ด ์ง์ ๋ ธ๋ ์ง๋จ ๊ฐ๋ฅ
๐งช 5. ์ง์ Pod๋ก ๋ฐฐํฌํด์ ํ ์คํธํ๊ธฐ
apiVersion: v1
kind: Pod
metadata:
name: nodeshell-direct
spec:
hostPID: true
containers:
- name: nodeshell
image: ghcr.io/myuser/k9s-nodeshell:latest
securityContext:
privileged: true
stdin: true
tty: true
restartPolicy: Never
์ค์ ํด์ค
hostPID: trueโ ๋ ธ๋์ PID ๋ค์์คํ์ด์ค ๊ณต์privileged: trueโ ๋ชจ๋ namespace์ ์ฅ์น ์ ๊ทผ ํ์ฉstdin: true,tty: trueโ ํฐ๋ฏธ๋ ์ธํฐ๋์ ๊ฐ๋ฅ
๐ ๋ณด์ ๊ด๋ จ ์ฃผ์์ฌํญ
์ด shellPod๋ ๋งค์ฐ ๊ฐ๋ ฅํ๋ค. ๋ ธ๋์ ๋ฃจํธ ํ๊ฒฝ์ ์ง์ ์ ๊ทผํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์ ์ฌํญ์ ๋ฐ๋์ ์ง์ผ์ผ ํ๋ค.
- ์ด์์๋ง ์ฌ์ฉ (๊ฐ๋ฐ์๋ ์ผ๋ฐ ์ฌ์ฉ์์๊ฒ ๋นํ์ฉ)
- ํ๋ก๋์ ํ๊ฒฝ์์ ์์ ์ ์๋ง ํ์ฉ
- ์ด๋ฏธ์ง push๋ trusted registry์๋ง
- ๋ ธ๋ ๋ ๋ฒจ ๊ฐ์ฌ ๋ก๊ทธ๋ก ์ฌ์ฉ ์ถ์ ํ์
๐งช ํ ์คํธ ํ๊ฒฝ ์ ๋ณด
- K9s ๋ฒ์ : v0.50.1
- ํ ์คํธ ํด๋ฌ์คํฐ: self-hosted Kubernetes (kubeadm ๊ธฐ๋ฐ)
- Docker ๋ฒ์ : 24.x
- OS: Ubuntu 22.04 LTS
โ ์์ฝ ์ ๋ฆฌ
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ชฉ์ | K9s์ nodeShell ๊ธฐ๋ฅ์ Ubuntu ๊ธฐ๋ฐ์ผ๋ก ๊ฐ์ |
| ์ฃผ์ ๋๊ตฌ | Docker, nsenter, bash, util-linux |
| ๋ณด์ ์ด์ | ๋ชจ๋ ๊ถํ์ ๊ฐ์ง Pod์ด๋ฏ๋ก ๊ด๋ฆฌ์๋ง ์ฌ์ฉ |
| ์๋ํ | ๋น๋, ํธ์, ์ค์ ์คํฌ๋ฆฝํธ ์ ๊ณต |
| ํ ์คํธ๋ ํ๊ฒฝ | K9s v0.50.1, Ubuntu 22.04 |
๐ ์ ์ฒด ์ฝ๋ ๋ฐ ๋ฌธ์
๐ GitHub: https://github.com/pu4ro/k9s_node_shell