Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
854 views
in Technique[技术] by (71.8m points)

yaml - How to replace Image with jq in Kubernetes Deployment?

How can I replace the Image used in a Kubernetes Deployment manifest with jq?

For example:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-deployment
spec:
  replicas: 1
  template:
    spec:
      containers:
      - name: myapp
        image: myapp:v1

I tried using something like this jq '.spec.template.spec.containers[0].image = "myapp:v2"'. However, it always ends with a syntax or parse error.

question from:https://stackoverflow.com/questions/65652129/how-to-replace-image-with-jq-in-kubernetes-deployment

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Using yq, you can simply write:

yq -y '.spec.template.spec.containers[0].image = "foo:latest"' pod.yml

Which produces:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: myapp
  name: myapp-deployment
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: myapp
          image: foo:latest

But I would use kustomize for something like this, as @DavidMaze suggested.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...