버전 정보
> kubectl version --short
Client Version: v1.16.6-beta.0
Server Version: v1.17.12
쿠버네티스에서 사용가능한 오브젝트 리스트
> 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
... 후략
yaml 파일을 이용해 리소스 생성
> kubectl apply -f nginx-pod.yaml
pod/my-nginx-pod created
현재 쿠버네티스에 존재하는 특정 오브젝트의 리스트
> kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-pod 1/1 Running 0 6m28s
-o wide
옵션을 추가하면 더 많은 정보를 얻을 수 있다.--show-lables
옵션을 추가하면 라벨을 함께 출력할 수 있다.-l ${label}
옵션을 통해 원하는 리소스만을 출력하는 용도로 사용할 수 있다.해당 리소스의 자세한 정보 출력
> 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
... 후략
해당 파드에 직접 접근
-it
옵션을 사용해 배시 셸을 유지한다.위의 describe에서 얻은 IP를 사용해 nginx에 접근해 보자
> kubectl exec -it my-nginx-pod bash
root@my-nginx-pod:/# curl 10.240.1.225
'<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
-c
옵션을 사용해 파드의 어떤 컨테이너에 대해 명령어를 수행할 것인지 명시한다.> kubectl exec -it my-nginx-pod -c ubuntu-sidecar-container bash
root@my-nginx-pod:/# curl localhost
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
파드 로그확인
> 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 nginx-pod.yaml
pod "my-nginx-pod" deleted
> kubectl get pods
No resources found in default namespace.
오브젝트 삭제
모든 리소스를 삭제한다.
> 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 pods replicaset-nginx-hldsk
pod/replicaset-nginx-hldsk edited
해당 디플로이먼트가 보유한 포드의 특정 이미지를 변경한다.
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 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 my-nginx-deployment --to-revision=1
deployment.apps/my-nginx-deployment rolled back
디플로이먼트의 포드 개수를 변경할 수 있다.
> kubectl scale --replicas=1 deployment hostname-deployment
deployment.apps/hostname-deployment scaled
--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
--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