개요
k8s의 기본 배포 단위이 Pod에 대하여 알아 보겠습니다.
Pod란?
continer들을 포장한 Object(객체) 입니다.
여기서 Object라고 표현한 이유는 k8s는 항상 목표로 하는 상태를 etcd에서 저장하고 관리하는데, 이 저장되는 단위가 object단위 이기 때문입니다. 그래서 k8s에서는 모든것이 object입니다.
Pod 구성
pod는 container를 가질수 있는데 1개 이상의 container를 가질 수 있습니다.
이말은 즉, pod는 2개의 container도 가질 수 있다는 말입니다.단 제약 사항으로 같은 port를 open하는 container는 가질 수 없습니다. 그이유는 pod내의 container들 간의 통신은 localhost로 이루어기 지기 때문에 port가 중복 되면 안됩니다.
좀더 자세한 것은 k8s의 network 부분에서 설명 하겠습니다.
배포 방법
명령어를 이용한 배포
k8s는 기본적으로 실행할려는 image가 없을때는 docker hub에서 image를 받아와서 실행 합니다.
#kubectl run nginx --image nginx
yaml을 이용한 배포
yaml의 구조
yaml로 배포하기 전에 yaml의 기본 구조를 알아 보겠습니다.
기본 구조
YAML은 key-value 쌍을 사용하여 데이터를 나타냅니다. 각 키는 콜론(:)과 공백으로 값과 구분됩니다.
주석
- 주석은 # 기호로 시작하며, 해당 라인의 나머지 부분은 무시됩니다.
- # 이것은 주석입니다
key: value
List
- 대시(-)와 공백을 사용하여 리스트 아이템을 나타냅니다.
- items:
- item1
- item2
- item3
Array
- value을 쭉 나열하면 arrary가 됩니다.
- iteams: [1,2,3,4,5]
Dictionary
- 중첩된 key-value 쌍을 사용하여 딕셔너리를 표현합니다.
- person:
name: John Doe
age: 30
중첩된 구조
- 리스트와 딕셔너리는 중첩되어 더 복잡한 구조를 만들 수 있습니다.
- employees:
- name: John Doe
role: Developer
- name: Jane Smith
role: Designer
다중 문서
- --- 라인을 사용하여 하나의 파일 내에서 여러 개의 YAML 문서를 구분할 수 있습니다.
- # 문서 1
---
key1: value1
# 문서 2
---
key2: value2
문자열
- 큰따옴표(") 또는 작은따옴표(')를 사용하여 문자열을 명시적으로 표현할 수 있습니다. 이는 문자열 내의 특수 문자를 제어하는 데 유용합니다.
- phrase: "Hello, world!"
path: 'C:\User\name'
블록 스타일
- | 또는 >를 사용하여 여러 줄에 걸친 텍스트 블록을 정의할 수 있습니다. |는 개행을 유지하고, >는 개행을 공백으로 변환합니다.
- letter: |
Dear John,
Hello!
yaml to json : https://onlineyamltools.com/convert-yaml-to-json
k8s의 yaml 파일 구조
k8s object의 기본 구조
모든 object는 apiVersion, kind, metadata, spec의 항목을 기본으로 갖습니다.
apiVersion
- 이 필드는 해당 Kubernetes 오브젝트를 생성하기 위해 사용할 API 버전을 명시합니다.
- Kubernetes는 다양한 API 버전을 가지고 있으며, 각 버전은 특정 기능과 리소스에 대한 접근을 제공합니다.
- 에를 들어, apiVersion: v1 또는 apiVersion: apps/v1과 같은 형식으로 사용됩니다.
kind
- 생성하려는 리소스의 종류를 나타냅니다.
- Pod, Service, Deployment, ReplicaSet 등
metadata
- object 대한 metatdata가 포함됩니다.
- name, namespace, labels 등이 포함될 수 있습니다.
spec
- spec (specification의 약자)은 오브젝트의 원하는 상태를 설명합니다.
- 이 섹션은 Object 어떻게 동작해야 하는지에 대한 구체적인 설정을 포함합니다.
- 예를 들어, Pod의 경우 spec에는 실행할 컨테이너, 사용할 이미지, 포트 등이 포함될 수 있습니다.
세부 구조
Pod 배포를 위한 yaml
kind에 따라서 Version의 종류가 다릅니다.
또한 object에따라서 yaml 을 정의하는 방법이 다 다릅니다. 그래서 모든 Object의 yaml을 외우기는 힘듦니다.
예제
Deployment 배포를 위한 yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
kubectl로 yaml 파일을 k8s에 적용
#kubectl apply -f nginx-depolyment.yaml
명령어로 yaml 파일 만들기
--dry-run=client 옵션과 -o yaml 옵션을 통하여 실행한 명령어를 yaml 파일 형태로 볼 수 있습니다.
출력된 yaml을 저장 하면 실행한 명령어와 동일한 결과를 얻을 수 있습니다.
#kubectl run nginx --image nginx --dry-run=client -o yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
Next Post
'Cloud > k8s-CKA' 카테고리의 다른 글
[CKA] 6. Object를 관리하는 방법 3가지 (0) | 2023.01.29 |
---|---|
[CKA] 5. namespace (0) | 2023.01.24 |
[CKA] 4. Service (0) | 2023.01.20 |
[CKA] 3. ReplicaSet & Deployments (0) | 2023.01.11 |
[CKA] 1. k8s가 뭔가? (0) | 2022.11.11 |