본문 바로가기
DevOps/DockerKubernetes

리소스 별 Kubernetes 명령어

by 계영수 2022. 8. 20.
728x90

1. 리소스 별 명령어

 

쿠버네티스는 모든 것이 리소스로 표현된다. 쿠버네티스는 Pod 리소스 외에 Service, ReplicaSet, Deployment 등 다양한 리소스를 포함하고 있다. Pod외에 다른 리소스에 대한 명령을 수행하고 싶으면 어떻게 할 수 있을까?  기존에 Pod라고 적은 부분을 다른 리소스로 변경하여 명령을 실행하면 된다.

 

서비스 리소스에 대해서 살펴보고 싶다면


student@Master:~$ kubectl get service
NAME         TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes   ClusterIP   10.43.0.1    <none>        443/TCP   41h
student@Master:~$ 
student@Master:~$ kubectl describe service kubernetes
Name:              kubernetes
Namespace:         default
Labels:            component=apiserver
                   provider=kubernetes
Annotations:       <none>
Selector:          <none>
Type:              ClusterIP
IP:                10.43.0.1
Port:              https  443/TCP
TargetPort:        6443/TCP
Endpoints:         192.168.58.11:6443
Session Affinity:  None
Events:            <none>
student@Master:~$

 

쿠버네티스 클러스터를 구축하기 위해서 사용한 Node 또한 쿠버네티스의 리소스 중 하나로 표현된다.


student@Master:~$ kubectl get node
NAME     STATUS   ROLES    AGE   VERSION
master   Ready    master   41h   v1.18.6+k3s1
worker   Ready    <none>   31h   v1.18.6+k3s1
student@Master:~$ 
student@Master:~$ kubectl describe node master
Name:               master
Roles:              master
Labels:             beta.kubernetes.io/arch=amd64
                    beta.kubernetes.io/instance-type=k3s
                    beta.kubernetes.io/os=linux
                    k3s.io/hostname=master
                    k3s.io/internal-ip=192.168.58.11
                    kubernetes.io/arch

 

2. 네임스페이스

쿠버네티스에는 네임스페이스라는 개념이 있다. 쿠버네티스 클러스터를 논리적으로 나누는 역할을 한다. Pod, Service 와 같은 리소스가 네임스페이스별로 생성되고 사용자 접근제어, Network 접근 제어 정책을 네임스페이스별로 서로 다르게 가져갈 수 있다.

 

네임스페이스도 하나의 리소스로 표현된다.

student@Master:~$ kubectl get namespace
NAME              STATUS   AGE
default           Active   41h
kube-system       Active   41h
kube-public       Active   41h
kube-node-lease   Active   41h
student@Master:~$ 
student@Master:~$ kubectl describe namespace kube-system
Name:         kube-system
Labels:       <none>
Annotations:  <none>
Status:       Active

No resource quota.

No LimitRange resource.
student@Master:~$

 

º default : 기본 네임스페이스로 아무런 옵션없이 컨테이너를 만들게 되면 default 네임스페이스에 생성된다.

º kube-system: 쿠버네티스의 핵심 컴포넌트들이 들어있는 네임스페이스로, 네트워크 설정, DNS 서버등 중요한 역할을 담당하는 컨테이너가 존재한다.

º kube-public: 외부로 공개 가능한 리소스를 담고 있는 네임스페이스이다.

º kube-node-lease: 노드가 살아있는지 마스터에 알리는 용도로 존재하는 네임스페이스이다.

명령어를 입력할 때, --namespace 옵션 (-n) 을 이용하여 특정 네임스페이스에 리소스를 생성할 수 있다.

 

student@Master:~$ kubectl run mynginx-ns --image nginx --namespace kube-system
pod/mynginx-ns created
student@Master:~$ 
student@Master:~$ kubectl get pod mynginx-ns -n kube-system
NAME         READY   STATUS    RESTARTS   AGE
mynginx-ns   1/1     Running   0          15s
student@Master
student@Master
student@Master:~$ kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   1          70m
student@Master:~$ kubectl delete pod mynginx-ns -n kube-system
pod "mynginx-ns" deleted
student@Master:~$

 

네임스페이스 옵션을 생략하면 기본 네임스페이스인 default 네임스페이스로 설정된다. 다음 두가지 명령어는 같은 결과를 보여준다.

student@Master:~$ kubectl get pod -n default
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   1          73m
student@Master:~$ 
student@Master:~$ 
student@Master:~$ kubectl get pod
NAME      READY   STATUS    RESTARTS   AGE
mynginx   1/1     Running   1          73m
student@Master:~$

 

3. 자동완성 기능

kubectl 명령을 매번 일일이 입력하는 것이 귀찮을 수도 있다. 쿠버네티스는 이를 해결하기 위해서 자동으로 명령을 완성시켜주는 스크립트를 제공한다.

 

~~~ 추후 작성

 

 

4. 즉석 리소스 생성

YAML 명령 정의서를 이용하여 리소스를 생성할 때 매번 YAML 파일을 만들어서 생성하지 않고, 다음과 같이 cat & here document 명령 조합을 활용하여 즉석으로 리소스를 생성할 수 있다.

student@Master:~$ cat << EOF | kubectl apply -f -
> apiVersion: v1
> kind: Pod
> metadata:
>   name: cat-nginx
> spec:
>   containers:
>   - image: nginx
>     name: cat-nginx
> EOF
pod/cat-nginx created
student@Master:~$

 

728x90