# pod란?
컨테이너를 표현하는 k8s의 최소단위(멀티컨테이너도 됨)
내가 실수 했던게.. 파드하나가 컨테이너인줄 알았는데 api단위라더라.
아이피 하나씩 부여되고 여기엔 여러 컨테이너가 들어갈수도, 하나만 있을수도 있을 수 있는듯.
포트포워딩으로 나눠줄테고.. 예를들어 3티어 아키텍쳐를 파드하나에 쑤셔넣었다고 보면 될듯
암튼 이렇다고 한다.
# pod 만들어서 돌리기
kubectl run 파드이름 --image=nginx:latest
# 야믈 템플릿 따기
kubectl run test --image=nginx:latest --dry-run -o yaml
현재 생성된걸로 할수도 있고..한데 기본적인 yaml따려면 이게 가장 편한듯?
>xxxx.yaml로 아예 파일생성까지도 할 수 있다.
이 명령어를 치면
해당 이미지 pod의 기본 yaml형식이 쭈루룩 출력된다.
# yaml형식으로 pod만들기
kubectl create -f 야믈파일경로
kubectl create -f pod-nginx.yaml
이런식으로 만들 수 있다.
# json도 돼~
kubectl get pods 파드이름 -o json
# 실제로 웹서버로 띄운 파드에 접속할 수 있을까?
kubectl get pods 파드이름 -o wide
요걸로 아이피 확인하고
curl 파드아이피
nginx로 만들어진 컨테이너에 curl하면 저렇게 접속이 됨. 웹서버니까.
# 실행중인 컨테이너 이미지 보기
웬만한건 describe에서 grep으로 잡아내면 될듯
kubectl describe 파드이름 | grep iamge
# 실시간 파드상태 보기
watch kubectl get pods -o wide
실시간으로 나온다. 리소스들 테스트 하기에 좋은듯.
2초마다 저 명령어를 반복실행함. 리눅스단꺼임
kubectl get pods -o wide --watch
얘도 실시간 보는건데 로그형식으로 찍어주는것 같음
이거 키고 pod를 새로 하나 만들면,
이렇게 펜딩이었다가 컨테이너 만드는 중이었다가 running으로 로그찍히듯이 되더라.
얜 쿠버네티스꺼임
# 파드 생성순서
스케줄링전까지는 pending 받고나서는 running상태, 그다음 successed/failed
아까봣던 --watch옵션으로 확인가능하다.
# 멀티플 컨테이너 파드
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: testtt
name: babo-pod
spec:
containers:
- image: nginx:latest
name: nginxtest
ports:
- containerPort: 80
- image: centos:latest
name: centostest
command:
- sleep
- "10000"
ports:
- containerPort: 3000
이렇게 containers라는곳에 리스트형식으로 컨테이너를 여러개 넣어주면 된다.
그리고 create로 생성해보면
컨테이너가 두개 띄워진걸 확인 할 수 있다.
요렇게 생긴거다.
# 컨테이너 내부 접속하기 exec
일단 컨테이너의 이름을 알아야한다.
아까 만든 멀티 컨테이너 파드를 describe로 쳐보면
kubectl describe pod babo-pod
이렇게 nginxtest와 centostest 컨테이너가 띄워져있다.
kubectl exec 파드이름 -c 컨테이너이름 -it -- /bin/bash
이렇게 파드이름과 컨테이너 이름을 명시해서 해당 컨테이너에 접속가능하다.
이렇게 접속되어 커맨드를 칠수 있다.
# 싱글 컨테이너 파드는?
kubectl exec nginxpod -it -- /bin/bash
그냥 접속된다.
참고로 멀티컨테이너 파드는 -c옵션으로 컨테이너 이름을 명시해주지 않으면 둘중하나로 접속됨.
얘는 default컨테이너가 nginxtest라서 여기로 접속됐다고 함
# 컨테이너 로그보기
kubectl logs 파드이름 -c 컨테이너이름
nginxtest파드의 로그를 볼 수 있다.
describe의 event와는 다르다. 컨테이너의 로그다.
이것도 싱글컨테이너라면 그냥 -c옵션 없어도된다.
# edit
이거 하면 vi에디터 켜지면서 yaml형식으로 나오는데, 거기서 내용수정하면 수정한 내용이 적용됨
근데 이미 돌아가고 있는 pod에 중요한거 수정하려고하면 에러뜨고 수정안되는경우가 많아서 잘 쓸지는 모르겠음
# 전체 pod 삭제
kubectl delete pods --all
모든 파드 삭제
기본 네임스페이스꺼만 다 삭제되는듯
# 모든 namespace pods보기
kubectl get pods --all-namespaces
다뜬다
# 실제 없는 이미지로도 만들어진다.
kubectl run redis --image=redis123 --dry-run -o json > redis.json
이렇게 없는 이미지 redis123으로 yaml파일 생성하고
만들어보면,.
만들어진다.
상태를 보면
이미지 pull에러가 떠버렸다
자세한 내용을 보려면 describe에서 이벤트를 보자
kubectl describe pod redis
없는 이미지로 만들려고 헀으니 이렇게 이벤트에러가 뜨는것이다.
'k8s > concept' 카테고리의 다른 글
pod/ static pod & resource & 환경변수 (0) | 2023.11.27 |
---|---|
pod/ liveness-probe(self-healing) (0) | 2023.11.27 |
pod/ flow & init container & infra container (0) | 2023.11.26 |
쿠버네티스 namespace (0) | 2023.11.23 |
쿠버네티스 기초 kubectl 명령어 (0) | 2023.11.20 |