애플리케이션은 기능의 단위이다.
오브젝트를 조회하는 명령어
오브젝트를 생성하는 명령어
run
명령어를 통해 nginx 파드를 생성한다.
kubectl run nginx --image=nginx
create
명령어를 통해서 nginx 디플로이먼트 파드를 생성한다.
kubectl create deploy nginx --image=nginx
또는
kubectl create deployment nginx --image=nginx
apply
명령어를 통해서 yaml 파일을 이용해서 파드를 생성한다.
이러한 yaml 파일은 현재 deployment
로 파드를 생성하도록 스크립트가 작성되어있다.
kubectl apply -f ~/_Lecture_k8s_learning.kit/ch2/2.3/apy-nginx.yaml
3개의 deployment
파드가 생성되는 것을 확인할 수 있다.
오브젝트를 삭제하는 명령어
delete
명령어를 통해 생성된 파드를 삭제 한다.
kubectl delete pods nginx
만약 deployment
된 파드를 삭제한다면 어떻게 될까?
기존 3개의 파드에서 하나를 지워보자.
kubectl delete pods nginx-6799fc88d8-2lhnv
현재 scale
명령어를 통해 replicas
의 수가 3
으로 설정되어 있으므로 3개를 맞추기 위해 새로운 파드가 생긴 것을 확인할 수 있다.
기존 3개의 파드를 전체 다 지워보자.
delete
시 deployment
값을 넣어서 지워주면 된다.
kubectl delete deployments.apps nginx
파드 내부의 특정 컨테이너로 접속하는 명령어
kubectl exec apy-nginx-558dd8d455-299n2 -it -- /bin/bash
각 플래그의 역할
apy-nginx-558dd8d455-299n2
: 실행하려는 Pod의 이름
-it
: 두 가지 플래그의 결합으로 이루어져 있다.
-i
: 표준 입력을 유지하도록 하여 터미널과의 상호 작용을 허용한다.-t
: 터미널 환경을 생성한다.-- /bin/bash
: Bash 셸을 실행
파드 갯수를 늘리거나 줄이는 명령어
scale
명령어를 통해서 nginx 디플로이먼트 파드의 개수를 증가시킨다.
kubectl scale deployment nginx --replicas=3
배포된 오브젝트를 수정하는 명령어
kubectl edit deployment apy-nginx
현재 3개의 deployment가 있는 것을 확인
insert
를 눌러 수정모드에 진입.replicas
를 3에서 1로 변경esc
를 눌러 수정모드를 종료wq
를 입력 후 Enter
를 눌러서 저장.3개에서 1개로 변경됨.
-o yaml
-o wide가 아닌, -o yaml 포멧을 입력하면 배포된 오브젝트의 실제 yaml 코드를 확인할 수 있다.
kubectl get pod nginx -o yaml
배포를 하면서 동시에 yaml 코드를 확인하는 것 또한 가능하다.
k run nginx --image=nginx -o yaml
dry-run=client
테스트용으로 드라이하게 실행시킨다는 뜻.
즉, 실제로 코드를 실행시키는 것이 아닌, 이를 실행 시키는 경우 이후 어떻게 될 지를 사용자에게 알려준다.
kubectl run nginx -image=nginx \ --dry-run=client -o yaml
위 명령어를 실행하게 되면, 실제로 실행이 된 것처럼 yaml 코드를 결과로 생성해 준다.
단, 실제로 nginx 파드가 생성되지는 않는다!
이렇게 결과로 출력되는 yaml 코드를 >
를 이용해 파일로 저장 후, apply
명령어를 통해서 생성하는 것 또한 가능하다.
k run nginx --image=nginx --dry-run=client -o yaml > po-nginx.yaml
k apply -f po-nginx.yaml
잘 생성되는 것을 확인할 수 있다.
deployment 또한 이를 이용해서 yaml 파일을 ouput으로 출력하고, 또 생성할 수 있다.
k create deployment nginx-deploy --image=nginx --dry-run=client -o yaml > create-deploy.yaml
네임스페이스를 기준으로 상태를 파악
k get event (default 네임스페이스로 동작)
이처럼 실행된 이벤트들이 쭉 뜨는 것을 확인할 수 있는데, 중간에 ErrImagePull
메세지가 나온 것이 보인다.
deployment 파드를 생성에 문제가 생긴 것 같은데 확인해보도록 하자.
실제로 파드를 확인해보니 ErrImagePull
상태로 파드가 제대로 생성이 안 되어있었다.
그럼 이 파드를 생성하는 yaml 파일에 문제가 있는 지 확인해보자.
실제로 image의 이름이 잘못된 것을 확인할 수 있었다.
이러한 방식으로 오류를 추적할 수 있다.
하지만 해당 네임스페이스의 모든 events에 대해서 다 나오므로, 가시성이 떨어지고 주는 정보의 깊이도 너무 얕아 사실 잘 안쓴다😅
파드 즉, 오브젝트에 연관된 모든 내용들을 파악
(🤩 정말 정말 정말 자주 쓴다!)
주로 파드의 이름을 기준으로 본다.
다음과 같이 deployment
를 기준으로 describe
를 확인할 수도 있는데 사실상 이를 통해서는 왜 파드의 생성이 실패했는지 알기 어렵다.
k describe deployment evt-desc
결국 deployment한 파드의 생성이 안 된 것 이지 deployment
자체가 실패한 것은 아니기 때문이다.
따라서 정확한 확인을 위해서는 파드를 기준으로 확인한다.
k describe pod evt-desc-66999944cc-5br7k
현재 상태가 어떠한지, 또 왜 이러한 이유가 발생했는지 알 수 있다.
파드(오브젝트) 내 컨테이너(이미지)의 상태를 파악
파드안에 있는 컨테이너의 문제는 describe
로 볼 수 없다.
따라서 이때는 logs를 사용한다.
k logs evt-desc-66999944cc-5br7k
하지만 파드내의 컨테이너가 정상적으로 생성되지 않은 경우, 로그를 볼 수 없다.
당연하게도, 컨테이너(이미지)가 정상적으로 생성되지 않았으므로 애시당초 컨테이너의 로그가 없기 때문이다.
logs 명령로 파드의 이름을 넣게되면 다음과 같이 해당 파드 내 컨테이너에서 실행되는 내용들이 logs로 출력되게 된다.