kubernetes started(1)

2020. 2. 13. 19:10devops/kubernetes

쿠버네티스를 시작하기 앞서 도커 스웜과 닮은 점도 있지만 다른 점도 있습니다. 이 포스트를 시작하기 앞서 도커 스웜과의 차이점을 설명하고 시작하겠습니다.

 

쿠버네티스는 모든 리소스를 '오브젝트'라고 불리는 형태로 사용합니다. 이전 도커 스웜에서는 서비스라는 것을 사용했습니다. 서비스도 일종의 컨테이너 리소스들의 집합체로 일종의 오브젝트라고 할 수 있습니다. 그러나 쿠버네티스는 컨테이너의 집합, 관리하는 컨트롤러, 사용자, 노드까지도 하나의 오브젝트로 사용할 수 있습니다. 오브젝트의 종류는 아래 명령어를 통해 확인할 수 있습니다. 

kubectl api-resources
 ~  kubectl api-resources                                                                                                                                                                                                                                ✔  11553  18:08:04
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
persistentvolumes                 pv                                          false        PersistentVolume
pods                              po                                          true         Pod
podtemplates                                                                  true         PodTemplate
replicationcontrollers            rc                                          true         ReplicationController
resourcequotas                    quota                                       true         ResourceQuota
secrets                                                                       true         Secret
serviceaccounts                   sa                                          true         ServiceAccount
services                          svc                                         true         Service
.....

그리고 특정 오브젝트를 알고 싶으면 kubectl explain object name으로 알 수 있습니다. 

kubectl explain bindings                                                                                                                                                                                                                             ✔  11554  18:35:58
KIND:     Binding
VERSION:  v1

DESCRIPTION:
     Binding ties one object to another; for example, a pod is bound to a node
     by a scheduler. Deprecated in 1.7, please use the bindings subresource of
     pods instead.

FIELDS:
   apiVersion	<string>
     APIVersion defines the versioned schema of this representation of an
     object. Servers should convert recognized schemas to the latest internal
     value, and may reject unrecognized values. More info:
     https://git.k8s.io/community/contributors/devel/api-conventions.md#resources

 

도커와 마찬가지로 쿠버네티스도 docker service create...와 같은 명령어로 쿠버네티스를 사용할 수 있고 대부분의 작업들은 kubectl이라는 명령어로 사용할 수 있습니다. 그리고 yaml 파일로 리소스를 삭제하거나 생성할 수 있습니다. 컨테이너 뿐만 아니라 모든 리소스 오브젝트들에 사용될 수 있습니다. 컨테이너 자체는 물론이고, 컨테이너의 설정 값, 비밀 값 등 모두 YAML 파일로 정의해 사용할 수 있습니다

 

그리고 실제로도 여러개의 yaml 파일을 정의해서 쿠버네티스에 적용하는 방식으로 사용할 것입니다. 

 

쿠버네티스는 여러 개의 컴포넌트로 구성돼 있습니다. 

쿠버네티스 노드의 역할을 크게 마스터와 워커로 나뉘어 있습니다. 마스터 노드는 쿠버네티스가 제대로 작동할 수 있게 관리하는 역할을 하며, 워크 노드는 애플리케이션 컨테이너가 생성됩니다. 기본적으로 쿠버네티스는 매우 많은 컴포넌트를 실행합니다. 이런 컴포넌트들은 대부분 도커 컨테이너로 만들어집니다. 

 

그리고 쿠버네티스는 클러스터 구성을 위해 kubelet이라는 에이전트가 모든 노드에서 실행됩니다. kubelet은 컨테이너의 생성, 삭제뿐만 아니라 마스터 워커 노드 간의 통신 역할을 함께 담당합니다. kubelet이 정상적이지 않으면 해당 노드는 쿠버네티스와 제대로 연결되지 않습니다.