Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Kubernetes에 cRPD 설치

Kubernetes는 컨테이너화된 워크로드 및 서비스를 관리하기 위한 오픈 소스 플랫폼입니다. 컨테이너는 애플리케이션을 번들로 묶고 실행하는 좋은 방법입니다.

운영 환경에서 애플리케이션을 실행하는 컨테이너를 관리합니다. 다운타임이 발생하지 않도록 합니다. 예를 들어 컨테이너가 다운되면 다른 컨테이너를 시작해야 합니다. Kubernetes는 분산 시스템을 탄력적으로 실행할 수 있는 프레임워크를 제공합니다. Kubernetes는 호스트 컨테이너의 클러스터 전반에서 애플리케이션 컨테이너의 배포, 자동화, 확장 및 운영을 위한 플랫폼을 제공합니다.

전제 조건

Linux 시스템에 Kubernetes를 설치하고 2노드 Linux 클러스터에 Kubernetes를 배포하려면 Kubernetes 설치를 참조하세요.

Kubernetes를 배포하면 클러스터가 생성됩니다. Kubernetes 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 작업자 머신 집합으로 구성됩니다. 모든 클러스터에는 하나 이상의 작업자 노드가 있습니다. 작업자 노드는 애플리케이션의 구성 요소인 Pod를 호스팅합니다.

이 섹션에서는 Kubernetes에서 cRPD Docker 이미지를 생성하는 단계를 간략하게 설명합니다.

쿠버네티스 설치

쿠버네티스를 설치하려면 다음을 수행합니다.

  1. 루트 사용자로 로그인합니다.
  2. 소프트웨어를 다운로드하여 설치합니다.
  3. 쿠버네티스를 시작한다.

Kubernetes 클러스터

Kubernetes는 단일 단위로 작동하도록 연결된 컴퓨터 클러스터를 조정합니다. Kubernetes는 클러스터 전반에 걸쳐 효율적인 방식으로 cRPD의 배포 및 스케줄링을 자동화합니다.

Kubernetes 클러스터는 두 가지 유형의 리소스로 구성됩니다.

  • 기본은 클러스터를 조정합니다

  • 노드는 응용 프로그램을 실행하는 작업자입니다

기본은 클러스터 관리를 담당합니다. 기본은 클러스터의 모든 활동(예: 애플리케이션 스케줄링, 애플리케이션의 원하는 상태 유지 관리, 애플리케이션 확장, 새 업데이트 롤아웃)을 조정합니다.

노드는 Kubernetes 클러스터에서 작업자 컴퓨터 역할을 하는 VM 또는 물리적 컴퓨터입니다. 각 노드에는 노드를 관리하고 Kubernetes 마스터와 통신하기 위한 에이전트인 Kubelet이 있습니다. 노드에는 Docker 또는 rkt와 같은 컨테이너 작업을 처리하기 위한 도구도 있어야 합니다. 프로덕션 트래픽을 처리하는 Kubernetes 클러스터에는 최소 3개의 노드가 있어야 합니다.

Kubernetes에 cRPD를 배포하면 기본 컨테이너가 애플리케이션 컨테이너를 시작합니다. 기본은 컨테이너가 클러스터의 노드에서 실행되도록 예약합니다. 노드는 기본이 노출하는 Kubernetes API를 사용하여 기본과 통신합니다. 최종 사용자는 Kubernetes API를 직접 사용하여 클러스터와 상호 작용할 수도 있습니다.

파드는 항상 노드에서 실행된다. 노드는 Kubernetes의 작업자 컴퓨터이며 클러스터에 따라 가상 또는 물리적 컴퓨터일 수 있습니다. 각 노드는 기본 노드에 의해 관리됩니다. 노드에는 여러 개의 Pod가 있을 수 있으며, Kubernetes 기본 노드는 클러스터의 노드에서 Pod 예약을 자동으로 처리합니다.

모든 Kubernetes 노드는 최소한 다음을 실행합니다.

  • 쿠버네티스 프라이머리와 노드 간의 통신을 담당하는 프로세스인 Kubelet; 머신에서 실행되는 파드와 컨테이너를 관리한다.

  • 레지스트리에서 컨테이너 이미지를 끌어오고, 컨테이너의 압축을 풀고, 애플리케이션을 실행하는 컨테이너 런타임(예: Docker, rkt)입니다.

