소소한개발팁
article thumbnail
반응형

Pods

Pod는 쿠버네티스에서 가장 작은 배포 단위로, 하나 이상의 컨테이너로 구성됩니다. 이 컨테이너들은 동일한 네트워크 네임스페이스, IPC(Inter-Process Communication) 공간을 공유하며 함께 배치됩니다

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: mycontainer
      image: nginx:latest

 

ReplicaSets

ReplicaSets은 Pod의 복제본을 관리하는 쿠버네티스 리소스입니다. 지정된 수의 Pod 복제본을 유지하도록 조정하며 안정적인 상태를 유지합니다. 클러스터 전체의 여러 노드에 걸쳐 특정 수의 Pod 복제본을 유지하도록 관리하는 것으로 아래의 예시는 Worker Node가 3개의 경우 각각 1개씩 배정된 예시이다.

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-replicaset
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: mycontainer
          image: nginx:latest

 

 

 

 

Deployments

Deployments는 ReplicaSets을 관리하고 업데이트하는데 사용됩니다. 애플리케이션의 배포, 업데이트, 롤백 등을 관리하는데 중요한 역할을 합니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: mycontainer
          image: nginx:latest

 

strategy: RollingUpdate 전략을 사용하도록 설정합니다.
rollingUpdate: 롤링 업데이트에 관련된 설정을 지정합니다.
maxSurge: 동시에 생성된 Pod의 최대 추가 수를 지정합니다. 여기서는 1로 설정하여 하나의 Pod가 추가됩니다.
maxUnavailable: 업데이트 중에 사용할 수 없는 Pod의 최대 수를 지정합니다. 여기서는 1로 설정하여 하나의 Pod가 업데이트 중에 사용 불가능합니다.

 

RollingUpdate 전략은 새 버전의 Pod를 점진적으로 배포하는 전략입니다. 이 전략을 사용하면 현재 실행 중인 Pod의 일부를 새로운 버전의 Pod로 교체하면서 서비스를 계속할 수 있습니다.

 

반응형

 

Services

Services는 네트워크 서비스로 노출되는 Pod 집합입니다. 다양한 서비스 디스커버리 및 로드 밸런싱을 지원하여 애플리케이션 간 통신을 용이하게 합니다. 아래는 서비스 중 로드밸런서를 활용한 예제 입니다.

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  selector:
    app: myapp
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
        - name: mycontainer
          image: nginx:latest

 

 

ClusterIP
클러스터 내에서만 서비스에 접근 가능한 타입입니다. 이는 내부 통신에 사용되며 외부로 노출되지 않습니다.

사용 시기: 내부 서비스나 마이크로서비스 간 통신이 필요한 경우 사용합니다.

 

LoadBalancer
클라우드 제공 업체의 로드 밸런서를 사용하여 외부 트래픽을 서비스로 전달합니다. 클러스터 외부에서 서비스에 접근할 때 사용됩니다.

사용 시기: 실제 운영 환경에서 외부에서 안전하게 접근해야 하는 경우 사용합니다. 클라우드 제공 업체가 로드 밸런서를 프로비저닝하며, 외부 IP 주소로 서비스에 접근할 수 있게 됩니다.


NodePort
각 노드의 특정 포트를 통해 서비스에 외부에서 접근할 수 있도록 합니다.

클러스터의 모든 노드가 서비스에 접근 가능합니다.

사용 시기: 개발 및 테스트 목적으로 외부에서 접근이 필요한 경우 사용합니다. 일반적으로 운영 환경에서는 LoadBalancer를 사용하는 것이 권장됩니다.

 

ExternalName
외부 서비스에 대한 DNS 이름을 제공하는 가상 서비스를 생성합니다. 클러스터 내에서 외부 서비스에 접근할 수 있도록 합니다.
사용 시기: 외부 서비스에 대한 DNS 별칭을 클러스터 내에서 사용해야 할 때 사용합니다. 클러스터 내에서 해당 DNS 이름을 사용하여 외부 서비스에 접근할 수 있습니다.

 

Namespaces

Namespaces는 쿠버네티스 클러스터 내에서 리소스를 분리하는 데 사용됩니다. 여러 팀이나 프로젝트 간에 리소스 충돌을 방지하고 관리를 용이하게 합니다.

 

apiVersion: v1
kind: Namespace
metadata:
  name: my-namespace

 

 

Commands

Commands는 K8S 명령어로 클러스터를 관리하는 데 사용됩니다. 몇 가지 예시:

kubectl get --help

kubectl create --help

kubectl delete --help

kubectl edit --help

kubectl apply --help

 

등 --help 명령어를 통해 예시를 확인할 수 있습니다.

 

 

이미지 출처 

 

Zero Downtime Deployment With Kubernetes Using Rolling Update

Rolling updates allow Deployment update to take place with zero downtime by incrementally updating Pods instances with new ones. Learn more!

www.encora.com

 

 

Azure AKS Kubernetes Namespaces Introduction - Azure Kubernetes Service

 

stacksimplify.com

 

반응형

'DevOps > K8S(Kubernates)' 카테고리의 다른 글

Ubuntu에서 Kubernates 설치하기  (1) 2024.02.10
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!