1. 쿠버네티스 기본 명령어 정리
1) command
명령어 | 설명 |
get | 지정한 객체 목록을 한 줄에 하나씩 출력 |
describe | 보다 더 자세한 정보를 확인 할 수 있다. |
apply | 매니페스트에 기술된 객체를 생성 (존재하면 에러 출력) |
delete | 매니페스트에 기술된 객체 삭제. |
config | 접속 대상이 되는 콘텍스트(k8s 클러스터, 네임스페이스, 유저 등) 목록 출력이나 삭제 |
exec | 컨테이너 대화형으로 커맨드 실행, 파드 내에 컨테이너가 여러개 존재한다면, -c옵션으로 '컨테이너_명'을 지정 - 컨테이너_명은 kubectl get describe <파드_명>으로 확인 |
run | 파드 실행 |
log | 컨테이너에 로그 표시 |
2) resource
명령어 | 설명 |
pod(po) | 컨테이너의 최소 실행단위로 실행 시 파드 네트워크상의 IP_주소를 할당받으며 한 개 이상의 컨테이너를 포함 할 수 있다. |
poddistruptionbudget(pdb) | 파드가 지정한 개수 이하가 되지 않도록 디플로이먼트, 스테이트풀셋, 리플리카셋, 리플리케이션 컨트롤러의 동작을 제어한다. |
services(svc) | 파드를 클라이언트들에게 공개해서 접속하게 함 |
endpoints(ep) | 서비스를 제공하는 파드의 IP_주소와 포트 관리 |
ingress(ing) | 서비스 공개, TLS 암호, 세션 유지, URL 매핑 기능 제공 |
deployment(deploy) | 파드의 리플리카 수, 자기회복, 롤아웃, 롤백 등을 제어하는 컨트롤러 |
replicaset(rs) | 파드의 리플리카(복제) 수를 제어하는 컨트롤로로 디플로이와 연계해서 동작 |
job | 배치 처리를 수행하는 파드를 관리하는 컨트롤러 |
namespace(ns) | 쿠버네티스 클러스터를 논리적으로 분할해서(VLAN 느낌) 사용 |
3) 옵션
명령어 | 설명 |
- n 네임스페이스 명 | 조직을 지정된 네임스페이스로 한정시킴 |
-a11-namespaces -A | 모든 네임스페이스에 적용함 |
0=yaml | YAML 포맷으로 API 객체 표시 |
o=wide | 추가 정보 표시(파드의 IP, 배치된 노드_명 등) |
0=json | JSON 포맷으로 API 객체 표시 |
o=custom-columns=<spec> | 항목을 지정해서 목록 표시 |
-o=isonpath-file=‹file name> | jsonpath 형식의 템플릿 파일로 출력할 내용 지정 |
4) kubectl command
=> columns.txt 파일을 불러서 실행한다면
▸ kubectl get pods –o=custom-columns-file=columns.txt 해주면 된다.
=>json_temp.txt 파일을 불러서 실행한다면
▸ kubectl get pods –o=jsonpath-file=json_temp.txt 해주면 된다.
=>정밀하게 본다면
▸ kubectl get pods –o=jsonpath='{range.items[*]}{.metadata.name}{"\t"}{.status.start Time}{"\"}{end}' 해주면 된다.
▸ KUBECONFIG=~/.kube/config:~/.kube/kubeconfig2 kubectl config view
▸ kubectl config get-contexts와
▸ kubectl config use-context <my-cluster-name> : 콘텍스트 목록 표시, 콘텍스트 교체
▸ kubectl config current-context : 선택 중인 콘텍스트 보기
미리 —user=<유저_명>, --cluster=<쿠버네티스_클러스터_명>이 등록되어 있다면
▸ kubectl config set-context production-c3 —namespace=production —cluster=c3 —user=admin-c3 : 네임스페이스를 지정해서 콘텍스트 작성
▸ kubectl config use-context production-c3 : 네임스페이스 변경
5) 객체 생성
- YAML 이나 JSON 형식의 매니페스트 파일로부터 객체를 생성할 수 있는데 이미 객체가 있다 면 create를 apply로 바꿔줘야 오류가
발생하지 않는다.
- apply는 기존에 존재하는 객체에 적용할 변화가 없다면 unchanged로 나오고, 정상적으로 변경되면 configured 으로 나오면 정상적이다.
- kubectl create –f <my_manifest.yml> : 매니페스트 파일로부터 객체 생성
- kubectl create –f <my_manifest1.yml> -f <my_manifest2.yml> : 복수의 매니페스트 파일로부터 객체 생성
- kubectl create –f <manifest_directory> : yaml, yml, json 등 확장자 등 매니페스트 파일이 있는 디렉터리 대상 객체 생성
- kubectl create –f https://raw.githubusercontent.com/Jpub/15_DankdK/master/ step08/deployment1.mal : 웹 URL로부터 객체 생성
6) 객체 삭제
- 한번 만들어진 객체는 삭제 때까지 지속되므로 불필요한 객체는 삭제하는데 매니페스트나 매니페스트가 들어있는 디렉터리를 지정해서 삭제하는 것이 좋다.
- kubectl delete –f <my_manifest.yaml> : 매니페스트_파일로부터 삭제
- kubectl delete po nginx : 파드_명으로 삭제
- kubectl delete deploy web-deploy : 디플로이먼트_명으로 삭제
- kubectl delete service webservice : 서비스_명으로 삭제
- kubectl delete –f <directory> : 디렉터리 내 매니페스트로부터 삭제
- kubectl delete pods —all : 모든 파드를 일괄적으로 삭제
7) 객체 표기
[+] 객체를 표시할 때 get와 describe명령을 사용
- get는 하나의 객체를 한 줄에 표시되고
describe는 상세하게 정보를 표시하는 명령어(여러 리소스를 , 로 나열하면 여러 리소스 표시)
- kubectl get service(OR kubectl get svc : 단축형) : 서버 리스트 표시
- kubectl get pods(OR kubectl get po)
- kubectl get po —all-namespaces : 모든 네임스페이스에서 파드 표시 네임스페이스_명을 별도로 지정하지 않으면 default가 사용된다. 여기서 kube-system은 설정해둔 네임스페이스_명이다.
- kubectl get po –n kube-system : 클러스터 내의 kube-system 네임스페이스 정보 표시
- kubectl get po –o wide : 파드의 IP_주소나 할당된 노드를 자세히 표시
쿠버네티스에서 네임스페이스는 단일 클러스터 내에서의 리소스 그룹을 격리하는 VLAN과 같은 메커니즘을 제공한다. 리소스의 이름은 네임스페이스 내에서 유일해야 하며, 네임스페이스 간에서는 유일할 필요가 없다. 네임스페이스는 여러 개의 팀이나 프로젝트에 많은 사용자가 있는 환경에서 사용하도록 만들어졌기 때문에 사용자가 거의 없거나 수십명 정도가 되는 경우에는 네임스페이스를 고려할 필요가 없다.
2. 실습
[+]kubectl get po -o wide
[+] 서비스 상태 조회
- Kubernetes 클러스터 내에서 현재 서비스 (Service)의 상태를 조회하는 명령어
[+] kubectl get pad
- 실행중인 모든 파드의 정보를 확인 / 별로도 이름을 선택하지 않았다면, 모든 정보를 확인할 수 있다.
- 디폴트네임스페이스는 별도로 네임스페이스를 지정하지 않아서 발생
- kube-system 네임스페이스는 일반적으로 Kubernetes 클러스터 시스템 관리자가 접근하여 시스템 구성 조정 및 모니터링할 때 사용
[+] 서비스 확인
- 간략하게 kubectl get svc, 자세히 kubectl describe svc
[+] kubectl config get-context
- 명령어는 현재 kubectl 구성 파일에 정의된 모든 컨텍스트(Context)의 목록을 출력
[+] 파드 상태 확인
- kubectl get pods -o wide 명령어
- Kubernetes 클러스터 내에서 실행 중인 모든 Pod의 상태를 조회하고, 더 많은 정보를 포함하여 출력
[+] 로그 확인
- kubectl log nginx
[+] 객체 삭제하기
- kubectl delete pod nginx 삭제하기(delete pod)
[+] deploy와 pod를 동시에 확인하기
[+] 라벨 붙이기
- 잘 사용하지는 않는다.
kuvectl label pods nginx
[+]edit 명령을 통해 실행중인 객체를 변경하기
- kubectl edit deployment.apps/nginx 편집(edit)을 통해 내용을 수정할 수 있다.
- 기본은 vi로 열리지만, 환경변수를 사용하여 별도의 에디터로 열수 있다.
- KUBE EDITOR="nano" kubectl edit deployment .apps/nginx
[+] yaml 수정
- replicas= 옵션을 수정하여으로 3개 pod를 바로 지정할 수 있다.
- kubectl scale --replicas=5 deployment/nginx 명령을 통해 바로 5개로 늘려서 실행할 수 있다.
[+] 노드 보수 작업
- 컨테이너 실행 중 노드의 보수작업을 진행한다면, 해당 노드만 정지하고 작업 완료후 다시 스케쥴링할 수 있다.
- node1의 스케줄을 정지(kubectl cordon node1)하고 분리하고(drain dode1 --force) 삭제(elete node1)하고
다시 스케쥴링(uncordon node1)하여 작업한다.
[+]
kubectl get pods -o wide
'소소한 IT이야기 > 클라우드' 카테고리의 다른 글
[Cloud] 컨테이너 네트워크--003 (4) | 2023.03.24 |
---|---|
[Cloud]Docker 웹 서버 구축 및 서비스 - 002 (feat. 웹 서비스) (1) | 2023.03.14 |
[Cloud] Docker 설치 및 구성 (feat. ubuntu22.04) (1) | 2023.03.13 |