쿠버네티스(k8s)에 대해
쿠버네티스(Kubernetes)는 컨테이너화된 애플리케이션의 자동 배포, 스케일링, 운영을 관리하기 위한 오픈소스 플랫폼입니다. Google에서 시작하여 CNCF(Cloud Native Computing Foundation)에서 관리하고 있으며, 복잡한 애플리케이션 환경을 효율적으로 운영할 수 있게 해줍니다.
왜 등장했는가?
컨테이너 기술(예: Docker)은 애플리케이션과 그 의존성을 패키징하여 어디서나 일관되게 실행할 수 있게 해줍니다. 하지만 여러 컨테이너를 관리하거나 서비스를 확장하고 장애를 복구하는 작업은 매우 복잡합니다. 이러한 문제를 해결하기 위해 쿠버네티스가 등장했습니다.
주요 목적:
- 확장성: 사용자가 증가할 때 자동으로 인스턴스를 늘리거나 줄여 자원을 효율적으로 사용.
- 복구 자동화: 장애가 발생한 컨테이너를 자동으로 재시작하거나 교체.
- 애플리케이션의 이식성: 클라우드 환경이나 온프레미스 등 다양한 환경에서 일관된 동작 보장.
- 운영 간소화: 복잡한 컨테이너화 애플리케이션을 자동으로 관리.
쿠버네티스의 주요 기능
- 컨테이너 오케스트레이션:
- 여러 컨테이너를 그룹화하고 조정하여 서비스 운영.
- 자동 스케일링:
- 애플리케이션 부하에 따라 컨테이너를 자동으로 늘리거나 줄임.
- 서비스 복구:
- 문제가 있는 컨테이너를 자동으로 교체하거나 종료.
- 로드 밸런싱:
- 여러 컨테이너로 들어오는 요청을 분산 처리.
- 컨피그 및 시크릿 관리:
- 환경 변수, 설정 파일, 보안 정보(비밀번호 등)를 안전하게 관리.
클러스터 구성
쿠버네티스는 클러스터(cluster) 구조로 작동하며, 다음과 같은 컴포넌트로 구성됩니다:
- Master Node: 클러스터의 제어를 담당.
- Worker Node: 실제 애플리케이션 컨테이너가 실행되는 노드.
쿠버네티스 사용 방법
쿠버네티스 설치
🔗 기본환경 설치 Links:
설치 작업
Homebrew 최신화
brew update
hyperkit(macOS 환경에서 경량화된 하이퍼바이저(Hypervisor)를 제공하기 위해 설계된 툴) 설치
brew install hyperkit
#hyperkit 설치가 안된다면 qemu 설치
brew install qemu
minikube 설치
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube
minikube 시작
minikube start --vm-driver=hyperkit
기본 명령어
쿠버네티스 클러스터에서 현재 등록된 노드(Node) 목록을 조회
$kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 13m v1.31.0
Minikube 클러스터의 현재 상태를 확인
$minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
쿠버네티스 버전 확인
$kubectl version
Client Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.0", GitCommit:"4ce5a8954017644c5420bae81d72b09b735c21f0", GitTreeState:"clean", BuildDate:"2022-05-03T13:46:05Z", GoVersion:"go1.18.1", Compiler:"gc", Platform:"darwin/amd64"}
Kustomize Version: v4.5.4
Deployment 리소스를 생성, Nginx 이미지를 사용하는 Pod 배포
kubectl create deployment nginx-depl --image=nginx
쿠버네티스 Pod 목록 조회
$kubectl get pod
Deployment를 편집할 수 있는 인터페이스 열기
$kubectl edit deployment nginx-depl
현재 클러스터에 있는 ReplicaSet 리소스를 조회
kubectl get replicaset
Pod 디버깅
쿠버네티스 Pod 로그 조회
kubectl logs <Pod name>
쿠버네티스 Pod 상세 보기
kubectl describe pod
결과)
쿠버네티스 Pod에 접속
kubectl exec -it <Pod name> -- bin/bash
쿠버네티스 deployment 삭제
kubectl delete deployment <dep name>
YAML 파일 작성
YAML 파일 기본 구조
apiVersion: <API 버전>
kind: <리소스 종류>
metadata:
name: <리소스 이름>
namespace: <네임스페이스> # (선택 사항)
spec:
<리소스의 세부 사양>
nginx 기본 yaml 파일 참고
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.16
ports:
- containerPort: 8080
Yaml 파일 deployment 적용 및 삭제
kubectl apply -f <yaml file>
#삭제
kubectl delete -f <yaml file>