minikube 클러스터를 생성하려면 다음을 수행합니다.

  1. 다음 명령을 실행하여 minikube 버전을 확인합니다.
  2. 다음 명령을 실행하여 클러스터를 시작합니다.
  3. 다음 명령을 실행하여 kubectl이 설치되어 있는지 확인합니다.
  4. 다음 명령을 실행하여 클러스터 세부 정보를 확인합니다.
  5. 다음 명령을 실행하여 클러스터의 노드를 확인합니다.

cRPD Docker 이미지 다운로드

필수 구성 요소
  • cRPD 소프트웨어를 가져오기 전에 Linux 호스트에 Docker가 설치되어 있고 Docker 엔진이 실행 중인지 확인합니다.

  • cRPD 소프트웨어를 다운로드하기 전에 주니퍼 지원 에 등록해야 합니다.

Docker 이미지를 다운로드하려면 다음을 수행합니다.

  1. cRPD에 대한 판매 이행 프로세스 중에 제공된 자격 증명을 사용하여 Juniper Docker 레지스트리에 로그인합니다.
    1. 파일 -passwd.txt 만들고 액세스 토큰을 복사합니다. 주니퍼 고객 관리 팀에서 제공한 견적을 제외합니다.
    2. 다음 명령을 사용하여 엔터프라이즈 허브에 로그인합니다.
      root@ubuntu-vm18$ cat passwd.txt | docker login -u"<registered-email-id>" --password-stdin enterprise-hub.juniper.net:443

      예를 들어 root@ubuntu-vm18$ cat passwd.txt | docker login -u user@domain.com --password-stdin enterprise-hub.juniper.net:443

  2. 다음 명령을 사용하여 다운로드 사이트에서 docker 이미지를 가져옵니다.

    root@dc-rpd-01# docker pull enterprise-hub.juniper.net:443/crpd-docker-prod/crpd:<release tag>

    예를 들어

    root@ubuntu-vm18:~# docker pull enterprise-hub.juniper.net:443/crpd-docker-prod/crpd:22.3R1

  3. docker 이미지 리포지토리에서 이미지를 확인합니다.

    root@dc-rpd-01# docker images

디플로이먼트를 사용하여 cRPD 파드 생성

쿠버네티스 파드는 하나 이상의 컨테이너 그룹으로, 관리 및 네트워킹을 위해 함께 묶여 있다. 쿠버네티스 디플로이먼트는 파드의 상태를 확인하고, 파드가 종료되면 파드의 컨테이너를 재시작한다. 디플로이는 파드의 생성 및 확장을 관리하는 데 권장되는 방법이다.

디플로이먼트에서 원하는 상태를 설명하면 디플로이먼트 컨트롤러가 실제 상태를 원하는 상태로 변경하는 경우. 디플로이먼트를 사용하여 새 레플리카셋을 생성할 수 있습니다. 또는 기존 디플로이먼트를 제거하고 새 디플로이먼트로 리소스를 채택할 수 있습니다.

  1. Kubernetes-primary에 crpd.yaml 파일을 만들고 다음 텍스트 콘텐츠를 추가합니다.
  2. crpd.yaml 파일을 저장하여 cRPD 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd.yaml

  3. 다음 명령을 실행하여 기존 파드 목록을 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령어를 실행하여 파드의 컨테이너와 이를 빌드하는 데 사용된 이미지를 확인한다.

    root@kubernetes-master:~# kubectl describe pod crpd

YAML을 사용하여 cRPD Pod 생성

파드는 쿠버네티스 애플리케이션의 기본 실행 단위로, 사용자가 생성하거나 배포하는 쿠버네티스 오브젝트 모델에서 가장 작고 단순한 단위이다. 파드는 배포 단위, 즉 쿠버네티스에 있는 애플리케이션의 단일 인스턴스를 나타내며, 단일 컨테이너 또는 긴밀하게 결합되어 리소스를 공유하는 소수의 컨테이너로 구성될 수 있다. 도커는 쿠버네티스 파드에서 사용되는 가장 일반적인 컨테이너 런타임이다.

