Kubernetes 명령어 모음INFRA/Kubernetes2024. 7. 10. 00:41
Table of Contents
pod 생성법 3가지
1. 단독 파드 : run
- 개별적으로 생성되어 관리
- 삭제 시 자동 복구 X
- 주로 테스트나 임시 작업에 사용
kubectl run <pod-name> --image=<image-name>
root@k8s-masternew:~# kubectl run web1 --image=nginx:1.14 --port 80
pod/web1 created
2. 배포(Deployment) 파드 : create
- Deployment 객체로 관리
- 삭제 시 자동 복구 O
- desired 개수 보장 (replicaset)
- 실제 서비스 운영에 주로 사용 → 삭제해도 자동 복구되기 때문에
kubectl create deployment <deployment-name> --image=<image-name>
root@k8s-masternew:~# kubectl create deployment webserver --image=nginx --port 80 --replicas=3
deployment.apps/webserver created
3. 기존 YAML 파일을 통한 파드 생성 : apply
kubectl apply -f <filename>.yaml
삭제 : delete
- pod 한개 삭제
root@k8s-masternew:~# kubectl delete pods web1
pod "web1" deleted
- pod 전체 삭제
root@k8s-masternew:~# kubectl delete pods --all
pod "web1" deleted
pod "web2" deleted
pod "webserver-5d5c5c44c7-l7b5s" deleted
- pod 강제 삭제
root@k8s-masternew:~# kubectl delete --all all --force
확인 : get, describe, logs
- 목록 확인 (pods, deploy, replicaset, service, nodes 각종 리소스값 확인 가능)
root@k8s-masternew:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
nginx-web-99c6dcf6b-6n74d 1/1 Running 0 73m
web 1/1 Running 0 86m
- 상세정보 확인
root@k8s-masternew:~# kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-web-99c6dcf6b-6n74d 1/1 Running 0 74m 10.38.0.2 k8s-worker2new <none> <none>
nginx-web-99c6dcf6b-956cl 1/1 Running 0 74m 10.38.0.6 k8s-worker2new <none> <none>
- 실시간 Pod 상태 모니터링
root@k8s-masternew:~# watch kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-web-99c6dcf6b-6n74d 1/1 Running 0 77m 10.38.0.2 k8s-worker2new <none> <none>
nginx-web-99c6dcf6b-956cl 1/1 Running 0 77m 10.38.0.6 k8s-worker2new <none> <n
- 리소스의 상세정보를 보고 싶을때 -o yaml → -o json
--json형태로 보여줌
root@k8s-masternew:~# kubectl get pods web8 -o json
- pod IP 확인
root@k8s-masternew:~# kubectl get pods web8 -o json |grep -i podip
"podIP": "10.38.0.5"
- 노드 상세 정보 확인 (트러블슈팅 참조)
root@k8s-masternew:~# kubectl describe pods redis2 (nodes k8s-worker1)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal BackOff 19m (x4251 over 16h) kubelet Back-off pulling image "redis123"
Normal SandboxChanged 17m (x2 over 17m) kubelet Pod sandbox changed, it will be killed and re-created.
Warning Failed 15m (x5 over 16m) kubelet Error: ImagePullBackOff
Normal Pulling 15m (x4 over 17m) kubelet Pulling image "redis123"
Warning Failed 15m (x4 over 17m) kubelet Failed to pull image "redis123": failed to pull and unpack image "docker.io/li
- pods 로그 확인
root@k8s-masternew:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
web 1/1 Running 1 (75m ago) 19h
-- -f : 실시간
root@k8s-masternew:~# kubectl logs -f web
- 순서대로 실행되는 것 확인
root@k8s-masternew:~# kubectl run web2 --image=nginx
pod/web2 created
--pending -> create -> run
root@k8s-masternew:~# kubectl get pods -o wide --watch
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web2 0/1 Pending 0 0s <none> <none> <none> <none>
web2 0/1 Pending 0 0s <none> k8s-worker1new <none> <none>
web2 0/1 ContainerCreating 0 0s <none> k8s-worker1new <none> <none>
web2 1/1 Running 0 3s 10.40.0.5 k8s-worker1new <none> <none>
서버 늘릴때 : scale
root@k8s-masternew:~# kubectl scale deployment webserver --replicas=5
deployment.apps/webserver scaled
서버 줄일때 : delete
root@k8s-masternew:~# kubectl scale deployment webserver --replicas=3
deployment.apps/webserver scaled
root@k8s-masternew:~# kubectl delete pods webserver-5d5c5c44c7-5km82
pod "webserver-5d5c5c44c7-5km82" deleted
namespace
- 사용자정의 네임스페이스
- 논리적으로 네임스페이스로 각자 사이트들을 구분시킴
- default namespace 네임스페이스 지정하지 않으면 이렇게 나왔다.
- 쿠버네티스를 설치하면 자동으로 설치되는 시스템 네임 스페이스
root@k8s-masternew:~# kubectl get namespaces
NAME STATUS AGE
default Active 19h
kube-node-lease Active 19h
kube-public Active 19h
kube-system Active 19h
-n: namespace
root@k8s-masternew:~# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-5dd5756b68-qzgxx 1/1 Running 1 (17h ago) 19h
coredns-5dd5756b68-rln6g 1/1 Running 1 (17h ago) 19h
etcd-k8s-masternew 1/1 Running 4 (17h ago) 19h
kube-apiserver-k8s-masternew 1/1 Running 4 (17h ago) 19h
kube-controller-manager-k8s-masternew 1/1 Running 4 (17h ago) 19h
kube-proxy-gbwxq 1/1 Running 2 (17h ago) 19h
kube-proxy-mnn5m 1/1 Running 4 (17h ago) 19h
kube-proxy-pz464 1/1 Running 2 (17h ago) 19h
kube-scheduler-k8s-masternew 1/1 Running 4 (17h ago) 19h
weave-net-42njd 2/2 Running 3 (17h ago) 19h
weave-net-qclnm 2/2 Running 2 (17h ago) 19h
weave-net-x9x4q 2/2 Running 4 (17h ago) 19h
- 디폴트 네임스페이스로 생성
root@k8s-masternew:~# kubectl run web1 --image=nginx
pod/web1 created
root@k8s-masternew:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
web1 0/1 ErrImagePull 0 17s
- 내가 만든 네임스페이스 생성
root@k8s-masternew:~# kubectl create namespace prod
namespace/prod created
--3개를 생성하였다.
root@k8s-masternew:~# kubectl get namespaces
NAME STATUS AGE
default Active 19h
dev Active 17s
kube-node-lease Active 19h
kube-public Active 19h
kube-system Active 19h
prod Active 72s
stg Active 4s
- 특정 네임스페이스의 Pod 목록 확인
root@k8s-masternew:~# kubectl get pods -n prod
NAME READY STATUS RESTARTS AGE
web2 0/1 ImagePullBackOff 0 38s
- 모든 네임스페이스의 Pod 목록 확인
root@k8s-masternew:~# kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default nginx-web-99c6dcf6b-6n74d 1/1 Running 0 78m
default nginx-web-99c6dcf6b-956cl 1/1 Running 0 78m
default nginx-web-99c6dcf6b-gtljt 1/1 Running 0 78m
--dry-run=client
- 실제 리소스를 생성하거나 변경하지 않고, 명령어의 결과를 미리 보기 위해 사용
- kubectl run web2 --image=nginx -o yaml : 결과값으로 yaml + pod도 생성
--web8이라는 파드안에 nginx 컨테이너를 만들지말고 소스코드로 보여줘
root@k8s-masternew:~# kubectl run web8 --image=nginx -o yaml --dry-run=client
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: web8
name: web8
spec:
containers:
- image: nginx
name: web8
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
- 해당 명령어 문법 맞는지 검증
kubectl run web2 --image=nginx --dry-run=client
2.yaml 파일로 카피본 저장
root@k8s-masternew:~# kubectl run web8 --image=nginx -o yaml --dry-run=client > web8.yaml
root@k8s-masternew:~# ls
install-docker.sh snap token.txt web8.yaml
root@k8s-masternew:~# vi web8.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: web8
name: web8
spec:
containers:
- image: nginx
name: web8
리소스 실행 /삭제 : apply, delete
- 왜 쓸까 ? -< yaml 파일 이용해서 수정한 뒤 바로 파드 재 생산 가능
root@k8s-masternew:~# kubectl apply -f web8.yaml
pod/web8 created
--삭제
root@k8s-masternew:~# kubectl delete -f web8.yaml
pod "web8" deleted
파드 진입 : exec -it ~ /bin/bash
root@k8s-masternew:~# kubectl exec -it web8 -- /bin/bash
root@web8:/# cd /usr/share/nginx/html
root@web8:/usr/share/nginx/html# ls
50x.html index.html
만들어져있는 pod. deploy를 가지고 yaml을 생성할 수 있다.
kubectl get pods web2 -o yaml > web2_cp.yaml
kubectl get deploy web2 -o yaml > web2_cp.yaml
- 기존에 만들었던 파드를 가지고 야물을 뜸
- 근데 운영중인거 야물뜨면 내용이 너무 많음
컨테이너 이름 : yaml로 확인+ 변경 or edit으로 변경
- 확인
root@k8s-masternew:~# kubectl get deployments nginx-web -o yaml
- 컨테이너 이름 변경 1
root@k8s-masternew:~# kubectl get deployments nginx-web -o yaml > nginx-web.yaml
--컨테이너 이름 바꾸고
root@k8s-masternew:~# vi nginx-web.yaml
--replica 5개로 설정되어있으니 원래있던거 지우고 다시 생성해야함
root@k8s-masternew:~# kubectl delete deployments.apps nginx-web
root@k8s-masternew:~# kubectl apply -f nginx-web.yaml
- 컨테이너 이름 변경 2
root@k8s-masternew:~# kubectl edit deployments.apps
포트 포워딩
root@k8s-masternew:~# kubectl port-forward web8 80:80
Forwarding from 127.0.0.1:80 -> 80
Forwarding from [::1]:80 -> 80
root@k8s-masternew:~# kubectl get pods web8 -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
web8 1/1 Running 0 7m47s 10.38.0.5 k8s-worker2new <none> <none>
root@k8s-masternew:~# curl 10.38.0.5
<!DOCTYPE html>
리소스의 개수 : | wc -l
- 줄수까지 봐서 7개고 실제 pods수는 6개다.
root@k8s-masternew:~# kubectl get pods | wc -l
7
root@k8s-masternew:~# kubectl get namespaces | wc -l
8
root@k8s-masternew:~# kubectl get nodes | wc -l
4
--이거는 목록 확인
root@k8s-masternew:~# watch kubectl get pods -o wide
root@k8s-masternew:~# watch kubectl get namespaces -o wide
root@k8s-masternew:~# watch kubectl get nodes -o wide
줄임말 확인 : # kubectl api-resources
(중요한 것만 정리)
NAME SHORTNAMES APIVERSION KIND
configmaps cm v1 ConfigMap
events ev v1 Event
namespaces ns v1 Namespace
nodes no v1 Node
persistentvolumeclaims pvc v1 PersistentVolumeClaim
persistentvolumes pv v1 PersistentVolume
pods po v1 Pod
replicationcontrollers rc v1 ReplicationController
secrets v1 Secret
serviceaccounts sa v1 ServiceAccount
services svc v1 Service
daemonsets ds apps/v1 DaemonSet
deployments deploy apps/v1 Deployment
replicasets rs apps/v1 ReplicaSet
statefulsets sts apps/v1 StatefulSet
nodes metrics.k8s.io/v1beta1 NodeMetrics
pods metrics.k8s.io/v1beta1 PodMetrics
ingressclasses networking.k8s.io/v1 IngressClass
ingresses ing networking.k8s.io/v1 Ingress
clusterrolebindings rbac.authorization.k8s.io/v1 ClusterRoleBinding
clusterroles rbac.authorization.k8s.io/v1 ClusterRole
rolebindings rbac.authorization.k8s.io/v1 RoleBinding
roles rbac.authorization.k8s.io/v1 Role
storageclasses sc storage.k8s.io/v1 StorageClass
==실습문제 (문제에 해당하는 명령어를 기입)==
1. 현재 Namespace에서 동작중인 Pod는 몇 개인가?
- 전체 목록 확인 : kubectl get pods --all-namespaces
- stg Namespace목록만 확인 : kubectl get pods -n stg
- kubectl get namespaces | wc -l 결과값에서 1뺄것
2. 현재 시스템에서 동작중인 Pod의 수는?
- 목록 확인 :watch kubectl get pods -o wide
- kubectl get pods | wc -l 결과값에서 1뺄것
3. 컨테이너 nginx를 실행하는 nginx-pod라는 이름의 pod를 생성하시요.
- kubectl run nginx-pod --image=nginx:1.14 --port 80
4. 앞에서 생성한 pod의 image 정보를 확인하는 명령어는 무엇인가?
- kubectl describe pod nginx-pod
5. 앞에서 생성한 Pod는 어느 node에 배치 되었나?
- Node: k8s-worker1new/10.100.0.109
6. 앞에서 생성한 Pod에는 몇 개의 컨테이너가 포함되어 있나?
- kubectl run nginx-pod --image=nginx:1.14 --port 80만 했으니 1개
- ready 숫자를 보면됨 1/1
7. 앞에서 생성한 Pod의 상태는 어떠한가?
- Running
8. 새 파드의 컨테이너 상태는 어떠한가 ? (상태를 기입하세요)
- State: Running
9. "kubectl get pods" 명령의 출력에서 READ열은 무엇을 의미하는가?
- 컨테이너 상태를 나타낸다.
준비상태/컨테이너수
Status가 running이 아니면 1/1로 표시되지 않는다.
10. 생성한 Pod를 삭제 명령어는?
- kubectl delete pods nginx-pod
11. 컨테이너 Image 'redis 123'을 실행하는 pod 이름 'redis'를 redis-pod.yaml을 이용하여 생성하시오
- root@k8s-masternew:~# kubectl run redis --image=redis123
pod/redis created
- kubectl run redis --image=redis123 -o yaml --dry-run=client > redis-pod.yaml
kubectl apply -f redis-pod.yaml
- root@k8s-masternew:~# kubectl apply -f redis-pod.yaml
pod/redis configured
12. 11번문제에서 정상작동 하지 않다면 Running 되도록 트러블슈팅하시요
- vi redis-pod.yaml
containers: -image: redis 로 수정
- kubectl edit pod redis
pod/redis edited
containers: -image: redis 로 수정
'INFRA > Kubernetes' 카테고리의 다른 글
Kubernetes Service (0) | 2024.07.31 |
---|---|
Kubernetes Controller (0) | 2024.07.10 |