웹사이트 검색

쿠버네티스에서 레플리카셋을 생성하는 방법


이 페이지에서

  1. 전제 조건
  2. 우리가 할 일\n
  3. Replicaset 만들기
  4. 결론

복제 세트는 지정된 팟(Pod) 복제본이 항상 실행 중인지 확인합니다. 복제 컨트롤러를 대체하는 것으로 간주할 수 있습니다. 둘 사이의 주요 차이점은 ReplicaSet를 사용하면 "라벨 선택기”라는 것을 사용할 수 있다는 것입니다. Replicaset은 Kubernetes 컨트롤러 중 하나입니다. 지정된 수의 포드가 있는지 확인하는 데 사용됩니다. 항상 실행 중인 복제본.

복제 세트의 템플릿은 다음과 같습니다.

apiVersion: apps/v1 
kind: ReplicaSet   
Metadata: 
  name: some-name
  labels:
    app: some-App
    tier: some-Tier
Spec: 
  replicas: 3 # Here we tell k8s how many replicas we want
  Selector: # A label selector field. 
    matchLabels:
      tier: some-Tier
    matchExpressions:
      - {key: tier, operator: In, values: [some-Tier]} #set-based operators
  template:
    metadata:
      labels:
        app: some-App
        tier: someTier
    Spec: 
      Containers:

이 기사에서는 레플리카 세트를 생성하는 방법과 레이블로 포드를 식별하는 방법을 살펴봅니다.

전제 조건

작업자 노드가 1개 이상 있는 Kubernetes 클러스터.
Kubernetes 클러스터 생성 방법을 알아보려면 여기를 클릭하세요. 이 안내서는 AWS Ubuntu 18.04 EC2 인스턴스에서 1개의 마스터와 2개의 노드가 있는 Kubernetes 클러스터를 생성하는 데 도움이 됩니다.

우리가 할 일

  • Replicaset 만들기

복제본 만들기

새 파일을 만들고 다음 복제 세트 정의를 추가합니다.

vim my-replica-set.yml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-proxy
  labels:
    app: nginx-proxy
    tier: frontend
spec:
  # modify replicas according to your case
  replicas: 3
  selector:
    matchLabels:
      tier: frontend
  template:
    metadata:
      labels:
        tier: frontend
    spec:
      containers:
      - name: nginx
        image: nginx

위의 개체 정의는 포드의 세 가지 복제본을 생성합니다.

먼저 다음 명령을 사용하여 기존 복제 세트를 확인하십시오.

kubectl get replicaset

복제본을 만들려면 다음 명령을 실행하십시오.

kubectl create -f my-replica-set.yml
kubectl get replicaset
kubectl get pods

위의 스크린샷에서 레플리카 세트를 생성한 후 생성된 연못의 세부 정보를 볼 수 있습니다.

이제 이전에 복제본 세트의 정의에서 지정한 것과 동일한 라벨을 사용하여 개별 포드를 만듭니다.

vim my-test-pod.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
  labels:
    tier: frontend
spec:
  containers:
  - name: nginx
    image: nginx

이제 생성해도 생성되지 않습니다.

다음 명령어를 실행하여 이전 포드를 만들고 새 포드를 만듭니다.

kubectl get pods
kubectl create -f my-test-pod.yml
kubectl get pods

위의 스크린샷에서 새 포드를 만든 후에도 종료 상태임을 확인할 수 있습니다. 그 이유는 이미 복제본이 3으로 설정된 복제본이 있고 동일한 라벨로 새 포드를 별도로 생성하기 때문입니다. 라벨과 선택기가 복제본 세트와 일치하므로 복제본 세트 정의에 지정된 지정된 복제본 수를 유지하기 위해 포드를 삭제합니다.

다음 명령어를 사용하여 복제본 세트의 세부정보를 가져올 수 있습니다.

kubectl get replicaset
kubectl describe replicaset nginx-proxy

위의 스크린샷에서 복제본 세트가 복제본 수를 유지하기 위해 포드를 삭제하는 것을 볼 수 있습니다.

이제 다음 포드 정의를 사용하여 라벨이 없는 포드를 만들 수 있습니다.

vim my-test-pod-no-label.yml
apiVersion: v1
kind: Pod
metadata:
  name: pod1
spec:
  containers:
  - name: nginx
    image: nginx

라벨 없이 새 pod를 만들려면 다음 명령어를 실행하세요.

kubectl get pods
kubectl create -f my-test-pod-no-label.yml
kubectl get pods

위의 스크린샷에서 새 포드가 생성되었고 이번에는 복제본 세트가 새 포드를 삭제하지 않았음을 확인할 수 있습니다.

그 이유는 새 포트에 레이블이 없기 때문에 복제본 세트가 일치하지 않고 복제본 세트의 일부로 간주하지 않기 때문입니다.

이제 복제본 세트에 속하는 포트를 생성해 보겠습니다.

다음 명령을 실행하여 포드를 삭제합니다.

kubectl get pods
kubectl delete pod nginx-proxy-6gc46
kubectl get pods

위의 스크린샷에서 레플리카 세트에 속한 포드를 삭제한 후에도 새로운 포드가 생성된 것을 볼 수 있습니다. 복제본 세트 정의에서 지정한 복제본 수를 유지하기 위해 새 pod가 생성되었습니다.

이제 복제본 세트가 더 이상 필요하지 않으면 다음 명령을 사용하여 삭제할 수 있습니다.

kubectl get replicaset
kubectl delete replicaset nginx-proxy
kubectl get replicaset
kubectl get pods

별도로 생성한 포드는 복제본 세트의 일부가 아니므로 별도로 삭제해야 합니다.

명령을 사용하십시오. 레플리카 세트에 속하지 않는 포드를 삭제합니다.

kubectl get pods
kubectl delete pod pod1
kubectl get pods

결론

이 기사에서는 간단한 복제 세트를 작성하는 방법을 살펴보았습니다. 또한 라벨이 복제본 세트에서 사용 가능한 선택기와 일치하는 경우 포드가 어떻게 복제본 세트의 일부가 되는지 확인했습니다.