random cover photo, somehow related to blog | why not!
Kubernetes революціонізував спосіб розгортання та масштабування додатків, але управління інфраструктурою динамічно та економічно ефективно залишалося викликом. Ось тут на допомогу приходить Karpenter — відкритий інструмент для автоматичного масштабування Kubernetes кластерів від AWS, який забезпечує оптимальне використання ресурсів та масштабування навантажень. Ось чому Karpenter — це інструмент, з яким кожен інженер хмарних технологій повинен бути знайомий.
Що таке Karpenter?
[
Документація
Вузли за принципом Just-in-time для будь-якого Kubernetes кластеру
karpenter.sh
](https://karpenter.sh/docs/?source=post_page-----5cc6f72296f0--------------------------------)
Karpenter — це високопродуктивний автоматизований масштабувальник кластерів Kubernetes, розроблений AWS.
На відміну від традиційних рішень для масштабування вузлів, Karpenter надає:
- Динамічне забезпечення вузлів: Він запускає вузли, оптимізовані під ваші навантаження, за лічені секунди.
- Економія витрат: Аналізуючи вимоги навантажень та динамічно використовуючи spot або on-demand інстанси.
- Покращена продуктивність: Karpenter забезпечує мінімальну латентність планування та оптимальний розподіл навантажень.
- Гнучкість: Підтримує мульти-хмарні та локальні налаштування, крім AWS.
Чому варто використовувати Karpenter?
- Зменшене надмірне забезпечення: Традиційні автоматизовані масштабувальники кластерів часто призводять до надмірного забезпечення.
Karpenter надає тільки те, що потрібно для ваших навантажень. - Швидке масштабування: Karpenter забезпечує вузли швидше за традиційні рішення, безперешкодно адаптуючись до раптових піків трафіку.
- Оптимізація Spot інстансів: Інтелектуально використовує spot інстанси для зниження витрат при збереженні надійності.
Ключовий випадок використання: Автоматичне масштабування для платформ електронної комерції
Уявімо платформу електронної комерції, яка переживає піки трафіку під час розпродажів. За допомогою Karpenter ви можете:
- Динамічно забезпечувати додаткові вузли для обробки збільшеного трафіку.
- Оптимізувати витрати за допомогою spot інстансів під час не пікових годин.
3.
Забезпечте високу доступність та продуктивність за допомогою автоматичного відновлення зламаних вузлів.
Налаштування Karpenter на AWS
Попередні вимоги
- Обліковий запис AWS з правами IAM для EC2 та EKS.
- Існуючий Kubernetes кластер на Amazon EKS.
- Налаштовані AWS CLI та kubectl на вашій локальній машині.
Крок 1: Встановлення Helm-чарту Karpenter
[
Початок роботи з Karpenter
Налаштуйте кластер та додайте Karpenter
karpenter.sh
](https://karpenter.sh/docs/getting-started/getting-started-with-karpenter/?source=post_page-----5cc6f72296f0--------------------------------)
Ми будемо слідувати офіційному документу Karpenter, цього більш ніж достатньо для налаштування в середовищі.
helm repo add karpenter https://charts.karpenter.sh
helm repo update
helm upgrade --install karpenter karpenter/karpenter \
--namespace karpenter \
--create-namespace \
--set serviceAccount.annotations."eks.amazonaws.com/
--set settings.aws.defaultInstanceProfile=
Крок 2: Налаштування EC2NodeClass та NodePools
[
NodeClasses
Налаштуйте AWS-специфічні налаштування за допомогою EC2NodeClasses
karpenter.sh
](https://karpenter.sh/docs/concepts/nodeclasses/?source=post_page-----5cc6f72296f0--------------------------------)
Оголосіть EC2NodeClass
Створіть файл YAML (ec2-node-class.yaml
) для визначення конфігурацій EC2 інстансів:
apiVersion: karpenter.k8s.aws/v1alpha1
kind: EC2NodeClass
metadata:
name: default-ec2-nodeclass
spec:
amiSelector:
karpenter.sh/discovery: ""
subnetSelector:
karpenter.sh/discovery: ""
securityGroupSelector:
karpenter.sh/discovery: ""
Застосуйте EC2NodeClass:
kubectl apply -f ec2-node-class.yaml
Оголосіть NodePool
[
NodePools
Налаштуйте Karpenter за допомогою NodePools
karpenter.sh
](https://karpenter.sh/docs/concepts/nodepools/?source=post_page-----5cc6f72296f0--------------------------------)
Створіть файл YAML (nodepool.yaml
) для визначення політик масштабування вузлів:
apiVersion: karpenter.sh/v1alpha5
kind: NodePool
metadata:
name: default-nodepool
spec:
template:
spec:
nodeClass:
kind: EC2NodeClass
name: default-ec2-nodeclass
resources:
limits:
cpu: "2000"
ttlSecondsAfterEmpty: 60
Застосуйте NodePool:
kubectl apply -f nodepool.yaml
Реалізація коду в реальному житті
Приклад розгортання додатку
Розгорніть тестовий додаток, щоб побачити Karpenter в дії.
Крок 1: Розгорніть тестове навантаження
apiVersion: apps/v1
kind: Deployment
metadata:
name: karpenter-sample
spec:
replicas: 100
selector:
matchLabels:
app: karpenter-sample
template:
metadata:
labels:
app: karpenter-sample
spec:
containers:
- name: sample-app
image: public.ecr.aws/nginx/nginx:latest
resources:
requests:
cpu: "100m"
memory: "128Mi"
Застосуйте навантаження:
kubectl apply -f sample-app.yaml
Крок 2: Моніторинг масштабування
Слідкуйте за тим, як вузли динамічно масштабуються для забезпечення навантаження:
kubectl get pods -o wide
kubectl get nodes
Висновок
Karpenter спрощує масштабування Kubernetes кластерів, зосереджуючи увагу на продуктивності та оптимізації витрат.
Динамічно надаючи ресурси залежно від вимог навантаження, Karpenter забезпечує адаптацію вашої інфраструктури до змін ефективно.
Незалежно від того, чи працюєте ви з високонавантаженими додатками, чи оптимізуєте витрати за допомогою spot інстансів, Karpenter — це інструмент, який повинен знати кожен інженер Kubernetes. Почніть використовувати його сьогодні, щоб розкрити повний потенціал ваших Kubernetes кластерів.
Для більш детальної інформації відвідайте Karpenter GitHub Repository.tn
Перекладено з: Understanding Karpenter in AWS: The Game-Changing Kubernetes Autoscaler