[英]How to delete another pod when based on lifeCycle of one pod
当“service2-deployment”中发生容器重启时,我需要删除“service1-deployment”的所有 pod。
我发现我们可以通过 lifeCycle 事件处理程序“service2-deployment”来做到这一点
https://kubernetes.io/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/
但是我们不能在这里指定kubeclt delete pod
命令,因为它在 pod 内运行。 有没有什么简单的方法可以根据 1st Pod 的生命周期事件重新启动 2nd pod?
您可以调用rest API of api-server
来删除另一个部署的 pod。
您可以在生命周期事件执行后调用您的自定义API
免责声明- 正如评论中提到的,您应该避免这种解决方案( 微服务应该是独立的),直到您真的别无选择。
您可以设置postStart
和preStop
处理程序(用于安装kubectl
二进制文件和从部署中删除 pod),但首先您需要为 pod 和具有删除 pod 权限的 角色(绑定)创建适当的服务帐户:
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: role-for-hook
subjects:
- kind: ServiceAccount
name: service-account-for-hook
namespace: default
roleRef:
kind: ClusterRole
name: delete-pods-role
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: service-account-for-hook
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: delete-pods-role
labels:
# Add these permissions to the "view" default role.
rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
- apiGroups: ["*"]
resources: ["pods"]
verbs: ["delete","list"]
然后,您可以在 pod/部署定义中使用新创建的服务帐户 + postStart
和preStop
处理程序 - 例如 NGINX 映像。 我假设,来自Service1
的 Pod 的 label 是app=service1
apiVersion: apps/v1
kind: Deployment
metadata:
name: service2-deployment
spec:
selector:
matchLabels:
app: service2
replicas: 2
template:
metadata:
labels:
app: service2
spec:
serviceAccountName: service-account-for-hook
containers:
- name: service2
image: nginx:latest
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "apt update && apt install curl && curl -L https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl -o /usr/local/bin/kubectl && chmod +x /usr/local/bin/kubectl"]
preStop:
exec:
command: ["/bin/sh", "-c", "kubectl delete pods -l app=service1"]
ports:
- containerPort: 80
然后,如果Service2
的 pod 重新启动, Service1
的 pod 也会重新启动。
命令中使用的command:
对您来说可能会有所不同,这取决于您用于应用程序的基本映像。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.