Kubernetes 기본 개념

Cloud/Kubernetes / /
728x90


 

1.   기본 개념

1)   namespace

(1)    Kubernetes 에서 사용하는 가상 클러스터로 여러 리소스를 논리적으로 분리하여그룹 관리한다.

(2)    조회

kubectl get namespace

kubectl get ns

 

(3)    생성

kubectl create ns <Namespace Name>

kubectl create namespace <Namespace Name>

 

(4)    각각의 리소스에 명령을 수행할 때 namespace를 지정한다. 지정하지 않을 시 default로 지정된 namespace로 자동 지정된다.

A.     ctl

kubectl run nginx --image=nginx --namespace=<insert-namespace-name-here>

kubectl get pods --namespace=<insert-namespace-name-here>

 

B.      yaml

apiVersionminio.min.io/v2

kindTenant

metadata:

  creationTimestampnull

  nameminio-s3

  namespaceminio-local

 

(5)    default namespace를 변경할 수 있다.

kubectl config set-context --current --namespace=<insert-namespace-name-here>

확인하기

kubectl config view --minify | grep namespace:

 

(6)    삭제 : namespace를 삭제 시 namespace에 속한 모든 리소스가 삭제된다.

kubectl delete ns <Namespace Name>

kubectl delete namespace <Namespace Name>

 

(7)    대부분의 리소스가 namespace에 속해있으나 nodepvc같은 경우는 namespace가 존재하지 않는다. 다음과 같은 방법으로 해당 리소스에 대한 조회가 가능하다.

네임스페이스에 속하는 리소스

kubectl api-resources --namespaced=true

 

네임스페이스에 속하지 않는 리소스

kubectl api-resources --namespaced=false

 

2)   pod


(1)    kubernetes에서 관리하는 배포된 컴퓨팅

(2)    하나 이상의 컨테이너 그룹

(3)    docker-compose와 비슷한 기능을 한다.

(4)    특징

A.     Pod Container IPPort를 공유한다.

B.      Pod 내 배포된 컨테이너 간에는 volume을 공유할 수 있다.

(5)    yaml 예제

apiVersionbatch/v1

kindJob

metadata:

  namehello

spec:

  template:

    여기서부터 파드 템플릿이다

    spec:

      containers:

      - namehello

        imagebusybox

        command: ['sh'

'-c''echo "Hello, Kubernetes!" && sleep 3600']

      restartPolicyOnFailure

    여기까지 파드 템플릿이다

 

(6)    조회

기본적인 조회

kubectl get pods -A

 

상세 조회 (이벤트 조회도 가능)

kubectl describe pods -A

 

3)   Deployment

(1)    Pod 또는 RepliacaSet을 여러 개 동시 생성하고 관리하는 단위

(2)    Pod 배포를 위해 RC 생성하고 관리하는 역할을 하며, 특히 롤백을 위한 기존 버전의 RC관리 등 여러가지 기능을 포괄적으로 포함

(3)    yaml 예제

apiVersionapps/v1

kindDeployment

metadata:

  namenginx-deployment

  labels:

    appnginx

spec:

  replicas3

  selector:

    matchLabels:

      appnginx

  template:

    metadata:

      labels:

        appnginx

    spec:

      containers:

      - namenginx

        imagenginx:1.14.2

        ports:

        - containerPort80

 

nginx webserver replica 3개 동시에 만들어서 관리

 

4)   Service

(1)    Pod 내 여러 Container를 하나의 IP port로 연결되도록 하는 서비스

(2)    Pod가 재생성이 될 시 IP 주소가 변경되기 때문에 IP를 지정하는 것이 어렵기 때문에 Label Label Selector라는 개념을 이용한다.


 

(3)    yaml 예제

apiVersionv1

kindService

metadata:

  nameminio-service

spec:

  typeLoadBalancer

  ports:

    - port9000

      targetPort9000

      protocolTCP

  selector:

    appminio

 

A.     type

                                           i.         ClusterIP : 서비스를 클러스터 내부 IP에 노출 시켜 클러스터 내부에서 접근 Default 타입

                                          ii.         NodePort : 고정 Port로 각 노드 IP에 서비스를 노출하여 각 노드에 <Node IP>:<Node Port>로 접근 가능하도록 만든다.

                                         iii.         LoadBalancer : 서비스를 외부에 노출 시키는 역할을 함

                                         iv.         ExternalName : 서비스를 PQDN으로 맵핑

5)   Volume

(1)    Pod에서 사용하는 따로 정의된 디스크

A.     Pod 마다 해당 volume을 직접 생성


 

apiVersionv1

kindPod

metadata:

  nametest-pd

spec:

  containers:

  - imagek8s.gcr.io/test-webserver

    nametest-container

    volumeMounts:

    - mountPath/cache

      namecache-volume

  volumes:

  - namecache-volume

    emptyDir: {}

 

Pod 선언 시 해당 Volume 생성되기 때문에 Pod 삭제 시 데이터도 분실거나 Node 삭제 시 데이터가 유실된다.

 

(2)    PVC를 이용


A.     StorageClass : Persistent Volume을 생성할 때 사용하는 Storage의 형태를 정의해 놓을 Class

apiVersionstorage.k8s.io/v1

kindStorageClass

metadata:

    namelocal-storage

provisionerkubernetes.io/no-provisioner

volumeBindingModeWaitForFirstConsumer

 

B.      Persistent Volume Claim(PVC) : PV를 연결하기 위한 가상화된 Volume Connector

apiVersionv1

kindPersistentVolumeClaim

metadata:

  namepv-claim

  labels:

    appstorage-claim

spec:

  storageClassNamelocal-storage

  accessModes:

    - ReadWriteOnce

  resources:

    requests:

      storage10Gi

 

C.      Persistent Volume(PV) : 컴퓨팅 인스턴스와 관계없이 관리하는 별개의 볼륨

apiVersionv1

kindPersistentVolume

metadata:

  namepv-data1

  labels:

    typelocal

spec:

  storageClassNamelocal-storage

  capacity:

    storage5Gi

  accessModes:

    - ReadWriteOnce

  hostPath:

    path"/data1"

 

2.   출처

1)      https://kubernetes.io/docs/concepts/workloads/pods/

2)      https://kubernetes.io/docs/concepts/services-networking/service/

3)      https://kubernetes.io/docs/concepts/workloads/controllers/deployment/

4)      https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims

5)      https://kubernetes.io/ko/docs/concepts/storage/storage-classes/

6)      https://m.blog.naver.com/freepsw/222005161870

7)      https://kubernetes.io/ko/docs/concepts/overview/working-with-objects/namespaces/

8)      https://bcho.tistory.com/1256

728x90

'Cloud > Kubernetes' 카테고리의 다른 글

kubernetes helm chart 이용하기  (0) 2021.08.06
Krew 설치 및 사용법  (0) 2021.07.05
Kubernetes Web UI 설치 및 계정 생성 로그인  (0) 2021.07.01
Kubernetes 설치와 runtime 이슈  (0) 2021.06.30
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기