在kubernetes集群中,服务之间存在依赖关系,wait-injection利用initcontainer功能快速便捷的为服务添加相应的依赖关系

项目地址

https://github.com/huisebug/wait-injection.git

部署配置

1
2
kubectl apply -f cert-manager.yaml
kubectl apply -f wait-injection.yaml

为需要进行注入的服务所在命名空间打上label

1
kubectl label namespace 业务namespace wait-pod-admission-webhook-injection=enabled

利用kubernetes pod注入对运行的服务进行注入容器,注入多个init容器
需要在以下进行注解
pod.spec.template.metadata.annotations

tcpsocket.waiting.huisebug.org/dep数字: ip:端口号或者域名:端口号
tcpsocket使用telnet对依赖服务和端口进行telnet

httpget.waiting.huisebug.org/dep数字: api-url|成功标识
httpget对依赖服务给的api url进行curl,使用|作为分隔符,|后面是api请求成功标志

相同类型使用多个数字进行区分
依赖必须全部满足才会进行业务container创建

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx
version: v1
name: sidecar-test
namespace: sidecar-test
spec:
replicas: 1
selector:
matchLabels:
app: nginx
version: v1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
annotations:
tcpsocket.waiting.huisebug.org/dep1: www.google.com:443
tcpsocket.waiting.huisebug.org/dep2: www.google.com:8080
httpget.waiting.huisebug.org/dep1: https://www.google.com|google
httpget.waiting.huisebug.org/dep2: https://www.google.com|Google
labels:
app: nginx
version: v1