GKE Image Streaming: Швидке занурення в революційну технологію Google Cloud

Kubernetes революціонізував оркестрацію контейнерів, а Google Kubernetes Engine продовжує ламати бар'єри, спрощуючи операції як для розробників, так і для команд DevOps. Однією з найінноваційніших функцій, яка була нещодавно введена, є GKE Image Streaming.

Цей блог пояснить, що таке GKE Image Streaming, як він працює і чому це важливо — коротко, просто і зрозуміло.

Що таке GKE Image Streaming?

GKE Image Streaming — це функція, розроблена для прискорення часу запуску контейнерів шляхом оптимізації процесу завантаження контейнерних зображень. Замість того, щоб завантажувати все зображення перед запуском пода (Pod), ця функція дозволяє транслювати лише необхідні частини зображення. Це зменшує час, необхідний для запуску робочих навантажень, особливо коли йдеться про великі контейнерні зображення.

Як це працює?

Зазвичай Kubernetes завантажує все контейнерне зображення перед тим, як запустити под. Завдяки Image Streaming GKE використовує техніку, що називається завантаженням зображення за вимогою:

  1. Ліниве завантаження (Lazy Loading): Завантажуються лише ті частини контейнерного зображення, які необхідні для запуску робочого навантаження.
  2. Трансляційний доступ (Streaming Access): Під час роботи додатка додаткові шари зображення завантажуються за потребою.
  3. Кешування (Caching): Часто використовувані дані кешуються для покращення продуктивності при наступних запусках подів.

Цей процес безшовний і не вимагає від розробників змінювати їхні контейнерні зображення.

Чому це важливо?

  1. Швидший запуск подів (Faster Pod Startup): Завдяки трансляції лише необхідних частин зображення, GKE значно скорочує час запуску подів.
  2. Оптимізація сховища (Optimised Storage): Менше даних завантажується, що зменшує навантаження на сховище на вузлах.
  3. Ефективне використання пропускної здатності (Efficient Bandwidth Use): Image Streaming зменшує мережевий трафік, що є особливо корисним для великих масштабних розгортань.
  4. Зниження витрат (Cost Savings): Швидші розгортання та зменшене використання сховища призводять до зниження операційних витрат.

Коли варто використовувати GKE Image Streaming?

  1. Сценарії з високою масштабованістю (High Scalability Scenarios): Коли потрібно швидко запускати сотні або тисячі подів.
  2. Великі зображення для робочих навантажень (Large Image Workloads): Для додатків, які залежать від великих контейнерних зображень з багатьма шарами.
  3. CI/CD пайплайни (CI/CD Pipelines): Для прискорення циклів тестування та розгортання.

Доказ концепції: GKE Image Streaming в дії

Щоб оцінити переваги GKE Image Streaming, я провів PoC, використовуючи один GKE кластер з двома пулами вузлів:
• Назва пулу вузлів: poc : Image Streaming увімкнено.
• Назва пулу вузлів: poc-imagestreaming-off : Image Streaming вимкнено.

Кроки:

1.
Створення GKE кластеру:

Налаштовано кластер з двома пулами вузлів, один з яких має увімкнене Image Streaming, а інший — вимкнене.

#gcloud container node-pools describe poc --cluster cluster-srinivas --zone us-central1-c  
config:  
 diskSizeGb: 100  
 diskType: pd-balanced  
 effectiveCgroupMode: EFFECTIVE_CGROUP_MODE_V2  
 gcfsConfig:  
 enabled: true  
 imageType: COS_CONTAINERD  
 kubeletConfig:  
 insecureKubeletReadonlyPortEnabled: true  
 machineType: e2-medium  
 metadata:  
 disable-legacy-endpoints: 'true'  
 oauthScopes:  
 - https://www.googleapis.com/auth/devstorage.read_only  
 - https://www.googleapis.com/auth/logging.write  
 - https://www.googleapis.com/auth/monitoring  
 - https://www.googleapis.com/auth/service.management.readonly  
 - https://www.googleapis.com/auth/servicecontrol  
 - https://www.googleapis.com/auth/trace.append  
 serviceAccount: default  
 shieldedInstanceConfig:  
 enableIntegrityMonitoring: true  
 windowsNodeConfig: {}  
etag: dbb8ab5b-cf4f-4f5d-a442-c8d6ef872447  
initialNodeCount: 1  
instanceGroupUrls:  
- https://www.googleapis.com/compute/v1/projects//zones/us-central1-c/instanceGroupManagers/gke-cluster-srinivas-poc-d8b47287-grp  
locations:  
- us-central1-c  
management:  
 autoRepair: true  
 autoUpgrade: true  
maxPodsConstraint:  
 maxPodsPerNode: '110'  
