Как читать и изменять значения манифеста Kube с помощью yq?
У меня есть манифест Kube, который нужно применить к паре кластеров Kubernetes с разными настройками ресурсов. Для этого мне нужно на лету менять раздел ресурсов этого файла. Вот его содержимое:
apiVersion: v1
kind: Service
metadata:
name: abc-api
labels:
app: abc-api
spec:
ports:
- name: http
port: 80
targetPort: 3000
- name: https
port: 3000
targetPort: 3000
selector:
app: abc-api
tier: frontend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: abc-api
labels:
app: abc-api
spec:
selector:
matchLabels:
app: abc-api
tier: frontend
strategy:
type: Recreate
template:
metadata:
labels:
app: abc-api
tier: frontend
spec:
containers:
- image: ABC_IMAGE
resources:
requests:
memory: "128Mi"
cpu: .30
limits:
memory: "512Mi"
cpu: .99
Я поискал и обнаружил, что yq - лучший инструмент для этого. Однако когда я читаю значения из этого файла, он показывает их только до строки с "3 тире": никаких значений после этого.
# yq r worker/deployment.yaml
apiVersion: v1
kind: Service
metadata:
name: hometales-api
labels:
app: hometales-api
spec:
ports:
- name: http
port: 80
targetPort: 3000
- name: https
port: 3000
targetPort: 3000
selector:
app: hometales-api
tier: frontend
Я хочу прочитать раздел "Развертывание", а также отредактировать значения ресурсов.
Раздел для чтения:
---
apiVersion: apps/v1
kind: Deployment
metadata:
....
Раздел для редактирования:
resources:
requests:
memory: "128Mi"
cpu: .20
limits:
memory: "512Mi"
cpu: .99
Итак, 1-я часть Q: как читать после 2-го экземпляра трех тире? 2-я часть Q: как редактировать значения ресурсов на лету?
Я могу запустить эту команду и прочитать этот раздел, но больше не могу читать память или значение процессора:
# yq r -d1 deployment.yaml "spec.template.spec.containers[0].resources.requests"
memory: "128Mi"
cpu: .20
1 ответ
Использовать -d
Вариант CLI. См. https://mikefarah.gitbook.io/yq/commands/write-update для получения более подробной информации.
Также у Kubernetes есть своя особенность в kubectl patch
.