Kubernetes революціонізував оркестрацію контейнерів, а Google Kubernetes Engine продовжує ламати бар'єри, спрощуючи операції як для розробників, так і для команд DevOps. Однією з найінноваційніших функцій, яка була нещодавно введена, є GKE Image Streaming.
Цей блог пояснить, що таке GKE Image Streaming, як він працює і чому це важливо — коротко, просто і зрозуміло.
Що таке GKE Image Streaming?
GKE Image Streaming — це функція, розроблена для прискорення часу запуску контейнерів шляхом оптимізації процесу завантаження контейнерних зображень. Замість того, щоб завантажувати все зображення перед запуском пода (Pod), ця функція дозволяє транслювати лише необхідні частини зображення. Це зменшує час, необхідний для запуску робочих навантажень, особливо коли йдеться про великі контейнерні зображення.
Як це працює?
Зазвичай Kubernetes завантажує все контейнерне зображення перед тим, як запустити под. Завдяки Image Streaming GKE використовує техніку, що називається завантаженням зображення за вимогою:
- Ліниве завантаження (Lazy Loading): Завантажуються лише ті частини контейнерного зображення, які необхідні для запуску робочого навантаження.
- Трансляційний доступ (Streaming Access): Під час роботи додатка додаткові шари зображення завантажуються за потребою.
- Кешування (Caching): Часто використовувані дані кешуються для покращення продуктивності при наступних запусках подів.
Цей процес безшовний і не вимагає від розробників змінювати їхні контейнерні зображення.
Чому це важливо?
- Швидший запуск подів (Faster Pod Startup): Завдяки трансляції лише необхідних частин зображення, GKE значно скорочує час запуску подів.
- Оптимізація сховища (Optimised Storage): Менше даних завантажується, що зменшує навантаження на сховище на вузлах.
- Ефективне використання пропускної здатності (Efficient Bandwidth Use): Image Streaming зменшує мережевий трафік, що є особливо корисним для великих масштабних розгортань.
- Зниження витрат (Cost Savings): Швидші розгортання та зменшене використання сховища призводять до зниження операційних витрат.
Коли варто використовувати GKE Image Streaming?
- Сценарії з високою масштабованістю (High Scalability Scenarios): Коли потрібно швидко запускати сотні або тисячі подів.
- Великі зображення для робочих навантажень (Large Image Workloads): Для додатків, які залежать від великих контейнерних зображень з багатьма шарами.
- 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: 327 МБ gb-frontend:v5
зображення з Google Container Registry.
• Зображення 2: 520 МБ slim Google SDK image
з Docker Hub.
3.
Виміряні часи запуску подів:
Запущено поди в кожному пулі вузлів, використовуючи однакові зображення, і зафіксовано час запуску від планування до готовності для обох сценаріїв.
Порівняння показує підвищення продуктивності за допомогою GKE Image Streaming:
Скріншоти:
Час, витрачений на завантаження зображення gb-frontend в пулі вузлів з увімкненим Image Streaming
Час, витрачений на завантаження зображення gb-frontend в пулі вузлів з вимкненим Image Streaming
Час, витрачений на завантаження зображення cloud-SDK slim в пулі вузлів з увімкненим Image Streaming
Час, витрачений на завантаження зображення 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