name: poc  
networkConfig:  
 enablePrivateNodes: true  
 podIpv4CidrBlock: 10.52.0.0/14  
 podRange: gke-cluster-srinivas-pods-a78369bf  
podIpv4CidrSize: 24  
selfLink: https://container.googleapis.com/v1/projects//zones/us-central1-c/clusters/cluster-srinivas/nodePools/poc  
status: RUNNING  
upgradeSettings:  
 maxSurge: 1  
 strategy: SURGE  
version: 1.30.8-gke.1128000
#gcloud container node-pools describe poc-imagestreaming-off --cluster cluster-srinivas --zone us-central1-c  
autoscaling: {}  
config:  
 advancedMachineFeatures:  
 enableNestedVirtualization: false  
 diskSizeGb: 40  
 diskType: pd-balanced  
 effectiveCgroupMode: EFFECTIVE_CGROUP_MODE_V2  
 imageType: COS_CONTAINERD  
 kubeletConfig:  
 insecureKubeletReadonlyPortEnabled: true  
 machineType: e2-medium  
 metadata:  
 disable-legacy-endpoints: 'true'  
 oauthScopes:  
 - https://www.googleapis.com/auth/cloud-platform  
 resourceLabels:  
 owner: nagananda  
 resourceManagerTags: {}  
 serviceAccount: default  
 shieldedInstanceConfig:  
 enableIntegrityMonitoring: true  
 windowsNodeConfig: {}  
etag: cab1ac44-ea69-4ef9-89a3-81a7e34aa14f  
initialNodeCount: 1  
instanceGroupUrls:  
- https://www.googleapis.com/compute/v1/projects//zones/us-central1-c/instanceGroupManagers/gke-cluster-srinivas-poc-imagestreami-91a12b22-grp  
locations:  
- us-central1-c  
management:  
 autoRepair: true  
 autoUpgrade: true  
maxPodsConstraint:  
 maxPodsPerNode: '110'  
name: poc-imagestreaming-off  
networkConfig:  
 enablePrivateNodes: true  
 podIpv4CidrBlock: 10.52.0.0/14  
 podRange: gke-cluster-srinivas-pods-a78369bf  
podIpv4CidrSize: 24  
queuedProvisioning: {}  
selfLink: https://container.googleapis.com/v1/projects//zones/us-central1-c/clusters/cluster-srinivas/nodePools/poc-imagestreaming-off  
status: RUNNING  
upgradeSettings:  
 maxSurge: 1  
 strategy: SURGE  
version: 1.30.8-gke.1128000

Параметр або налаштування, яке показує, чи увімкнене Image Streaming у пулі вузлів:

gcfsConfig: enabled: true

  1. Тестування з двома контейнерними зображеннями:

• Зображення 1: 327 МБ gb-frontend:v5 зображення з Google Container Registry.
• Зображення 2: 520 МБ slim Google SDK image з Docker Hub.

3.
Виміряні часи запуску подів:

Запущено поди в кожному пулі вузлів, використовуючи однакові зображення, і зафіксовано час запуску від планування до готовності для обох сценаріїв.

Порівняння показує підвищення продуктивності за допомогою GKE Image Streaming:

pic

Скріншоти:

pic

Час, витрачений на завантаження зображення gb-frontend в пулі вузлів з увімкненим Image Streaming

pic

Час, витрачений на завантаження зображення gb-frontend в пулі вузлів з вимкненим Image Streaming

pic

Час, витрачений на завантаження зображення cloud-SDK slim в пулі вузлів з увімкненим Image Streaming

pic

Час, витрачений на завантаження зображення cloud-SDK slim в пулі вузлів з вимкненим Image Streaming

Ці результати показують, що GKE Image Streaming значно зменшує час запуску, особливо для більших зображень.

Як увімкнути GKE Image Streaming

Увімкніть функцію Image Streaming для бажаного пулу вузлів у кластері.

gcloud container node-pools update POOL_NAME --cluster=CLUSTER_NAME --enable-image-streaming --zone=CLUSTER_ZONE

Останні думки

GKE Image Streaming є революційною функцією для робочих навантажень Kubernetes, значно покращуючи час запуску подів, зменшуючи використання ресурсів і оптимізуючи витрати. Результати мого PoC демонструють його реальні переваги, роблячи це необхідною функцією для команд, що управляють масштабованими контейнеризованими додатками. Незалежно від того, чи будуєте ви масштабовані мікросервіси або оптимізуєте CI/CD пайплайни, GKE Image Streaming може дати вам конкурентну перевагу, яку ви шукаєте.

Джерела

https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming

Перекладено з: GKE Image Streaming: A Quick Dive into Google Cloud’s Game-Changer

Leave a Reply

Your email address will not be published. Required fields are marked *