파드를 직접 생성하거나 쿠버네티스에서 컨트롤러를 간접적으로 사용할 수 있다. 컨트롤러는 여러 파드를 생성하고 관리할 수 있다. 컨트롤러는 사용자가 제공하는 Pod 템플릿을 사용하여 Pod를 생성합니다. Pod 템플릿은 Replication Controller, Jobs 및 DaemonSets와 같은 다른 개체에 포함된 Pod 사양입니다.

YAML 파일을 사용하여 cRPD Pod를 생성하려면 다음을 수행합니다

  1. Kubernetes-primary에서 crpd.yaml 파일을 만들고 다음 텍스트 콘텐츠를 추가합니다.
  2. crpd.yaml 파일을 저장하여 crpd 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd.yaml

  3. 다음 명령을 실행하여 기존 파드 목록을 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령어를 실행하여 파드의 컨테이너와 이를 빌드하는 데 사용된 이미지를 확인한다.

    root@kubernetes-master:~# kubectl describe pod crpd

  5. 다음 명령을 실행하여 실행 중인 컨테이너 내에 대화형 CLI를 제공합니다.

    root@kubernetes-master:~# kubectl exec -it crpd cli

    여기서는 이름이 crpd 인 포드를 실행하고 명령 줄 모드에 연결합니다.

  6. 다음 명령을 실행하여 경로를 확인합니다.

    root@crpd:/> show route

각 파드는 주어진 애플리케이션의 단일 인스턴스를 실행하기 위한 것이다. 애플리케이션을 수평으로 확장하려면(예: 여러 인스턴스 실행), 각 인스턴스에 대해 하나씩 여러 파드를 사용해야 한다. 쿠버네티스에서는 이를 일반적으로 복제라고 한다.

작업 리소스를 사용하여 cRPD Pod 생성

잡은 하나 이상의 파드를 생성하고, 지정된 개수가 성공적으로 종료될 때까지 파드의 실행을 계속 재시도한다. 지정된 성공 완료 횟수에 도달하면 작업이 완료됩니다. 잡을 사용하여 여러 파드를 병렬로 실행할 수도 있다. 잡을 삭제하면 잡은 파드가 정리된다. 잡을 일시 중단하면 잡이 재개될 때까지 활성 파드가 삭제된다. crpd_job.yaml 파일을 사용하여 cRPD 파드를 생성하려면,

  1. 작업 노드에 crpd_job.yaml 파일을 생성하고 다음 텍스트 콘텐츠를 추가합니다.
  2. crpd_job.yaml 파일을 저장하여 crpd 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd_job.yaml

  3. 다음 명령을 실행하여 기존 파드 목록을 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령어를 실행하여 파드의 컨테이너와 이를 빌드하는 데 사용된 이미지를 확인한다.

    root@kubernetes-master:~# kubectl describe job/crpdjob

DaemonSet을 사용하여 cRPD Pod 생성

데몬셋은 모든(또는 일부) 노드가 파드의 복사본을 실행하도록 보장한다. 노드가 클러스터에 추가되면, 파드가 추가된다. 노드가 클러스터에서 제거되면 해당 파드는 가비지 수집된다. 데몬셋이 삭제되면, 생성된 파드는 삭제된다.

crpd_daemonset.yaml 파일을 사용하여 cRPD Pod 생성

  1. 작업 노드에 crpd_daemonset.yaml 파일을 생성하고 다음 텍스트 콘텐츠를 추가합니다.
  2. da1.yaml 파일을 저장하여 crpd 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd_daemonset.yaml

  3. 다음 명령을 실행하여 기존 파드 목록을 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령어를 실행하여 파드의 컨테이너와 이를 빌드하는 데 사용된 이미지를 확인한다.

    root@kubernetes-master:~# kubectl describe pod crpd

    root@kubernetes-master:~# kubectl describe pod crpd-5fc4fd79df-xr8f5

