
Kubepatch позволяет вам исправлять Kubernetes, не касаясь базовых манифестов
27 июня 2025 г.Встретиться
В отличие от инструментов, которые встраивают логику в YAML или требуют пользовательских языков шаблонов,,kubepatch
сохраняетбазовые манифесты чистые и идиоматическиеПолем
- Простой: Нет шаблонов, DSLS или логики в Yaml, Zero Magic
- Предсказуемый: Нет строковых замен или хакерских хакерских островов
- Безопасный: Только родные Kubernetes yaml Manifests - читаемые, действительные, нетронутые
- Многослойный: Плач логика экстернатизируется и явно через патч JSON (RFC 6902)
- Декларатив: Развертывание перекрестной среды с предсказуемыми, понятными изменениями
🛠 Пример
Учитывая базовый набор манифестов для развертывания основного микросервиса
---
apiVersion: v1
kind: Service
metadata:
name: myapp
labels:
app: myapp
spec:
type: NodePort
selector:
app: myapp
ports:
- protocol: TCP
port: 8080
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
labels:
app: myapp
spec:
replicas: 2
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: "localhost:5000/restapiapp:latest"
Аpatches/prod.yaml
может выглядеть как:
name: myapp-prod
labels:
app: myapp-prod
patches:
# deployment
- target:
kind: Deployment
name: myapp
patches:
- op: replace
path: /spec/replicas
value: 1
- op: replace
path: /spec/template/spec/containers/0/image
value: "localhost:5000/restapiapp:1.21"
- op: add
path: /spec/template/spec/containers/0/env
value:
- name: RESTAPIAPP_VERSION
value: prod
- name: LOG_LEVEL
value: info
- op: add
path: /spec/template/spec/containers/0/resources
value:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "64m"
memory: "128Mi"
# service
- target:
kind: Service
name: myapp
patches:
- op: add
path: /spec/ports/0/nodePort
value: 30266
Аpatches/dev.yaml
может выглядеть как:
name: myapp-dev
labels:
app: myapp-dev
patches:
# deployment
- target:
kind: Deployment
name: myapp
patches:
- op: add
path: /spec/template/spec/containers/0/env
value:
- name: RESTAPIAPP_VERSION
value: dev
- name: LOG_LEVEL
value: debug
# service
- target:
kind: Service
name: myapp
patches:
- op: add
path: /spec/ports/0/nodePort
value: 30265
Примените соответствующий набор исправлений на основе целевой среды.
kubepatch patch -f base/ -p patches/dev.yaml | kubectl apply -f -
Визуализированный манифест может выглядеть так (обратите внимание, что установлены все этикетки, а также применяются все патчи)
---
apiVersion: v1
kind: Service
metadata:
labels:
app: myapp-dev
name: myapp-dev
spec:
ports:
- nodePort: 30265
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: myapp-dev
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: myapp-dev
name: myapp-dev
spec:
replicas: 1
selector:
matchLabels:
app: myapp-dev
template:
metadata:
labels:
app: myapp-dev
spec:
containers:
- env:
- name: RESTAPIAPP_VERSION
value: dev
- name: LOG_LEVEL
value: debug
image: localhost:5000/restapiapp:1.22
name: myapp
Установка
Ручная установка
- Загрузите последний двоичный файл для вашей платформы с
Страница выпуска Полем - Поместите бинарку в свою систему
PATH
(например.,/usr/local/bin
)
Установка сценария
(
set -euo pipefail
OS="$(uname | tr '[:upper:]' '[:lower:]')"
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')"
TAG="$(curl -s https://api.github.com/repos/kubepatch/kubepatch/releases/latest | jq -r .tag_name)"
curl -L "https://github.com/kubepatch/kubepatch/releases/download/${TAG}/kubepatch_${TAG}_${OS}_${ARCH}.tar.gz" |
tar -xzf - -C /usr/local/bin && \
chmod +x /usr/local/bin/kubepatch
)
Установка на основе пакетов (подходящая в CI/CD)
Дебюн
sudo apt update -y && sudo apt install -y curl
curl -LO https://github.com/kubepatch/kubepatch/releases/latest/download/kubepatch_linux_amd64.deb
sudo dpkg -i kubepatch_linux_amd64.deb
Альпийский Linux
apk update && apk add --no-cache bash curl
curl -LO https://github.com/kubepatch/kubepatch/releases/latest/download/kubepatch_linux_amd64.apk
apk add kubepatch_linux_amd64.apk --allow-untrusted
✨ Ключевые функции
Только патч
Патчи применяются с использованием
- op: replace
path: /spec/replicas
value: 1
Каждый патч минимальный, явный и простой для понимания. Манипуляции по строке или шаблон текста не связана.
Простые Kubernetes Yaml Manifests
Ваши базовые манифесты на 100% чистые объекты Kubernetes - без логики, без аннотаций, без переопределения, без предварительной обработки. Этот
обеспечивает:
- Легкое редактирование
- Совместимость с другими инструментами
- Чистые разницы в GIT
Развертывает перекрестное использование средств
Развернутьdev
Вstaging
, илиprod
Просто выбрав правильный набор патчей. Вся логика живет в патчах, а не
Ваши базы проявляются.
Общие этикетки поддержка
Вводить общие этикетки (напримерenv
Вteam
Вapp
), включая глубокие пути, такие как шаблоны стручков и селекторы.
Подстановка Env var (только в значениях патчей)
Вы можете вводить секреты и значения конфигурации непосредственно в файлы исправления:
- op: add
path: /spec/template/spec/containers/0/env
value:
- name: PGPASSWORD
value: ${IAM_SERVICE_PGPASS}
Строгая замена Env-Var (на основе префикса) разрешена только внутри патчей-никогда не в базовых манифестах.
Обратная связь
Есть запрос на функции или проблема? Не стесняйтесь
Оригинал