Pod 내에 container 생성


 

여러개의  container 생성 및 실행

# 오브젝트 구성파일 생성
[vagrant@master work]$ cat apache.yaml
apiVersion: v1
kind: Pod
metadata:
  name: test
spec:
  containers:
  - name: first
    image: httpd:2.4
  - name: second
    image: alpine
    command: ["/bin/sleep","3600s"]
    
# 적용
[vagrant@master work]$ kubectl apply -f apache.yaml
pod/test created

# 생김
[vagrant@master work]$ kubectl get pods
NAME   READY   STATUS    RESTARTS   AGE
test   2/2     Running   0          4m5s

 

컨테이너 세부정보

더보기
[vagrant@master work]$ kubectl describe pods test
Name:             test
Namespace:        myns
Priority:         0
Service Account:  default
Node:             worker2/192.168.98.30
Start Time:       Fri, 08 Mar 2024 15:45:21 +0900
Labels:           <none>
Annotations:      <none>
Status:           Running
IP:               10.244.2.56
IPs:
  IP:  10.244.2.56
Containers:
  first:
    Container ID:   containerd://7314c4036fd159fce2a41c544cf1197fa1bb57bace50c460a5ebbba0f81d2aa4
    Image:          httpd:2.4
    Image ID:       docker.io/library/httpd@sha256:104f07de17ee186c8f37b9f561e04fbfe4cf080d78c6e5f3802fd08fd118c3da
    Port:           <none>
    Host Port:      <none>
    State:          Running
      Started:      Fri, 08 Mar 2024 15:45:22 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dq4bf (ro)
  second:
    Container ID:  containerd://4abee6f50a343aecb9844b75dee4a072b18a3ae079f829693ef838f34f259ffe
    Image:         alpine
    Image ID:      docker.io/library/alpine@sha256:c5b1261d6d3e43071626931fc004f70149baeba2c8ec672bd4f27761f8e1ad6b
    Port:          <none>
    Host Port:     <none>
    Command:
      /bin/sleep
      3600s
    State:          Running
      Started:      Fri, 08 Mar 2024 15:45:27 +0900
    Ready:          True
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-dq4bf (ro)
Conditions:
  Type                        Status
  PodReadyToStartContainers   True
  Initialized                 True
  Ready                       True
  ContainersReady             True
  PodScheduled                True
Volumes:
  kube-api-access-dq4bf:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  6m59s  default-scheduler  Successfully assigned myns/test to worker2
  Normal  Pulled     6m59s  kubelet            Container image "httpd:2.4" already present on machine
  Normal  Created    6m59s  kubelet            Created container first
  Normal  Started    6m58s  kubelet            Started container first
  Normal  Pulling    6m58s  kubelet            Pulling image "alpine"
  Normal  Pulled     6m53s  kubelet            Successfully pulled image "alpine" in 5.222s (5.222s including waiting)
  Normal  Created    6m53s  kubelet            Created container second
  Normal  Started    6m53s  kubelet            Started container second

컨테이너 접속

# 디폴트 접속 (첫번째꺼로 접속됨)
[vagrant@master work]$ kubectl exec -it test /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Defaulted container "first" out of: first, second
root@test:/usr/local/apache2# exit
exit

# first로 접속
[vagrant@master work]$ kubectl exec -it test -c first /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@test:/usr/local/apache2# exit
exit

# second 접속 (알파인은 /bin/sh)
[vagrant@master work]$ kubectl exec -it test -c second /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # exit

 

IP 확인해보면 둘다 같다.

# apache IP
root@test:/usr/local/apache2# hostname -i
10.244.2.56

# alpine IP
/ # ip a s eth0
2: eth0@if55: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue state UP
    link/ether 96:d4:df:ec:e1:41 brd ff:ff:ff:ff:ff:ff
    inet 10.244.2.56/24 brd 10.244.2.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::94d4:dfff:feec:e141/64 scope link
       valid_lft forever preferred_lft forever

# alpine에서 본인 IP로 접속해보면 apache의 홈페이지가 나옴
/ # curl localhost
<html><body><h1>It works!</h1></body></html>

/ # curl 10.244.2.56
<html><body><h1>It works!</h1></body></html>

 

즉, Pod 내의 컨테이너들은 IP를 공유하며

연동 되어있는 것을 확인 할 수 있다.

'Container > Kubernetes' 카테고리의 다른 글

Empty Dir  (0) 2024.03.12
Kubernetes nodes Roles 변경  (0) 2024.03.12
Deployment  (0) 2024.03.08
ReplicaSet  (0) 2024.03.07
kubernetes namespace  (0) 2024.03.07

+ Recent posts