이 페이지에서는 플릿 패키지, FleetPackage
API, 그리고 이러한 항목이 구성 동기화와 어떤 관련이 있는지 설명합니다.
FleetPackage
는 전체 Fleet에서 패키지를 관리할 수 있는 선언적 API입니다. 플릿 패키지는 클러스터 구성을 정의하는 Kubernetes YAML 매니페스트의 집합입니다. Fleet 패키지를 사용하면 Fleet에 등록된 클러스터에 일괄 또는 점진적 출시를 통해 패키지를 배포할 수 있습니다.
각 FleetPackage
객체를 한 번 정의한 후 새 버전으로 패키지를 업데이트할 수 있습니다. 새 버전을 적용하면 Fleet 패키지 서비스가 이러한 변경사항을 선택하여 클러스터에 배포합니다.
이점
Fleet 패키지를 사용하여 Fleet에 등록된 클러스터 전체에 Kubernetes 리소스를 배포합니다. Fleet 패키지를 만들고 적용하면 Fleet 패키지가 Git 저장소의 Kubernetes 구성 파일을 새 클러스터에 자동으로 배포합니다. Fleet 패키지는 자동 편차 보정과 같은 구성 동기화의 이점을 기반으로 하며 다음과 같은 고유한 이점을 제공합니다.
리소스 출시 자동화: Fleet 패키지를 설정하면 Fleet 패키지 서비스가 모든 클러스터에 Fleet 패키지 서비스가 자동으로 배포합니다.
새 클러스터 자동 구성: Fleet 패키지를 구성한 후 나중에 Fleet에 새 클러스터를 추가하면 Fleet 패키지로 정의된 모든 리소스가 새 클러스터에 자동으로 배포됩니다.
대규모 Kubernetes 구성 관리: 클러스터를 하나씩 관리하는 대신 Fleet 패키지를 사용하여 전체 클러스터 Fleet에 리소스를 배포합니다.
잘못된 변경사항의 영향을 최소화: 한 번에 리소스를 배포할 최대 클러스터 수를 선택합니다. 각 클러스터의 변경사항을 면밀히 모니터링하여 잘못된 변경사항이 전체 차량에 영향을 미치지 않도록 할 수 있습니다.
구성 동기화 구성 간소화: Fleet 패키지는 Cloud Build를 사용하여 Git에 인증합니다. 즉,
RootSync
또는RepoSync
객체당 한 번이 아니라 프로젝트당 한 번 인증하면 됩니다.
다음 시나리오 중 하나 이상이 적용되는 경우 Fleet 패키지 대신 RootSync
또는 RepoSync
객체와 함께 구성 동기화를 사용하는 것이 좋습니다.
소수의 클러스터를 관리합니다.
Fleet Package API에서 라벨 및 변형으로 제공하는 것 이상으로 리소스가 클러스터에 배포되는 방식을 더 세부적으로 제어해야 합니다.
요구사항 및 제한사항
Fleet 패키지를 구성할 때는 Git 저장소만 정보 소스로 지원됩니다.
Git에 저장된 Kubernetes 리소스는 리소스의 최종 상태를 나타내야 합니다. Git에 저장된 리소스를 변환하는 추가 오버레이는 지원되지 않습니다. 이러한 리소스의 차이점에 관한 자세한 내용은 권장사항: WET 저장소 만들기를 참고하세요.
FleetPackage
API는us-central1
리전에서만 사용할 수 있습니다. 다른 리전의 클러스터에 계속 배포할 수 있지만 Cloud Build를 설정하고us-central1
에서 gcloud CLI를 구성해야 합니다.
아키텍처
FleetPackage
API를 사용하여 Kubernetes 매니페스트를 클러스터 그룹에 배포할 수 있습니다. FleetPackage
API는 Cloud Build를 사용하여 Git 저장소에서 Kubernetes 리소스를 동기화하고 가져옵니다. 그러면 Fleet 패키지 서비스가 이러한 리소스를 클러스터에 배포합니다.
사용 사례 예시
Fleet 패키지를 사용하여 Git 저장소의 리소스를 전체 클러스터 Fleet에 배포할 수 있습니다. 리소스가 배포되는 방식, 위치, 유형을 제어하도록 Fleet 패키지를 구성할 수도 있습니다.
다음 섹션에서는 다양한 FleetPackage
구성의 예를 보여줍니다.
Fleet 패키지 적용에 관한 자세한 내용은 Fleet 패키지 배포를 참고하세요.
Fleet의 모든 클러스터에 배포
다음 FleetPackage
는 롤링 전략을 사용하여 한 번에 세 개의 클러스터에 Kubernetes 리소스를 배포하고, 함대의 모든 클러스터를 타겟팅합니다.
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
rolloutStrategy:
rolling:
maxConcurrent: 3
클러스터 하위 집합에 배포
다음 FleetPackage
는 라벨 선택기를 사용하여 Kubernetes 리소스를 함대의 "us"
와 일치하는 멤버십 라벨 country
이 있는 클러스터에만 배포합니다.
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
target:
fleet:
project: projects/my-project
selector:
matchLabels:
country: "us"
rolloutStrategy:
rolling:
maxConcurrent: 3
클러스터에 대안 리소스 배포
이 예시에서는 Git 저장소에 두 가지 배포 사양이 포함된 '배포'라는 폴더가 있습니다.
복제본: 3
# small.yaml 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:1.14.2 ports: - containerPort: 80
복제본: 10개
# large.yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 10 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
변형을 사용하여 '소규모' 또는 '대규모' 배포를 서로 다른 클러스터에 배포할 수 있습니다. 각 클러스터에는 nginx-size=small
또는 nginx-size=large
라벨이 있습니다.
이 예시의 FleetPackage
는 다음과 유사합니다.
resourceBundleSelector:
cloudBuildRepository:
name: projects/my-project/locations/us-central1/connections/my-connection/repositories/my-repo
tag: v1.0.0
serviceAccount: projects/my-project/serviceAccounts/my-service-account@my-project.iam.gserviceaccount.com
path: deployments
variantsPattern: "*.yaml"
rolloutStrategy:
rolling:
maxConcurrent: 2
target:
fleet:
project: projects/my-project
variantSelector:
variantNameTemplate: ${membership.labels['nginx-size']}