kubectl version --short
버전 정보
> kubectl version --short
Client Version: v1.16.6-beta.0
Server Version: v1.17.12
kubectl api-resources
쿠버네티스에서 사용가능한 오브젝트 리스트
> kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
endpoints ep true Endpoints
events ev true Event
limitranges limits true LimitRange
namespaces ns false Namespace
nodes no false Node
persistentvolumeclaims pvc true PersistentVolumeClaim
... 후략
kubectl apply -f ${yaml_file_name}
yaml 파일을 이용해 리소스 생성
> kubectl apply -f nginx-pod.yaml
pod/my-nginx-pod created
kubectl get ${object_type}
현재 쿠버네티스에 존재하는 특정 오브젝트의 리스트
> kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-pod 1/1 Running 0 6m28s
- -o wide 옵션을 추가하면 더 많은 정보를 얻을 수 있다.
- --show-lables 옵션을 추가하면 라벨을 함께 출력할 수 있다.
- -l ${label} 옵션을 통해 원하는 리소스만을 출력하는 용도로 사용할 수 있다.
kubectl describe ${object_type} ${resource_name}
해당 리소스의 자세한 정보 출력
> kubectl describe pods my-nginx-pod
Name: my-nginx-pod
Namespace: default
Priority: 0
Node: dkosv3-dev-worker-1/10.202.97.81
Start Time: Sat, 20 Feb 2021 17:26:20 +0900
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Pod","metadata":{"annotations":{},"name":"my-nginx-pod","namespace":"default"},"spec":{"containers":[{"image":"...
Status: Running
IP: 10.240.1.225
... 후략
kubectl exec -it ${pod_name} bash
해당 파드에 직접 접근
- -it 옵션을 사용해 배시 셸을 유지한다.
위의 describe에서 얻은 IP를 사용해 nginx에 접근해 보자
> kubectl exec -it my-nginx-pod bash
root@my-nginx-pod:/# curl 10.240.1.225
'
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.
kubectl exec -it ${pod_name} -c ${container_name} bash
- -c 옵션을 사용해 파드의 어떤 컨테이너에 대해 명령어를 수행할 것인지 명시한다.
> kubectl exec -it my-nginx-pod -c ubuntu-sidecar-container bash
root@my-nginx-pod:/# curl localhost
Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.
Thank you for using nginx.
kubectl logs ${pod_name}
파드 로그확인
> kubectl logs my-nginx-pod
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
10.240.1.225 - - [20/Feb/2021:08:37:36 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.0" "-"
10.240.1.225 - - [20/Feb/2021:08:40:19 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.0" "-"
kubectl delete -f ${yaml_file_name}
오브젝트 삭제
> kubectl delete -f nginx-pod.yaml
pod "my-nginx-pod" deleted
> kubectl get pods
No resources found in default namespace.
kubectl delete ${object_type} ${resource_name}
오브젝트 삭제
kubectl delete deployment,pod,rs --all
모든 리소스를 삭제한다.
> kubectl delete deployment,pod,rs --all
deployment.apps "my-nginx-deployment" deleted
pod "my-nginx-deployment-85d657c94d-4hxjn" deleted
pod "my-nginx-deployment-85d657c94d-rc57k" deleted
pod "my-nginx-deployment-85d657c94d-rjxsb" deleted
kubectl edit ${object_type} ${resource_name}
리소스의 속성을 변경할 수 있도록 텍스트 편집기를 실행하며, 변경 사항을 적용하려면 파일을 저장한 뒤 빠져나오면 된다.
> kubectl edit pods replicaset-nginx-hldsk
pod/replicaset-nginx-hldsk edited
kubectl set image deployment ${deployment_name} ${prev_image}=${next_image} --record
해당 디플로이먼트가 보유한 포드의 특정 이미지를 변경한다.
yaml 파일에서 직접 image 항목을 변경하고 kubectl apply -f 명령어를 사용하거나, kubectl edit 명령어를 사용해도 동일하다.
- --record 옵션으로 변경된 디플로이먼트는 변경 사항을 기록한다.
> kubectl apply -f deployment-nginx.yaml --record
deployment.apps/my-nginx-deployment created
kubectl rollout history deployment ${deployment_name}
디플로이먼트의 포드 정보가 업데이트 된 경우, 리버전 정보를 확인할 수 있다.
> kubectl rollout history deployment my-nginx-deployment
deployment.apps/my-nginx-deployment
REVISION CHANGE-CAUSE
1 kubectl apply --filename=deployment-nginx.yaml --record=true
2 kubectl set image deployment my-nginx-deployment nginx=nginx:1.11 --record=true
kubectl rollout undo deployment ${deployment_name} --to-revision=${revision_version}
이전 버전의 레플리카셋으로 롤백한다.
> kubectl rollout undo deployment my-nginx-deployment --to-revision=1
deployment.apps/my-nginx-deployment rolled back
kubectl scale --replicas=${count} deployment ${deployment_name}
디플로이먼트의 포드 개수를 변경할 수 있다.
> kubectl scale --replicas=1 deployment hostname-deployment
deployment.apps/hostname-deployment scaled
kubectl create configmap ${configmap_name} --from-literal ${key}=${value}
--from-literal ${key}=${value} 옵션을 반복사용하여 해당 설정값을 가지는 컨피그맵을 생성한다.
> kubectl create configmap start-k8s --from-literal k8s=kubernetes \
--from-literal container=docker
kubectl get configmap ${configmap_name} -o yaml 명령어를 사용하면 yaml 형태로 생성된 컨피그맵을 확인할 수 있다.
> kubectl get configmap start-k8s -o yaml
apiVersion: v1
data:
container: docker
k8s: kubernetes
kind: ConfigMap
metadata:
creationTimestamp: "2021-02-22T12:45:34Z"
name: start-k8s
namespace: default
resourceVersion: "1568917"
selfLink: /api/v1/namespaces/default/configmaps/start-k8s
uid: f7c882b0-0bf7-4c33-a95e-5e9df6b55a51
kubectl create configmap ${configmap_name} --from-file ${file_name}
--from-file ${file_name} 옵션을 반복하여 해당 파일을 value로 가지는 컨피그맵을 생성한다.
> kubectl create configmap index-file --from-file index.html
configmap/index-file created
> kubectl describe cm index-file
Name: index-file
Namespace: default
Labels: <none>
Annotations: <none>
Data
====
index.html:
----
hello world!
Events: <none>
위와 같이 생성하는 경우 확장자를 포함한 파일이름이 키값이 된다.
- --from-file ${key}=${file_name} 과 같이 작성하면 파일이름이 아닌 키 값을 지정할 수 있다.
- --from-env-file 옵션을 사용하면 여러 개의 키-값 형태의 내용으로 구성된 설정 파일을 한꺼번에 컨피그맵으로 가져올 수 있다.
> cat multiple-keyvalue.env
mykey1=myvalue1
mykey2=myvalue2
mykey3=myvalue3
> kubectl create configmap from-envfile --from-env-file multiple-keyvalue.env
configmap/from-envfile created
> kubectl get cm from-envfile -o yaml
apiVersion: v1
data:
mykey1: myvalue1
mykey2: myvalue2
mykey3: myvalue3
kind: ConfigMap
metadata:
creationTimestamp: "2021-02-22T13:58:59Z"
name: from-envfile
namespace: default
resourceVersion: "1588099"
selfLink: /api/v1/namespaces/default/configmaps/from-envfile
uid: 12cfdf96-dfe4-455c-9d37-5f327a82f34a
- --dry-run -o yaml 옵션을 사용해 컨피그맵을 생성하지 않은 채로 yaml 파일을 생성하고 배포할 수 있다.
- 일반적으로 --dry-run은 특정 작업의 실행 가능 여부를 검토하는 명령어 또는 api를 의미한다.
- 예를 들어, kubectl apply, kubectl create와 같은 명령어에 해당 옵션을 추가하면 실행 가능 여부만 확인하고, 실제 리소스를 생성하지는 않는다.
> kubectl create configmap my-configmap --from-literal mykey=myvalue --dry-run -o yaml > my-configmap.yaml
> cat my-configmap.yaml
apiVersion: v1
data:
mykey: myvalue
kind: ConfigMap
metadata:
creationTimestamp: null
name: my-configmap
> kubectl apply -f my-configmap.yaml
configmap/my-configmap created
'Container Orchestration > Kubernetes' 카테고리의 다른 글
Kubernetes API Server, Group / RBAC란? (2) | 2023.04.19 |
---|---|
K8S 인증서 10년 만기 생성 방법 (2) | 2022.09.23 |
Ingress(인그레스) (0) | 2022.08.08 |
Kubernetes Probe (Liveness, Readiness, Startup) (0) | 2022.07.15 |
Kubernetes 어피니티 (0) | 2022.05.13 |