본문 바로가기

DevOps/쿠버네티스(Kubernetes)

[CKA] Kubernetes Pod 와 YAML 파일

Kubernetes Pod 와 YAML 파일

pod-definition.yaml

apiVersion:
kind:
metadata:




spec:

 

 

YAML 기반 구성 파일을 사용하여 Pod 만드는 것에 대해 이야기해보자. 우리는 쿠버네티스용으로 YAML 파일을 만드는 방법을 배울것이다. 

쿠버네티스는 YAML 파일을 을 Pods, replicas, deployments, services 등과 같은 객체를 만들기 위한 입력으로 사용한다. 이 모든 것이 유사한 구조를 따른다. Kubernetes 정의 파일에는 항상 최상위 필드에 API 버전, 종류, 메타데이터 및 사양이 포함되어 있다. 최상위 수준 또는 루트 수준의 속성이다. 또한 필수 필드이므로 구성 파일에 해당 필드가 있어야 한다. 하나씩 살펴보자.

 

Kind Version
POD v1
Service v1
ReplicaSet apps/v1
Deployment apps/v1

첫 번째는 API 버전이다.
이것은 우리가 객체를 만들기 위해 사용하고 있는 쿠버네테스 API의 버전이다. 우리가 만들려고 하는 것에 따라, 올바른 API 버전을 사용해야 한다. 현재, 우리는 부분 작업을 하고 있기 때문에, 우리는 필드에 대해 가능한 다른 몇 가지 값으로 API 버전을 설정할 것이다. 

 

다음은 kind이다. kind는 우리가 만들려고 하는 객체의 유형를 의미하는데, 이 경우에는 Pod이다.
그래서 우리는 그것을 Pod로 설정할 것이다. 여기서 가능한 다른 값으로는 오른쪽 표의 종류 필드에 표시되는 ReplicaSet 또는 Deployment  또는 Service가 있다.

 

pod-definition.yaml

apiVersion: v1            #string
kind: Pod                 #string
metadata:                 #dictionary
  name: myapp-pod         #string
  labels:                 #dictionary
  	app: myapp
        type: front-end




spec:


다음은 metadata이다. metadata는 이름, 레이블 등과 같은 개체에 대한 데이터이다. 문자열 값을 지정한 처음 두 개와는 달리, 이것은 사전의 형태이다. 이름과 레이블은 메타데이터의 자식이다. 두 속성, 이름 및 레이블 앞의 공백 수는 중요하지 않지만 형제이므로 동일해야 한다. 또한 두 속성은 상위인 메타데이터보다 더 많은 공간을 가지고 있어야 한다. 따라서 약간 오른쪽으로 향해야 한다.

name은 string이다. 따라서 Pod의 이름을 지정할 수 있다. 
그리고 label은 사전입니다. 그래서 label은 metadata 안에 있는 dictionary 내의 dictionary이다. 원하는 대로 키와 값 쌍을 가질 수 있다. 값이 myapp인 label 앱을 추가했다. 마찬가지로, 적합하다고 판단되는 대로 다른 레이블을 추가할 수 있다. 그러면 나중에 이러한 개체를 식별하는 데 도움이 된다.

예를 들어 프런트엔드 애플리케이션을 실행하는 경로가 수백 개이고 백엔드 응용 프로그램 또는 데이터베이스 실행 경로가 수백 개라고 가정하자. 이러한 부분들은 배포한 후에는 그룹화하기 어려울 것이다. 지금 프론트엔드, 백엔드 또는 데이터베이스로 label을 지정하는 경우 나중에 이 레이블을 기준으로 부분을 필터링할 수 있다.

메타데이터에서는 이름이나 레이블 또는 Kubernetes가 메타데이터 아래에 있을 것으로 예상되는 다른 모든 항목만 지정할 수 있다. 이 항목에서는 원하는 대로 다른 속성을 추가할 수 없다. 그러나 레이블에서는 적합하다고 판단되는 모든 종류의 키 또는 값 쌍을 가질 수 있다.
따라서 각 매개 변수가 무엇을 예상하는지 이해하는 것이 중요하다.

 

 

spec:
  containers:         #List/Array
    - name: nginx-container
      image: nginx


지금까지 우리는 우리가 만들어야 할 물체의 종류와 이름만 언급했는데, 이것은 myapp-pod이라는 이름이 있는 포드이다.
그러나 우리는 포드에 필요한 컨테이너나 이미지를 구체적으로 명시하지 않았다. 구성 파일의 마지막 섹션은 만들 객체에 따라 사양에 따라 spec으로 작성된다. 여기서 우리는 그 객체와 관련된 추가 정보를 쿠버네테스에게 제공할 것이다. 이것은 객체마다 다를 것이다.
따라서 문서 섹션을 이해하거나 참고하여 각각에 적합한 형식을 얻는 것이 중요하다. 하나의 컨테이너를 가지고 Pod 을 만들고 있기 때문에 쉽다.  Spec은 사전이므로 사전 아래에 컨테이너라는 속성을 추가한다. 컨테이너는 목록 또는 배열이다.


이 속성이 목록인 이유는 앞에서 강의에서 배웠듯이 포트 내에 여러 개의 컨테이너가 있을 수 있기 때문이다. 그러나 지금의 경우, 우리는 Pod에 하나의 컨테이너만 포함할 계획이기 때문에 목록에 하나의 항목만 추가할 것이다. 이름 바로 앞에 있는 대시는 목록의 첫 번째 항목임을 나타낸다. 목록의 항목이 사전이므로 name과 image 속성을 추가한다. 이미지의 값은 nignx이며, 이는 Docker 저장소에 있는 Docker 이미지의 이름이다.

 

$ kubectl create -f pod-definition.yaml

YAML과 Kubernetes가Pod을 만든다.


pod.yaml

apiVersion: v1
kind: Pod
metedata:
  name: nginx
  labels:
    app: nginx
    tier: frontend
spec:
  containers:
  - name: nginx
    image: nginx
  - name: busybox
    image: busybox

이렇게 두개의 파드를 정의하는것도 가능하다.

 

 

 

 

 

 

출처:

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/learn/lecture/16214484#content