각 파드는 주어진 애플리케이션의 단일 인스턴스를 실행하기 위한 것이다. 애플리케이션을 수평으로 확장하려면(예: 여러 인스턴스 실행), 각 인스턴스에 대해 하나씩 여러 파드를 사용해야 한다. 쿠버네티스에서는 이를 일반적으로 복제라고 한다.

cRPD 확장

명령에 대한 매개 변수를 사용하여 –replicas 수요에 따라 여러 cRPD 인스턴스를 생성할 수 있습니다 kubectl run . 디플로이먼트는 레플리카셋을 소유하고 관리할 수 있는 객체이다.

확장하기 전에 하나의 포드가 있어야 합니다.

스케일 업하려면 다음을 수행합니다.

  1. 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd_replicatset.yaml

  2. Kubernetes-primary에 crpd_replicaSet.yaml 파일을 만들고 다음 텍스트 콘텐츠를 추가합니다.
  3. 다음 명령을 실행하여 파드를 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령을 실행하여 디플로이먼트를 4개의 복제본으로 확장한다.

    root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=4

  5. 다음 명령을 실행하여 배포를 나열합니다.

    root@kubernetes-master:~# kubectl get deployments

  6. 다음 명령을 실행하여 변경된 Pod 수를 확인합니다.

    root@kubernetes-master:~# kubectl get pods -o wide

  7. 다음 명령을 실행하여 Pod의 세부 정보를 확인합니다.

    root@kubernetes-master:~# kubectl describe pods

축소 방법:

  1. 다음 명령을 실행하여 서비스를 두 개의 복제본으로 축소합니다.

    root@kubernetes-master:~# kubectl scale deployments crpdref --replicas=2

  2. 다음 명령을 실행하여 배포를 나열합니다.

    root@kubernetes-master:~# kubectl get deployments

  3. 다음 명령을 실행하여 Pod 수를 나열합니다. 두 개의 파드가 종료된 것을 볼 수 있다.

    root@kubernetes-master:~# kubectl get pods -o wide

cRPD 구축의 롤 업데이트

파드 인스턴스를 새 버전으로 업데이트할 수 있다. 롤링 업데이트를 사용하면 파드 인스턴스를 새 인스턴스로 점진적으로 업데이트하여 다운타임 없이 디플로이먼트 업데이트를 수행할 수 있다. 새 파드는 사용 가능한 리소스가 있는 노드에서 스케줄링된다. 롤백 업데이트는 다운타임 없이 지속적인 통합 및 지속적인 애플리케이션 제공을 통해 애플리케이션을 한 환경에서 다른 환경으로 승격합니다. 쿠버네티스에서 업데이트는 버전이 지정되며, 모든 디플로이먼트 업데이트는 이전의 안정적인 버전으로 되돌릴 수 있다.

cRPD 구축을 새 이미지로 업데이트하고 업데이트 후 구성을 유지하려면:

  1. cRPD 파드를 생성한다.

    root@crpd-01:~# kubectl kubectl create -f crpd_deploy.yaml

  2. Kubernetes-primary에 crpd_deploy.yaml 파일을 만들고 다음 텍스트 콘텐츠를 추가합니다.
  3. 다음 명령을 실행하여 배포를 나열합니다.

    root@kubernetes-master:~# kubectl get deployments

  4. 다음 명령을 실행하여 실행 중인 Pod를 나열합니다.

    root@kubernetes-master:~# kubectl get pods

    root@kubernetes-master:~# kubectl get pods -o wide

  5. 다음 명령을 실행하여 cRPD의 현재 이미지 버전을 확인합니다.

    root@kubernetes-master:~# kubectl exec -it crpd-deploy4-674b4fcfb5-8xc5d -- cli

  6. 다음 명령을 실행하여 현재 이미지 버전을 확인합니다.

    root@crpd-deploy4-674b4fcfb5-8xc5d> show version

  7. 다음 명령을 실행하여 응용 프로그램의 이미지를 새 버전으로 업데이트합니다.

    root@crpd-deploy4-674b4fcfb5-8xc5d:~$ sudo kubectl edit deployment/crpd-deploy4

  8. 다음 명령을 실행하여 이미지가 업데이트되었는지 확인합니다.

    root@crpd-deploy4-674b4fcfb5-8xc5d:~$ sudo kubectl rollout status deployment/crpd-deploy4

  9. 다음 명령을 실행하여 파드를 확인한다.

    root@crpd-deploy4-674b4fcfb5-8xc5d> kubectl get pods

  10. 다음 명령을 실행하여 cRPD의 이미지 버전을 확인합니다.

    root@kubernetes-master:~$ sudo kubectl exec -it crpd-deploy4-6ff476994d-8z2kr -- bash

  11. 다음 명령을 실행하여 현재 이미지 버전을 확인합니다.

    root@crpd-deploy4-6ff476994d-8z2kr> show version

