2025. 3. 10. 22:02ㆍ카테고리 없음
- kubectl api-resources
- kubectl을 사용 시 약어를 알기 위해 주로 사용
- kubectl --help
- 기본 도움말
- 응용해서 kubectl proxy --help 입력하면 kubectl proxy 명령어에 대한 내용이 자세히 나옴
- kubectl get nodes
- 연결된 노드 정보를 보는 명령어
- 좀 더 자세히 보고 싶다면 kubectl get nodes -o wide 입력
- 아주 자세히 보고 싶다면 kubectl describe node [노드명] 입력
- kubectl get pods
- 연결된 파드 정보를 보는 명령어
- 좀 더 자세히 보고 싶다면 kubectl get pods -o wide 입력
- 아주 자세히 보고 싶다면 kubectl describe pod [이름] 입력
- 연결된 파드 정보를 보는 명령어
- kubectl run [이름] --image=nginx:1.14 --port 80
- 컨테이너 생성 명령어
- [이름] 란은 자신이 원하는 이름 입력
- 하나의 파드를 실행할 때 사용
windows 환경에서 docker desktop으로 kubernetes를 kubeadm으로 실행했을 때의 위 커맨드를 입력했을 경우 추가 내용
- 위 환경에서 kubeadm은 single-node 기반이며 multi-node를 하고 싶다면 kind를 해야 한다
- 위 환경에서 CNI는 docker desktop이 자동으로 만들기 때문에 수동 변경은 불가능 하다(내가 잘못 알고 있을 수 있음)

생성 후 IP를 조회해 보니 10.1.0.14 이길래 wsl 내에서 curl 10.1.0.14 하니 접속이 안됬다
- curl: (28) Failed to connect to 10.1.0.14 port 80 after 132733 ms: Couldn't connect to server 에러 발생
에러를 조사해 보니 kubectl run 명령어로 생성된 파드는 기본적으로 클러스터 내에서만 접근 가능하다고 한다
그렇기 때문에 curl로 직접 접근하려면 포트 포워딩을 하거나 Service를 생성해야 한다고 한다
포트 포워딩을 포그라운드로 실행하고 포트는 8080:80으로 매칭시켜서 실행했다

- kubectl port-forward pod/webserver 8080:80 명령어
이후 wsl cli를 하나 더 킨 다음 curl로 접속해 보니 잘 된다!
- curl localhost:8080 명령어
위 방법은 wsl 내에서의 접속 방법이라 외부에서 접속하려면 서비스 방식으로 해야 한다
그리고 Nginx Ingress Controller 방법도 있는 거 같은데 잘 모르겠다.. 배우는 단계라 그냥 위 방법으로 하나씩 알아 가는 중!
만약, 실행 중인 포트포워드 정보를 알고 싶다면 ps aux | grep 'kubectl port-forward' 입력

- kubectl run webserver --image=nginx:1.14 --port 80 --dry-run
- 이미 실행중인 webserver 파드에 --dry-run 옵션을 사용 안 하고 다시 실행할 경우 중복 에러가 난다
- --dry-run 옵션을 붙일 경우 해당 명령어가 실행 가능한지 확인하는 용도의 옵션이다
- 이 기능을 활용해서 yaml 파일을 생성할 수 있고 추후 쿠버네티스가 해당 파일을 참고하여 실행 가능하다
- kubectl run webserver --image=nginx:1.14 --port 80 --dry-run -o yaml > [이름]. yaml
- kubectl create deployment [이름] --image=httpd:latest --replicas=3
- 컨테이너 생성 명령어
- [이름] 란은 자신이 원하는 이름 입력
- 여러 개의 파드를 실행할 때 사용
- 확인할 때는 kubectl get pods를 해도 되지만 kubectl get deployments.apps 도 가능
- kubectl get pod webserver -o yaml
- wide가 아니라 yaml 형식으로 출력하고 싶을 경우
- kubectl get pod webserver -o json
- wide가 아니라 json 형식으로 출력하고 싶을 경우
- kubectl exec webserver -it -- /bin/bash
- 쿠버네티스로 실행 중인 파드 안에 접속하고 싶을 경우 사용
- nginx의 웹 문서 경로는 cd /usr/share/nginx/html/ 이동
- kubectl logs webserver
- 실행중인 파드의 로그를 보고 싶을 때 사용
- kubectl edit deployments.apps [이름]
- 실행중인 파드의 내용을 수정하고 싶을 때 사용
- 위와 같이 vi 모드로 접속되며 수정하고 싶은 내용 수정
- kubectl delete pod webserver
- 실행 중인 파드를 삭제하는 명령어
- 현재 실행중인 파드를 전부 종료하고 싶을 경우 kubectl delete pod -all 입력
- 위와 같이 있을 때 전부 삭제하려면 kubectl delete deployments.apps mainui 하면 전체 삭제
- kubectl create -f web-test.yaml
- yaml 형식의 파일을 쿠버네티스 파드로 실행하는 명령어
- kubectl get namespace
- 현재 사용 중인 namespace 목록 명령어
- kubectl get pods 실행 시 default namespace의 pods 목록을 가져온다
- kubectl get pods --namespace kube-system
- 다른 네임스페이스의 파드 목록을 가져오는 명령어
- kubectl get pods --all-namespaces
- 모든 네임스페이스 안의 파드 내용을 보는 명령어
- kubectl create namespace blue
- 네임스페이스 생성 명령어
- kubectl create namespace orange --dry-run -o yaml > ns-orange.yaml
- yaml 파일로 만들어서 추후 쿠버네티스에게 실행하기 위한 yaml 파일을 만드는 명령어
- kubectl create -f ns-orange.yaml
- 생성된 yaml 파일을 실행하기 위한 명령어
- kubectl create -f web-test.yaml -n blue
- blue 네임스페이스 안에 web-test.yaml 내용의 파드 실행 명령어
web-test.yaml 파일 내용은 아래 그림과 같다

