Kubernetes 간단한 명령어 알아보기
Kubernetes 아키텍처 구성요소
마스터 노드 : 클러스터의 상태 관리, 워크로드 예약 및 관리, 중앙 집중식 구성 제공을 담당하는 클러스터의 컨트롤 플레인입니다.
작업자 노드 : 애플리케이션과 서비스를 실행하는 머신(물리적 또는 가상)입니다. 포드는 작업자 노드에서 예약되며 해당 포드 내의 컨테이너는 작업자 노드에서 실행됩니다.
etcd : 클러스터 상태 및 구성에 대한 신뢰 소스를 제공하는 분산 키-값 저장소입니다. 마스터 노드는 클러스터의 원하는 상태가 유지되도록 etcd와 통신합니다.
API 서버 : 클러스터와 상호 작용하기 위해 다른 모든 구성 요소에서 사용하는 RESTful API를 제공하는 마스터 노드의 프런트 엔드입니다.
컨트롤러 관리자 : 클러스터의 상태를 모니터링하고 원하는 상태를 유지하기 위해 필요에 따라 변경합니다.
스케줄러 : 사용 가능한 리소스 및 제약 조건에 따라 작업자 노드에 포드를 할당하는 일을 담당합니다.
Kubelet : 마스터 노드와 통신하고 컨테이너가 예상대로 실행되는지 확인하는 역할을 하는 각 작업자 노드에서 실행되는 에이전트입니다.
컨테이너 런타임 : 컨테이너 시작, 중지 및 관리를 담당하는 소프트웨어입니다. Kubernetes에서 가장 일반적으로 사용되는 컨테이너 런타임은 Docker입니다.

