Kubectl 기본 명령어 실습

jaeyeon ha·2026년 3월 7일

[교육] Kubernetes

목록 보기
4/34

kubectl 명령 사용법

kubectl [CMD] [TYPE] [NAME] [flags]
  • [CMD]
    run, create, apply, get, describe, edit, delete, exec, logs, ..., etc
  • [TYPE]
    pod, deployment, statefulset, daemonset, service, serviceaccount, ..., etc
  • [NAME]
    사용자 지정 리소스 이름
  • [flags]
    옵션

실습 :: pod 생성

[root@master ~]# kubectl run webserver1 --image=nginx --port=80
pod/webserver1 created
[root@master ~]# kubectl get pod
NAME         READY   STATUS    RESTARTS   AGE
webserver1   1/1     Running   0          16s
[root@master ~]# kubectl get pod -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
webserver1   1/1     Running   0          23s   10.233.75.2   node2   <none>           <none>

실시간 생성 진행 확인

[root@master ~]# kubectl get pod -o wide --watch
NAME         READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES
webserver1   0/1     Pending   0          0s    <none>   <none>   <none>           <none>
webserver1   0/1     Pending   0          0s    <none>   node2    <none>           <none>
webserver1   0/1     ContainerCreating   0          0s    <none>   node2    <none>           <none>
webserver1   0/1     ContainerCreating   0          1s    <none>   node2    <none>           <none>
webserver1   1/1     Running             0          9s    10.233.75.2   node2    <none>           <none>

생성 동작 과정 확인

[root@master ~]# kubectl describe pod webserver1
	···
Events:
  Type    Reason     Age    From               Message
  ----    ------     ----   ----               -------
  Normal  Scheduled  2m52s  default-scheduler  Successfully assigned default/webserver1 to node2
  Normal  Pulling    2m51s  kubelet            Pulling image "nginx"
  Normal  Pulled     2m44s  kubelet            Successfully pulled image "nginx" in 7.683609093s (7.683651672s including waiting)
  Normal  Created    2m44s  kubelet            Created container webserver1
  Normal  Started    2m43s  kubelet            Started container webserver1

▶ scheduler : 특정 노드에 작업 할당
▶ kubelet : 이미지 불러오기 → 컨테이너 생성 → 컨테이너 실행

실습 :: deploy 생성

[root@master ~]# kubectl create deployment webserver2 --image=httpd --replicas=3
deployment.apps/webserver2 created
[root@master ~]# kubectl get deploy
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
webserver2   3/3     3            3           2m15s

실습 :: portforwarding

[root@master ~]# kubectl port-forward webserver1 8080:80 &
[1] 219892
[root@master ~]# Forwarding from 127.0.0.1:8080 -> 80
Forwarding from [::1]:8080 -> 80

[root@master ~]# curl <http://localhost:8080>
Handling connection for 8080
Test Web Page

[root@master ~]# ps -ef | grep 'kubectl port-forward'
root      219892  184658  0 13:51 pts/0    00:00:00 kubectl port-forward webserver1 8080:80
root      220708  184658  0 13:52 pts/0    00:00:00 grep --color=auto kubectl port-forward
[root@master ~]# kill -9 219892
[root@master ~]# ps -ef | grep 'kubectl port-forward'
root      220854  184658  0 13:52 pts/0    00:00:00 grep --color=auto kubectl port-forward
[1]+  죽었음               kubectl port-forward webserver1 8080:80

실습 :: deploy 수정

[root@master ~]# kubectl get deployments.apps
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
webserver2   3/3     3            3           26m
[root@master ~]# kubectl edit deployments.apps webserver2
deployment.apps/webserver2 edited	# replicas : 3 ▶ 5
[root@master ~]# kubectl get deployments.apps
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
webserver2   5/5     5            5           26m

실습 :: yaml 파일로 pod 생성

--dry-run=client 실제 pod를 실행하지 않고 구동됐을 때의 결과 보여줌

[root@master ~/kube/04]# kubectl run webserver3 --image=nginx --port=80 --dry-run=client -o yaml > webserver3.yaml
[root@master ~/kube/04]# ls
'K8S Test'   webserver3.yaml
[root@master ~/kube/04]# cat webserver3.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: webserver3
  name: webserver3
spec:
  containers:
  - image: nginx
    name: webserver3
    ports:
    - containerPort: 80
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Always
status: {}

[root@master ~/kube/04]# vi webserver3.yaml # 편집
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    run: webserver3
  name: webserver3
spec:
  containers:
  - image: nginx
    name: webserver3
    ports:
    - containerPort: 80
---
[root@master ~/kube/04]# kubectl apply -f webserver3.yaml
pod/webserver3 created
[root@master ~/kube/04]# kubectl get pod
NAME                          READY   STATUS    RESTARTS   AGE
webserver1                    1/1     Running   0          39m
webserver2-78d9985fc6-bl9sl   1/1     Running   0          32m
webserver2-78d9985fc6-h47dv   1/1     Running   0          6m14s
webserver2-78d9985fc6-kq4q6   1/1     Running   0          32m
webserver2-78d9985fc6-sctmh   1/1     Running   0          32m
webserver2-78d9985fc6-wlnfn   1/1     Running   0          6m14s
webserver3                    1/1     Running   0          5s

0개의 댓글