일부 워크로드 배포 설계가 권장되지만, 명시된 대로 정확하게 따르지 않아도 됩니다. 각 GDC 유니버스에는 사례별로 충족해야 하는 고유한 요구사항과 고려사항이 있습니다.
워크로드를 배포할 위치
GDC 플랫폼에서 가상 머신 (VM) 워크로드와 컨테이너 워크로드를 배포하는 작업은 서로 다릅니다. 이 섹션에서는 차이점과 각 리소스를 배포하는 위치를 소개합니다.
VM 기반 워크로드
VM 기반 워크로드를 호스팅하는 VM을 만들 수 있습니다. VM 기반 워크로드 요구사항을 가장 잘 충족할 수 있도록 VM의 모양과 크기에 관한 다양한 구성 옵션이 있습니다. VM과 VM 워크로드가 여러 개 있을 수 있는 프로젝트에 VM을 만들어야 합니다. 자세한 내용은 VM 개요를 참고하세요.
VM 기반 워크로드만 포함된 프로젝트에는 Kubernetes 클러스터가 필요하지 않습니다.
따라서 VM 기반 워크로드용 Kubernetes 클러스터를 프로비저닝할 필요가 없습니다.
컨테이너 기반 워크로드
컨테이너 기반 워크로드를 Kubernetes 클러스터의 포드에 배포할 수 있습니다.
Kubernetes 클러스터는 하나 이상의 프로젝트에 연결할 수 있지만 프로젝트의 하위 리소스는 아닙니다. 적절한 배포 환경의 프로젝트에만 클러스터를 연결하는 것이 좋습니다. 예를 들어 프로덕션 워크로드용 클러스터는 프로덕션 워크로드용 프로젝트에 연결됩니다.
Kubernetes 클러스터 내의 포드 예약의 경우 GDC는 예약, 선점, 제거에 관한 일반적인 Kubernetes 개념을 채택합니다.
클러스터 내에서 포드를 예약하는 권장사항은 워크로드의 요구사항에 따라 다릅니다.
배포 환경별 별도의 프로젝트 외에도 배포 환경별로 별도의 Kubernetes 클러스터를 설계하는 것이 좋습니다. 환경별로 Kubernetes 클러스터와 프로젝트를 모두 분리하면 프로덕션 워크로드와 비프로덕션 워크로드 간에 리소스 소비, 액세스 정책, 유지관리 이벤트, 클러스터 수준 구성 변경사항이 격리됩니다.
다음 다이어그램은 프로젝트, 클러스터, 배포 환경, 머신 클래스에 걸쳐 있는 여러 워크로드의 샘플 Kubernetes 클러스터 설계를 보여줍니다.
이 샘플 아키텍처에서는 배포 환경 내의 워크로드가 클러스터를 공유할 수 있다고 가정합니다. 각 배포 환경에는 별도의 Kubernetes 클러스터 집합이 있습니다. 그런 다음 적절한 배포 환경의 Kubernetes 클러스터에 프로젝트를 할당합니다. Kubernetes 클러스터는 다양한 머신 클래스 요구사항에 따라 여러 노드 풀로 세분화될 수 있습니다.
또는 다음과 같은 시나리오와 같은 컨테이너 작업에 여러 Kubernetes 클러스터를 설계하는 것이 유용합니다.
특정 Kubernetes 버전에 고정된 워크로드가 있으므로 서로 다른 버전의 클러스터를 유지합니다.
백업 정책과 같이 클러스터 구성이 서로 다른 워크로드가 있어 구성이 다른 클러스터를 여러 개 만듭니다.
중단이 발생하는 버전 업그레이드 또는 블루-그린 배포 전략을 용이하게 하기 위해 클러스터의 복사본을 병렬로 실행합니다.
API 서버 또는 클러스터 내 다른 단일 장애점을 제한할 위험이 있는 실험적 워크로드를 빌드하므로 기존 워크로드와 격리합니다.
다음 다이어그램은 이전 섹션에 설명된 컨테이너 작업과 같은 요구사항으로 인해 배포 환경별로 여러 클러스터가 구성된 예를 보여줍니다.
클러스터 수를 줄입니다.
효율적인 리소스 사용을 위해 배포 환경과 컨테이너 작업을 분리하는 요구사항을 충족하는 최소한의 Kubernetes 클러스터를 설계하는 것이 좋습니다. 클러스터가 추가될 때마다 필요한 추가 제어 영역 노드와 같은 오버헤드 리소스 소비가 추가로 발생합니다.
따라서 워크로드가 많은 대규모 클러스터는 소규모 클러스터가 여러 개인 경우보다 기본 컴퓨팅 리소스를 더 효율적으로 활용합니다.
구성 유사한 클러스터가 여러 개 있으면 클러스터 용량을 모니터링하고 크로스 클러스터 종속성을 계획하는 데 추가 유지관리 오버헤드가 발생합니다.
클러스터가 용량에 가까워지면 새 클러스터를 만드는 대신 클러스터에 노드를 추가하는 것이 좋습니다.
클러스터 내에서 노드 풀을 더 적게 만들기
효율적인 리소스 사용을 위해 Kubernetes 클러스터 내에 더 적은 수의 더 큰 노드 풀을 설계하는 것이 좋습니다.
여러 노드 풀을 구성하는 것은 다른 머신 클래스가 필요한 포드를 예약해야 할 때 유용합니다. 워크로드에 필요한 각 머신 클래스에 대해 노드 풀을 만들고 컴퓨팅 리소스를 효율적으로 사용할 수 있도록 노드 용량을 자동 확장으로 설정합니다.
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["이해하기 어려움","hardToUnderstand","thumb-down"],["잘못된 정보 또는 샘플 코드","incorrectInformationOrSampleCode","thumb-down"],["필요한 정보/샘플이 없음","missingTheInformationSamplesINeed","thumb-down"],["번역 문제","translationIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-09-04(UTC)"],[[["\u003cp\u003eGoogle Distributed Cloud (GDC) air-gapped supports both virtual machine (VM) and container-based workloads, with distinct deployment processes for each.\u003c/p\u003e\n"],["\u003cp\u003eVM-based workloads are deployed directly within projects and do not require Kubernetes clusters, while container-based workloads are deployed to pods on Kubernetes clusters.\u003c/p\u003e\n"],["\u003cp\u003eBest practices recommend creating separate Kubernetes clusters for each deployment environment (e.g., production, non-production) to isolate resources, access policies, and configurations.\u003c/p\u003e\n"],["\u003cp\u003eDesigning fewer, larger Kubernetes clusters and node pools within those clusters is generally more efficient in resource utilization than creating numerous smaller ones.\u003c/p\u003e\n"],["\u003cp\u003eMultiple clusters can be created for specific operational requirements, such as running workloads on different Kubernetes versions or with different cluster configurations.\u003c/p\u003e\n"]]],[],null,["This document provides an overview for workload management in\nGoogle Distributed Cloud (GDC) air-gapped. The following topics are covered:\n\n- [Where to deploy workloads](#where-to-deploy-workloads)\n- [Kubernetes cluster best practices](#best-practices-clusters)\n\nAlthough some of the workload deployment designs are recommended, it's not\nrequired to follow them exactly as prescribed. Each GDC\nuniverse has unique requirements and considerations that must be satisfied on a\ncase-by-case basis.\n\nThis document is for IT administrators within the platform administrator group\nwho are responsible for managing resources within their organization, and\napplication developers within the application operator group who are responsible\nfor developing and maintaining applications in a GDC\nuniverse.\n\nFor more information, see\n[Audiences for GDC air-gapped documentation](/distributed-cloud/hosted/docs/latest/gdch/resources/audiences).\n\nWhere to deploy workloads\n\nOn the GDC platform, operations to deploy virtual\nmachine (VM) workloads and container workloads are different. The following\ndiagram illustrates workload separation within the data plane layer of your\norganization.\n\n[VM-based workloads](#vm-workloads) operate within a VM. Conversely,\n[container workloads](#container-workloads) operate within a Kubernetes cluster.\nThe fundamental separation between VMs and Kubernetes clusters provide isolation\nboundaries between your VM workloads and container workloads. For more\ninformation, see\n[Resource hierarchy](/distributed-cloud/hosted/docs/latest/gdch/resources/resource-hierarchy).\n\nThe following sections introduce the differences between each workload type and\ntheir deployment lifecycle.\n\nVM-based workloads\n\nYou can create VMs to host your VM-based workloads. You have many configuration\noptions for your VM's shape and size to help best meet your VM-based workload\nrequirements. You must create a VM in a project, which can have many VM\nworkloads. VMs are a child resource of a project. For more information, see the\n[VMs overview](/distributed-cloud/hosted/docs/latest/gdch/application/ao-user/vms/vm-introduction).\n\nProjects containing only VM-based workloads don't require a Kubernetes cluster.\nTherefore, you don't need to provision Kubernetes clusters for VM-based\nworkloads.\n\nContainer-based workloads\n\nYou can deploy container-based workloads to a pod on a Kubernetes cluster. A\nKubernetes cluster consists of the following node types:\n\n- **Control plane node**: runs the management services, such as scheduling,\n etcd, and an API server.\n\n- **Worker node**: runs your pods and container applications.\n\nKubernetes clusters can be attached to one or many projects, but they are not a child resource of a project. This is a fundamental difference that Kubernetes clusters have compared to VMs. A VM is a child resource of a project, whereas Kubernetes clusters operate as a child resource of an organization, allowing them to attach to multiple projects.\n\nFor pod scheduling within a Kubernetes cluster, GDC\nadopts the general Kubernetes concepts of scheduling, preemption, and eviction.\nBest practices on scheduling pods within a cluster vary based on the\nrequirements of your workload.\n\nFor more information on Kubernetes clusters, see the\n[Kubernetes cluster overview](/distributed-cloud/hosted/docs/latest/gdch/platform/pa-user/clusters). For more\ninformation on managing your containers in a Kubernetes cluster, see\n[Container workloads in GDC](/distributed-cloud/hosted/docs/latest/gdch/application/ao-user/containers/containers-intro).\n\nBest practices for designing Kubernetes clusters\n\nThis section introduces best practices for designing Kubernetes clusters:\n\n- [Create separate clusters per software development environment](#separate-clusters-per-deployment)\n- [Create fewer, larger clusters](#create-fewer-larger-clusters)\n- [Create fewer, larger node pools within a cluster](#create-fewer-larger-node-pools)\n\nConsider each best practice to design a resilient cluster design for your\ncontainer workload lifecycle.\n\nCreate separate clusters per software development environment\n\nIn addition to\n[separate projects per software development environment](/distributed-cloud/hosted/docs/latest/gdch/resources/access-boundaries#design-projects-for-isolation),\nwe recommend that you design separate Kubernetes clusters per software\ndevelopment environment. A *software development environment* is an area within\nyour GDC universe intended for all operations that\ncorrespond to a designated lifecycle phase. For example, if you have two\nsoftware development environments named `development` and `production` in your\norganization, you could create a separate set of Kubernetes clusters for each\nenvironment and attach projects to each cluster based on your needs. We\nrecommend Kubernetes clusters in pre-production and production lifecycles to\nhave multiple projects attached to them.\n\nDefined clusters for each software development environment assumes that\nworkloads within a software development environment can share clusters. You then\nassign projects to the Kubernetes cluster of the appropriate environment. A\nKubernetes cluster might be further subdivided into multiple node pools or\n[use taints for workload isolation](/distributed-cloud/hosted/docs/latest/gdch/platform/pa-user/isolate-container-workloads).\n\nBy separating Kubernetes clusters by software development environment, you\nisolate resource consumption, access policies, maintenance events, and\ncluster-level configuration changes between your production and non-production\nworkloads.\n\nThe following diagram shows a sample Kubernetes cluster design for multiple\nworkloads that span projects, clusters, software development environments, and\nmachine classes.\n\nThis sample architecture assumes that workloads within a production and\ndevelopment software development environment can share clusters. Each\nenvironment has a separate set of Kubernetes clusters, which are further\nsubdivided into multiple node pools for different machine class requirements.\n\nAlternatively, designing multiple Kubernetes clusters is useful for container\noperations like the following scenarios:\n\n- You have some workloads pinned to a specific Kubernetes version, so you maintain different clusters at different versions.\n- You have some workloads that require different cluster configuration needs, such as the [backup policy](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/cluster-backup/install-backup-restore), so you create multiple clusters with different configurations.\n- You run copies of a cluster in parallel to facilitate disruptive version upgrades or a blue-green deployment strategy.\n- You build an experimental workload that risks throttling the API server or other single point of failures within a cluster, so you isolate it from existing workloads.\n\nThe following diagram shows an example where multiple clusters are configured\nper software development environment due to requirements such as the container\noperations described in the previous section.\n\nCreate fewer clusters\n\nFor efficient resource utilization, we recommend designing the fewest number of\nKubernetes clusters that meet your requirements for separating software\ndevelopment environments and container operations. Each additional cluster\nincurs additional overhead resource consumption, such as additional control\nplane nodes required. Therefore, a larger cluster with many workloads utilizes\nunderlying compute resources more efficiently than many small clusters.\n\nWhen there are multiple clusters with similar configurations, it creates\nadditional maintenance overhead to monitor cluster capacity and plan for\ncross-cluster dependencies.\n\nIf a cluster is approaching capacity, we recommend that you add additional\nnodes to a cluster instead of creating a new cluster.\n\nCreate fewer node pools within a cluster\n\nFor efficient resource utilization, we recommend designing fewer, larger node\npools within a Kubernetes cluster.\n\nConfiguring multiple node pools is useful when you need to schedule pods that\nrequire a different machine class than others. Create a node pool for each\nmachine class your workloads require, and set the node capacity to autoscaling\nto allow for efficient usage of compute resources.\n\nWhat's next\n\n- [Resource hierarchy](/distributed-cloud/hosted/docs/latest/gdch/resources/resource-hierarchy)\n- [Create a highly available container app](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/ha-apps/deploy-ha-container-app)\n- [Create a highly available VM app](/distributed-cloud/hosted/docs/latest/gdch/platform-application/pa-ao-operations/ha-apps/deploy-ha-vm-app)"]]