할당된 리소스가 있는 cRPD 포드 배포

Pod는 두 가지 종류의 공유 리소스, 즉 컨테이너에 대한 네트워킹과 스토리지를 제공합니다. 파드의 컨테이너가 파드 외부의 엔티티와 통신할 때, 공유 네트워크 리소스(예: 포트)를 사용하는 방법을 조정해야 한다. 파드 내에서 컨테이너는 IP 주소와 포트를 사용하여 통신 localhost 한다.

파드 내의 컨테이너는 파드에 대해 구성된 name 것과 동일한 시스템 호스트 이름을 본다.

파드의 모든 컨테이너는 컨테이너 스펙의 플래그를 privileged 사용하여 특권 모드를 활성화할 수 있다. 이는 네트워크 스택 조작 또는 하드웨어 디바이스 액세스와 같은 운영 체제 관리 기능이 필요한 컨테이너에 유용합니다. 권한 있는 컨테이너 내의 프로세스는 컨테이너 외부의 프로세스에서 사용할 수 있는 것과 거의 동일한 권한을 갖습니다.

리소스가 있는 포드 배포를 보려면:

  1. Kubernetes-primary에서 crpd_res.yaml 파일을 만들고 다음 텍스트 콘텐츠를 추가합니다.
  2. crpd_res.yaml 파일을 저장하여 crpd 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd_res.yaml

  3. 다음 명령을 실행하여 기존 파드 목록을 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령어를 실행하여 파드의 컨테이너와 이를 빌드하는 데 사용된 이미지를 확인한다.

    root@kubernetes-master:~# kubectl describe pod crpres

마운트된 볼륨을 사용한 cRPD Pod 배포

An emptyDir 은 Kubernetes에서 지원되는 볼륨 유형입니다. 파드가 노드에 할당될 때 생성되며, 파드가 해당 노드에서 실행되는 한 존재한다. 이름에서 알 수 있듯이 볼륨은 emptyDir 처음에 비어 있습니다. 파드의 모든 컨테이너는 볼륨에서 emptyDir 동일한 파일을 읽고 쓸 수 있지만, 해당 볼륨은 각 컨테이너의 동일하거나 다른 경로에 마운트될 수 있다. 어떤 이유로든 파드가 노드에서 제거되면, 의 emptyDir 데이터는 영구적으로 삭제된다.

Kubernetes에 스토리지 경로를 마운트하여 cRPD Pod 배포를 보려면 다음을 수행합니다.

  1. Kubernetes-primary에 crpd_volume.yaml 파일을 만들고 다음 텍스트 콘텐츠를 추가합니다.
  2. crpd_volume.yaml 파일을 저장하여 crpd 파드를 생성한다.

    root@kubernetes-master:~# kubectl create -f crpd_volume.yaml

  3. 다음 명령을 실행하여 기존 파드 목록을 확인한다.

    root@kubernetes-master:~# kubectl get pods

  4. 다음 명령어를 실행하여 파드의 컨테이너와 이를 빌드하는 데 사용된 이미지를 확인한다.

    root@kubernetes-master:~# kubectl describe pod crpd-volume

  5. 다음 명령을 실행하여 cRPD 인스턴스를 실행합니다.

    root@kubernetes-master:~# kubectl exec -it crpd-volume bash

  6. 다음 명령을 실행하여 경로의 파일을 확인합니다.

    root@crpd-volume:/# ls

  7. 다음 명령을 실행하여 스토리지 경로로 이동합니다.

    root@crpd-volume:/# cd var/log/crpd-storage/

    root@crpd-volume:/var/log/crpd-storage/#