668 words
3 minutes
[Kubernetes]02. 기본명령어와 오브젝트
2025-03-14
2026-01-09

Overview#

1. Kubernetes Object#

Kubernetes Object#


Concept

  • Kubernetes Object : 쿠버네티스 API 서버로 생성되는 영속성을 가지는 모든 실체
  • Pod : k8s에서 컨테이너를 실행하는 가장 작은 단위. 하나 이상의 컨테이너로 구성될 수 있음.
  • Deployment : Pod가 배포된는 방법을 정의하는 오브젝트. Pod를 생성, 업데이트, 삭제하는 방법을 정의
  • Namespace : 쿠버네티스 클러스터 내에서 리소스를 그룹화하는 방법. 리소스를 분리하고 격리하는데 사용

Pod#

Terminal window
echo "Start a nginx pod"
kubectl run nginx --image=nginx
# wait 3 seconds
timeout 3 sleep 3
echo "Start a nginx pod with new name"
kubectl run nginx01 --image=nginx

Deployment#

#!/bin/bash
echo "Creating deployment..."
kubectl create deployment httpd --image=httpd
# wait 10 seconds
timeout 3 sleep 10
echo "Changing number of replicas..."
kubectl scale deployment httpd --replicas=5
# delete pod
# kubectl delete pod httpd-5c758d86c9-7z5zv

Namespace#

  • 주로 어플리케이션을 구분하기 위해 사용
  • RBAC 을 이용해 namespace 별로 권한을 부여할 수 있음
  • 기본적으로 클러스터를 가상으로 구분하는 단위라 물리적인 분리는 아님
#!/bin/bash
# namespace is a way to divide cluster resources between multiple users
# create a namespace
kubectl create ns my-namespace
# switch to the namespace
kubectl ns my-namespace
# kubectl ns : 전체 namespace를 보여줌
# delete namespace
kubectl delete ns my-namespace

2. YAML을 활용한 쿠버네티스 오브젝트 관리#

플러그인 설치용

Terminal window
kubectl krew install ctx ns neat

Concept

  • affinity : k8s에서 특정 조건에 부합하는 노드에 파드를 배치하도록하는 규칙. 기본적으로 이런 특성을 가진 노드에 배치해라 라고 스케줄러에게 요청하는 것과 같다.
  • anti-affinity : 특정 조건에 부합하는 노드에 파드를 배치하지 않도록 하는 규칙. 이런 특성을 가진 노드에는 배치하지 말아라 라고 스케줄러에게 요청하는 것과 같다.
  • node affinity : 파드가 특정 노드 집합에 스케줄링되도록 제한. 노드의 레이블을 기반으로 한다. ex) GPU가 있는 노드, SSD 스토리지가 있는 노드와 같은 특정 하드웨어 조건을 가진 노드에 파드를 배치할 때 사용

yaml 파일을 통한 관리#

  • 모든 쿠버네티스 오브젝트는 yaml 파일로 export 가능
  • yaml 파일을 통해 쿠버네티스 오브젝트를 생성, 수정, 삭제 가능
Terminal window
k get pod busybox -o yaml > busybox.yaml
k apply -f busybox.yaml

yaml naming rule#

{app}-{opt}-{obj}.yaml

service yaml 예제#

apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app.kubernetes.io/name: MyApp
ports:
- name: http
protocol: TCP
port: 80
targetPort: 9376
- name: https
protocol: TCP
port: 443
targetPort: 9377

References#

  • 24단계 실습으로 정복하는 쿠버네티스 3,4장
[Kubernetes]02. 기본명령어와 오브젝트
https://yjinheon.netlify.app/posts/05system/k8s/k8s_02_commands/
Author
Datamind
Published at
2025-03-14
License
CC BY-NC-SA 4.0