이미지 출처: https://k21academy.com/docker-kubernetes/kubernetes-architecture-components-overview-for-beginners/
포드
Kubernetes 클러스터에서 애플리케이션을 배포하고 관리하기 위한 가장 작은 빌딩 블록입니다. 포드는 하나 이상의 컨테이너를 포함할 수 있으며 포드의 모든 컨테이너는 동일한 네트워크 네임스페이스를 공유합니다.
클러스터의 포드 목록을 표시합니다.
kubectl get pods
특정 포드에 대한 자세한 정보를 표시합니다.
kubectl describe pod pod_name
특정 Pod의 로그를 출력합니다.
kubectl logs pod_name
특정 포드 삭제
kubectl delete pod pod_name
nginx 이미지로 팟(Pod) 시작
kubectl run nginx --image=nginx
배포
배포를 통해 애플리케이션의 복제본 그룹(복제본 세트)에 대해 원하는 상태를 정의할 수 있으며 배포 컨트롤러는 복제본의 실제 상태가 원하는 상태와 일치하는지 확인합니다. 배포는 확장, 롤링 업데이트 및 롤백과 같은 여러 목표를 달성하는 방법입니다.
Nginx 샘플 배포
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
서비스
서비스는 마이크로서비스 기반 애플리케이션의 구성 요소 간 또는 여러 애플리케이션 간 통신을 가능하게 합니다. ClusterIP, NodePort, LoadBalancer, ExternalName 및 Headless 서비스를 비롯한 여러 유형의 Kubernetes 서비스가 있습니다.
ClusterIP 서비스를 명령적으로 생성
서비스는 배포에 속하는 포드를 선택 my-deployment하고 포트 80에 노출하여 트래픽을 대상 포트 8080으로 전달합니다.
kubectl expose deployment my-deployment --port=80 --target-port=8080 --name=my-service --type=ClusterIP
NodePort 서비스를 명령적으로 생성
서비스는 배포에 속하는 포드를 선택 another-deployment하고 포트 80에 노출하여 트래픽을 대상 포트 8080으로 전달합니다.
kubectl expose deployment another-deployment --port=80 --target-port=8080 --name=my-service --type=NodePort
클러스터 IP 서비스를 선언적으로 생성
이 서비스는 레이블이 지정된 포드를 선택 app: my-app하고 포트 80에 노출하여 대상 포트 8080으로 트래픽을 전달합니다.
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: my-app
ports:
- name: http
port: 80
targetPort: 8080
type: ClusterIP
스테이트풀셋
StatefulSet는 상태 저장 애플리케이션을 관리하는 데 사용되는 Kubernetes 리소스 유형입니다. 포드의 상태 비저장 복제본을 생성하는 배포와 달리 StatefulSet는 안정적인 네트워크 ID와 영구 스토리지를 포드에 제공합니다.
StatefulSet의 각 포드는 패턴을 따르는 고유하고 영구적인 호스트 이름으로 생성됩니다 <statefulset-name>-<ordinal>. 서수는 0부터 시작하여 생성된 순서대로 각 포드에 할당되는 인덱스입니다.
StatefulSet 예제 매니페스트
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: example-statefulset
spec:
selector:
matchLabels:
app: example-statefulset
serviceName: example-service
replicas: 3
template:
metadata:
labels:
app: example-statefulset
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 80
volumeMounts:
- name: example-volume
mountPath: /data
volumeClaimTemplates:
- metadata:
name: example-volume
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
데몬셋
DaemonSet은 클러스터의 각 노드에서 정확히 하나의 포드가 실행되도록 하는 Kubernetes 리소스 유형입니다. 이는 모든 노드에서 실행해야 하는 로깅 에이전트 또는 클러스터 수준 저장소 데몬과 같은 백그라운드 작업을 실행하는 데 유용합니다.
DaemonSet 예제 매니페스트
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: example-daemonset
spec:
selector:
matchLabels:
app: example-daemonset
template:
metadata:
labels:
app: example-daemonset
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 80
레플리카셋
ReplicaSet은 지정된 시간에 지정된 수의 Pod 복제본이 클러스터에서 실행되도록 하는 Kubernetes 리소스 유형입니다. ReplicaSet는 원하는 수의 복제본을 유지하기 위해 필요에 따라 포드를 자동으로 생성하거나 삭제합니다.
ReplicaSet 예제 매니페스트
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: example-replicaset
spec:
replicas: 3
selector:
matchLabels:
app: example-replicaset
template:
metadata:
labels:
app: example-replicaset
spec:
containers:
- name: example-container
image: example-image
ports:
- containerPort: 80
비밀
Kubernetes Secrets는 암호, 토큰 및 인증서와 같은 중요한 정보를 Kubernetes 클러스터에 안전하게 저장하는 방법입니다. 비밀은 base64로 인코딩된 문자열로 저장되며 etcd에서 암호화됩니다.
비밀 매니페스트 예
apiVersion: v1
kind: Secret
metadata:
name: example-secret
type: Opaque
data:
example-username: YWRtaW4=
example-password: cGFzc3dvcmQ=
포드 매니페스트에서 비밀 값 사용
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image
env:
- name: EXAMPLE_USERNAME
valueFrom:
secretKeyRef:
name: example-secret
key: example-username
- name: EXAMPLE_PASSWORD
valueFrom:
secretKeyRef:
name: example-secret
key: example-password
컨피그맵
ConfigMap은 애플리케이션의 구성 데이터를 관리할 수 있는 Kubernetes 리소스입니다. 구성 데이터를 ConfigMap에 키-값 쌍으로 저장한 다음 포드 또는 클러스터의 다른 리소스에서 참조할 수 있습니다.
컨피그맵 매니페스트
apiVersion: v1
kind: ConfigMap
metadata:
name: example-configmap
data:
example-key: example-value
포드 매니페스트에서 ConfigMap 값 사용
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image
env:
- name: EXAMPLE_ENV_VAR
valueFrom:
configMapKeyRef:
name: example-configmap
key: example-key
예제가 포함된 Kubectl 명령
하나 이상의 리소스에 대한 정보를 검색합니다.
kubectl get pods
리소스에 대한 자세한 정보 얻기
kubectl describe pod pod_name
팟(Pod)에 있는 컨테이너의 로그 검색
kubectl logs pod_name
특정 리소스 삭제
kubectl delete pod pod_name
리소스 만들기
kubectl create -f pod.yaml
기존 리소스에 변경 사항을 적용하거나 존재하지 않는 경우 새 리소스를 생성합니다.
kubectl apply -f pod.yaml
컨테이너에서 명령 실행
kubectl exec pod-name -- command
배포 복제본 수 확장
kubectl scale deployment deployment_name --replicas=5
로컬 포트를 포드의 포트로 전달합니다.
kubectl port-forward pod_name 8080:80
현재 위치에서 리소스 편집
kubectl edit pods pod_name
하나 이상의 리소스에 대한 리소스 사용량 표시
kubectl top node
새 포드를 생성할 수 없도록 노드를 예약 불가로 표시합니다.
kubectl cordon node_name
노드를 예약 가능으로 표시하여 새 포드를 생성할 수 있도록 합니다.
kubectl uncordon node_name
노드에서 모든 포드를 안전하게 제거하고 예약 불가로 표시
kubectl drain node_name
쿠버네티스 버전 보기
kubectl version
참조 URL : https://techblog.flaviusdinu.com/kubernetes-basics-cheatsheet-f3b723e4661