유튜브 따배쿠 강의를 듣고 정리한 내용입니다.
💡 쿠버네티스 Pod Container 정리와 Single / Multi Container Pod 생성
Container 정리
app.js라는 어플리케이션을 기준으로 컨테이너를 빌드한다.
$ docker build -t smlinux/appjs
$ docker push smlinux/appjs
- push라는 명령어를 통해 smlinux 계정 안에 appjs를 저장
- 컨테이너 하나는, 하나의 어플리케이션이다.
- 컨테이너는 애플리케이션을 환경에 구애 받지 않고 실행하는 기술
Pod란?
- 컨테이너를 표현하는 K8S 최소 단위
- 어플리케이션을 실행할 때 도커와 쿠버네티스의 차이:
- 도커: appjs 컨테이너 실행해줘
- 쿠버: appjs Pod 실행해줘
- API를 통해서 컨테이너 동작은 불가능
- API를 통해서 컨테이너를 동작하는 API는 파드 API가 있고, 이를 통해서 컨테이너를 실행하게 된다.
- 컨테이너를 표현하는 k8s API의 최소 단위
- Pod에는 하나 또는 여러 개의 컨테이너가 포함될 수 있음
Pod 생성하기
1. kubectl run 명령(CLI)으로 생성
kubectl run webserver --image=nginx:1.14
2. pod yaml을 이용해 생성
- Pod 실행
kubectl create -f pod-nginx.yaml
- 현재 동작중인 Pod 확인
$ kubectl get pods
$ kubectl get pods -o wide
$ kubectl get pods -o yaml
$ kubectl get pods -o json
$kubectl get pods webserver -o json | grep -i podip
# json 포멧으로 podip 정보를 가져옴
- Pod에 접속해서 결과보기
$ curl <pod ' s IP address>
multi-container Pod 생성하기
- name을 multipod로 생성
# 생성한 yaml 파일을 실행할 때는 kubectl create 명령어 사용
$ kubectl create -f pod-multi.yaml
$ kubectl get pods
$ kubectl get pods -o wide
$ kubectl exec multipod -it -c centos-container -- /bin/bash
/# curl http://loalhost:80
/# exit
$ kubectl logs multipod -c nginx-container
- multipod의 내용을 자세히 확인하기
$ kubectl describe pod multipod
- nginx 컨테이너로 접속하기
# multipod라는 이름의 Pod 내 nginx-container라는 컨테이너에서
# bash 쉘을 인터랙티브 모드로 실행하여,
# 사용자가 컨테이너 내부에서 명령어를 직접 입력하고 실행할 수 있도록 함.
$ kubectl exec multipod -c nginx-container -it -- /bin/bash
- 명령어 분석
kubectl exec
: kubernetes 클러스터에서 실행 중인 컨테이너 내부에 명령을 실행할 때 사용됩니다.multipod
: 현재 명령을 실행하고자 하는 Pod의 이름입니다.c nginx-container
:c
플래그는 특정 컨테이너를 지정하는 데 사용. 만약 Pod가 여러 컨테이너를 가지고 있다면,c
옵션으로 명령어를 실행하고자 하는 특정 컨테이너를 지정해야 합니다. 여기서는nginx-container
라는 이름의 컨테이너에서 명령어를 실행하겠다는 것을 의미합니다.it
: 이 옵션은 두 부분으로 나뉩니다.i
(또는-stdin
)는 컨테이너의 표준 입력에 연결합니다, 즉 입력을 컨테이너로 전달할 수 있게 해줍니다.t
(또는-tty
)는 가상 터미널(TTY)을 할당합니다. 결합된it
옵션은 인터랙티브 모드에서 명령을 실행하려 할 때 사용되며, 사용자가 컨테이너 내부에서 인터랙티브 쉘을 사용할 수 있게 해줍니다.-
: 이 기호는kubectl exec
명령어에 대한 인수가 끝났음을 나타내고, 뒤따르는 것은 컨테이너 내에서 직접 실행될 명령임을 나타냅니다. 즉,-
이후에 나오는 것은 컨테이너 안에서 실행할 명령어입니다./bin/bash
: 이 부분은 컨테이너 내에서 실행될 실제 명령어입니다. 여기서는 bash 쉘을 시작하는 명령어입니다./bin/bash
를 실행하면, 사용자는 컨테이너의 bash 쉘에 접근할 수 있게 되며, 컨테이너 내부에서 직접 명령어를 입력하고 실행할 수 있습니다.
- 인터렉티브 모드: 사용자가 프로그램이나 명령어와 직접 상호 작용할 수 있는 모드이 모드에서는 사용자의 입력을 받아들이고, 그에 따라 실시간으로 응답하거나 작업을 수행한다.
kubectl exec
명령어에서-it
옵션을 사용하는 경우 클러스터 내의 컨테이너에 대해 인터렉티브 쉘을 시작할 수 있습니다. 이를 통해 사용자가 컨테이너 내부에서 명령을 실행하고, 실행 결과를 바로 확인하며 추가 명령을 입력할 수 있습니다.
⇒ 사용자가 컨테이너 내부에서 로컬 시스템을 사용하듯이 작업할 수 있다.
kubectl logs [pod명] -c [container명]
: [pod명] 안의 [container명]의 로그를 출력
nginx가 80포트를 통해 웹서비스를 하고 있으면, 커넥션 시 연결에 성공하는 경우와 실패하는 경우가 있는데 이러한 로그를 확인하는 명령어이다.
- 멀티 컨테이너
- -c 옵션으로 container명을 입력해줘야한다.
# [멀티 컨테이너] nginx-container의 로그를 확인하는 명령어
kubectl logs multipod -c nginx-container
- 싱글 컨테이너
- 싱글이므로, 컨테이너명을 입력해줄 필요가 없기 때문에 파드명만 입력하면 된다.
# [싱글 컨테이너] web1 파드의 로그를 확인하는 명령어
kubectl logs web1
'Development > k8s' 카테고리의 다른 글
[따배쿠] 기본 명령어 학습하기 (0) | 2024.02.13 |
---|---|
[따배쿠] 쿠버네티스 개요 (0) | 2024.02.13 |