使用 Ansible 模块 k8s ,我们如何使用额外的容器修补部署。
我想了解如何使用 ansible 模块实现以下部署的补丁:
Initial dpeloyment.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: patch-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: patch-demo-ctr
image: nginx
tolerations:
- effect: NoSchedule
key: dedicated
value: test-team
补丁:
spec:
template:
spec:
containers:
- name: patch-demo-ctr-2
image: redis
如何使用 ansible 模块执行此操作?
kubectl patch deployment patch-demo --patch "$(cat patch-file.yaml)"
这个答案来得有点晚了,人们可能已经看过文档了1,但这里是问题的答案。
您可以设置您的
state: patched
并将所需的更改传递给 definition
。
这是一个基于问题中定义的示例手册:
# playbook.yml
- name: Patch k8s objects with ansible
hosts: localhost
become: false
tasks:
- name: Initial deployment
kubernetes.core.k8s:
state: present
definition:
apiVersion: apps/v1
kind: Deployment
metadata:
name: patch-demo
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: patch-demo-ctr
image: nginx:alpine
tolerations:
- effect: NoSchedule
key: dedicated
value: test-team
- name: Patch the deployment
kubernetes.core.k8s:
state: patched
name: patch-demo
namespace: default
kind: Deployment
definition:
spec:
template:
spec:
containers:
- name: patch-demo-ctr-2
image: redis
生成的 pod 将有两个容器,一个用于
nginx
,另一个用于 redis
:
$ k get po -o custom-columns=NAME:.metadata.name,IMAGE:.spec.containers[*].image
NAME IMAGE
patch-demo-844db668c-jnrv8 redis,nginx:alpine
patch-demo-844db668c-4c2pt redis,nginx:alpine