# kind 클러스터 설치 확인
docker port myk8s-worker
(⎈|kind-myk8s:N/A) root@kind:~# docker port myk8s-worker
30000/tcp -> 0.0.0.0:30000
30001/tcp -> 0.0.0.0:30001
# kube-ops-view
(⎈|kind-myk8s:N/A) root@kind:~# helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30000 --set env.TZ="Asia/Seoul" --namespace kube-system
"geek-cookbook" has been added to your repositories
NAME: kube-ops-view
LAST DEPLOYED: Sun Sep 8 06:32:08 2024
NAMESPACE: kube-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Get the application URL by running these commands:
export NODE_PORT=$(kubectl get --namespace kube-system -o jsonpath="{.spec.ports[0].nodePort}" services kube-ops-view)
export NODE_IP=$(kubectl get nodes --namespace kube-system -o jsonpath="{.items[0].status.addresses[0].address}")
echo http://$NODE_IP:$NODE_PORT
(⎈|kind-myk8s:N/A) root@kind:~# kubectl get deploy,pod,svc,ep -n kube-system -l app.kubernetes.io/instance=kube-ops-view
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/kube-ops-view 0/1 1 0 9s
NAME READY STATUS RESTARTS AGE
pod/kube-ops-view-657dbc6cd8-h9s54 0/1 ContainerCreating 0 9s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kube-ops-view NodePort 10.96.250.240 <none> 8080:30000/TCP 9s
NAME ENDPOINTS AGE
endpoints/kube-ops-view <none> 9s
# 설치 확인 myk8s-worker bash 진입해서 확인
root@myk8s-worker:/# crictl ps
CONTAINER IMAGE CREATED STATE NAME ATTEMPT POD ID POD
f7f0fc62dbced a645de6a07a3d 5 minutes ago Running kube-ops-view 0 736c5d3b5d0ff kube-ops-view-657dbc6cd8-h9s54
b0cd6fdb2a647 12968670680f4 16 minutes ago Running kindnet-cni 0 48580ffa1480d kindnet-nsfh4
8419bcab57746 af3ec60a3d89b 16 minutes ago Running kube-proxy 0 786aa48c01215 kube-proxy-pgtrq
# 네임스페이스 특정 확인
pstree -aclnpsS
|-pause,1158,ipc,mnt,net,pid,uts ## pause 컨테이너 1158번 프로세스
|-python3,1222,cgroup,ipc,mnt,net,pid,uts -m kube_ops_view ## kubeops server 프로세스
# 루트의 네임스페이스 확인
root@myk8s-worker:/# lsns -p 1
NS TYPE NPROCS PID USER COMMAND
4026531834 time 16 1 root /sbin/init
4026531837 user 16 1 root /sbin/init
4026532229 mnt 9 1 root /sbin/init
4026532230 uts 14 1 root /sbin/init
4026532231 ipc 9 1 root /sbin/init
4026532242 pid 9 1 root /sbin/init
4026532243 net 14 1 root /sbin/init
4026532335 cgroup 14 1 root /sbin/init
# pause 컨테이너의 네임스페이스 확인
root@myk8s-worker:/# lsns -p 1158
NS TYPE NPROCS PID USER COMMAND
4026531834 time 15 1 root /sbin/init
4026531837 user 15 1 root /sbin/init
4026532335 cgroup 13 1 root /sbin/init
4026532583 net 2 1158 65535 /pause
4026532642 mnt 1 1158 65535 /pause
4026532643 uts 2 1158 65535 /pause
4026532644 ipc 2 1158 65535 /pause
4026532645 pid 1 1158 65535 /pause
# kubeops 컨테이너의 네임스페이스 확인
root@myk8s-worker:/# lsns -p 1222
NS TYPE NPROCS PID USER COMMAND
4026531834 time 16 1 root /sbin/init
4026531837 user 16 1 root /sbin/init
4026532583 net 2 1158 65535 /pause
4026532643 uts 2 1158 65535 /pause
4026532644 ipc 2 1158 65535 /pause
4026532646 mnt 1 1222 1000 python3 -m kube_ops_view
4026532647 pid 1 1222 1000 python3 -m kube_ops_view
4026532648 cgroup 1 1222 1000 python3 -m kube_ops_view
# 위의 그림의 파드를 생성합니다.
apiVersion: v1
kind: Pod
metadata:
name: myweb2
spec:
containers:
- name: myweb2-nginx
image: nginx
ports:
- containerPort: 80
protocol: TCP
- name: myweb2-netshoot
image: nicolaka/netshoot
command: ["/bin/bash"]
args: ["-c", "while true; do sleep 5; curl localhost; done"] # 포드가 종료되지 않도록 유지합니다
terminationGracePeriodSeconds: 0
# 생성
kubectl apply -f https://raw.githubusercontent.com/gasida/NDKS/main/3/myweb2.yaml
# 생성 확인
(⎈|kind-myk8s:N/A) root@kind:~# kubectl get pod -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myweb2 2/2 Running 0 7m13s 10.244.1.3 myk8s-worker <none> <none>
# 파드의 컨테이너 IP 확인
kubectl exec myweb2 -c myweb2-netshoot -- ip addr
kubectl exec myweb2 -c myweb2-nginx -- apt update
kubectl exec myweb2 -c myweb2-nginx -- apt install -y net-tools
kubectl exec myweb2 -c myweb2-nginx -- ifconfig
# NET SHOOT 의 IP ADDR
2: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 8e:16:40:c0:47:48 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.244.1.3/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
# NGINX 의 ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.244.1.3 netmask 255.255.255.0 broadcast 10.244.1.255
# 두개의 ip가 같은것을 확인 가능하다.
# 각각 PID 를 변수에 지정
NGINXPID=$(ps -ef | grep 'nginx -g' | grep -v grep | awk '{print $2}')
echo $NGINXPID
NETSHPID=$(ps -ef | grep 'curl' | grep -v grep | awk '{print $2}')
echo $NETSHPID
PAUSEPID=<각자 자신의 pause PID>
# PAUSE 의 NET 네임스페이스 PID 확인 및 IP 정보 확인
pstree -aclnpsS
lsns -t net
nsenter -t $PAUSEPID -n ip -c addr
nsenter -t $NGINXPID -n ip -c addr
nsenter -t $NETSHPID -n ip -c addr
(⎈|kind-myk8s:N/A) root@kind:~# nsenter -t $PAUSEPID -n ip -c addr
nsenter -t $NGINXPID -n ip -c addr
nsenter -t $NETSHPID -n ip -c addr
# PAUSE 컨테이너
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 86:fa:97:cd:e8:43 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.244.1.2/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::84fa:97ff:fecd:e843/64 scope link
valid_lft forever preferred_lft forever
# NGINX PID
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 8e:16:40:c0:47:48 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.244.1.3/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::8c16:40ff:fec0:4748/64 scope link
valid_lft forever preferred_lft forever
# NETSH PID
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0@if3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 8e:16:40:c0:47:48 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 10.244.1.3/24 brd 10.244.1.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::8c16:40ff:fec0:4748/64 scope link
valid_lft forever preferred_lft forever