만약, orange 네임스페이스에서 실행하기 윈 한다면 내용을 추가한다

kubectl create -f web-test.yaml 실행하면 자동으로 orange 네임스페이스에 파드 실행된다
- kubectl config --help
- 쿠버네티스 config 사용 관련 도움말 명령어
- kubectl config view
- 현재 설정된 쿠버네티스 config 속성 확인 명령어
- kubectl config set-context [원하는 이름] --cluster=[정의된 cluster 이름] --user=[원하는 이름] --namespace=[생성한 네임 스페이스]
- default 네임스페이스에서 다른 네임스페이스로 베이스 네임스페이스를 변경하기 위해 config에 context를 설정하는 명령어
- [원하는 이름] 안의 내용은 자신이 원하는 내용으로 정해도 상관없다
- cluster는 view로 확인한 cluster를 매칭시켜준다
- 예) kubectl config set-context blue@AA --cluster=docker-desktop --user=CC --namespace=blue
- kubectl config current-context
- 쿠버네티스에서 현재 사용 중인 context 확인 명령어
- kubectl config use-context blue@AA
- 베이스 네임스페이스를 변경하는 명령어
베이스 네임스페이스 변경 후 kubectl get pods를 실행하면 비밀번호를 물어본다
docker-desktop에서 연결된 로그인과 비밀번호를 물어보는 거 같은데 까먹어서 확인 못했다..

- kubectl delete namespaces blue
- 네임스페이스를 지우는 명령어
- 네임스페이스 내부의 파드도 삭제되기 때문에 해당 명령어는 조심해서 사용해야 함
- kubectl explane [이름]
- [이름] 란에는 여러 오브젝트가 들어갈 수 있다. 예를 들어 pod 입력 시 쿠버네티스가 실행 중인 파드의 상세한 정보를 알 수 있다
- 실행할 yaml 형식 파일 내용 중 apiversion이 몇인지 알고 싶을 때 사용
- 내용을 보면 pod yaml의 fields와 매칭되는 값들을 링크를 통해서 알려준다
- 보통 하나의 파드에 하나의 컨테이너가 실행된다
- 그렇지만 마이크로서비스 상태에서 유기적으로 연결된 애플리케이션들은 하나의 파드에 해당 애플리케이션들을 실행시키는 게 좋은 상황도 발생한다
- 예) 게임 서버가 있고 게임 서버의 로그를 수집하는 fluentd를 하나의 파드로 실행
- kubectl describe pod [이름]
- 실행 중인 이름의 파드 속성을 볼 수 있다
- 내용을 보면 Containers에 webserver 컨테이너에 대한 내용인데 하나밖에 없으니 해당 파드에서는 해당 컨테이너만 실행 중인 상태(1 대 1)
- 하나의 파드에 여러 컨테이너를 실행시키기 위한 yaml 파일 내용이다
- 내용을 해석하자면 nginx와 centos를 실행하는 컨테이너 2개와 그 컨테이너를 m-pod라는 이름으로 실행하라는 내용
- yaml 형식은 영어 대/소문자를 구문 하기 때문에 잘못 쓸 경우 에러가 난다
- yaml 형식은 띄어쓰기를 구문하기 때문에 잘못 쓸 경우 에러가 난다
- 생성 후 내용을 확인할 경우 Ready는 2/2로 나오는데 실행된 컨테이너 수 / 전체 컨테이너 수 상황이다
- Status는 Running인데 만약 2개의 컨테이너 중 하나 또는 둘 다 실행이 실패하거나 셧다운 된다면 상태는 Running가 아니다
- 하나의 파드에 nginx-container, centos-container 두 개의 컨테이너가 실행 중인 상태에서 nginx-container 컨테이너에 접근하고 싶을 경우 kubectl exec mpod -c nginx-container -it -- /bin/bash 실행
- centos-container에 접속해서 curl localhost:80을 하면 nginx-container에서 실행 중인 nginx가 출력된다
- 하나의 파드에 세팅된 아이피가 10.0.0.1이라면 두 컨테이너가 하나의 아이피를 공유한다
- 그렇기 때문에 centos-container에는 nginx가 실행 중이지 않지만 nginx-container 컨테이너에서 실행 중인 nginx에서 접속하여 페이지를 출력한 것이다
- kubectl logs mpod -c nginx-container
- 쿠버네티스의 파드 안에 컨테이너들 로그를 확인하는 명령어
- -c 옵션은 안쓸 경우 모든 컨테이너의 로그가 출력된다
- kubectl get pods -o wide --watch
- 리눅스 watch 명령어처럼 실시간으로 상태를 보는 명령어