我试图用元控制器在有状态集中设置每个Pod的服务:https://github.com/metacontroller/metacontroller/tree/master/examples/service-per-pod
我按照链接的指示,我在玩各种组合,但我仍然没有达到所描述的效果。服务不是与pod一起创建的。
在这个例子中,我试图将服务放在每个吊舱的标签上:;web";对照吊舱的名称。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
annotations:
service-per-pod-label: "statefulset.kubernetes.io/pod-name"
service-per-pod-ports: "80:80"
spec:
selector:
matchLabels:
app: nginx
serviceName: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 1
containers:
- name: nginx
image: gcr.io/google_containers/nginx-slim:0.8
ports:
- containerPort: 80
name: web
我的元控制器启动并运行
NAME READY STATUS RESTARTS AGE
metacontroller-metacontroller-helm-0 1/1 Running 0 23m
来自元控制器的日志:kubectl日志元控制器-元控制器-helm-0
{"level":"info","ts":1660492483.489682,"msg":"Configuration information","discovery-interval":20,"cache-flush-interval":1800,"metrics-address":":9999","client-go-qps":5,"client-go-burst":10,"workers":5,"events-qps":0.0033333333333333335,"events-burst":25,"pprofAddr":"0","leader-election":false,"leader-election-resource-lock":"leases","leader-election-namespace":"","leader-election-id":"metacontroller","version":"4.3.4"}
{"level":"info","ts":1660492483.5292923,"msg":"Communication with K8s API server successful"}
{"level":"info","ts":1660492484.7299764,"msg":"Waited for 1.19273971s due to client-side throttling, not priority and fairness, request: GET:https://10.3.0.1:443/apis/authorization.k8s.io/v1?timeout=32sn"}
{"level":"info","ts":1660492489.1358352,"logger":"controller-runtime.metrics","msg":"Metrics server is starting to listen","addr":":9999"}
{"level":"info","ts":1660492489.1373081,"msg":"Starting EventSource","controller":"composite-metacontroller","source":"kind source: *v1alpha1.CompositeController"}
{"level":"info","ts":1660492489.1373482,"msg":"Starting Controller","controller":"composite-metacontroller"}
{"level":"info","ts":1660492489.1376293,"msg":"Starting EventSource","controller":"decorator-metacontroller","source":"kind source: *v1alpha1.DecoratorController"}
{"level":"info","ts":1660492489.1376536,"msg":"Starting Controller","controller":"decorator-metacontroller"}
{"level":"info","ts":1660492489.1371636,"msg":"Starting server","path":"/metrics","kind":"metrics","addr":"[::]:9999"}
{"level":"info","ts":1660492489.2376945,"msg":"Starting workers","controller":"composite-metacontroller","worker count":1}
{"level":"info","ts":1660492489.2379737,"msg":"Starting workers","controller":"decorator-metacontroller","worker count":1}
{"level":"info","ts":1660492494.7370083,"msg":"Waited for 5.587625994s due to client-side throttling, not priority and fairness, request: GET:https://10.3.0.1:443/apis/networking.k8s.io/v1?timeout=32sn"}
{"level":"info","ts":1660492510.3382494,"msg":"Waited for 1.165526209s due to client-side throttling, not priority and fairness, request: GET:https://10.3.0.1:443/apis/flowcontrol.apiserver.k8s.io/v1beta2?timeout=32sn"}
如文档中所述,对于Kubernetes 1.9+,您的service-per-pod-label
应具有"statefulset.kubernetes.io/pod-name"
作为值:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
annotations:
service-per-pod-label: "statefulset.kubernetes.io/pod-name"
service-per-pod-ports: "80:80"
spec:
selector:
matchLabels:
app: nginx
serviceName: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 1
containers:
- name: nginx
image: gcr.io/google_containers/nginx-slim:0.8
ports:
- containerPort: 80
name: web
对于早期版本,您应该为您的pod添加注释pod-name-label: "pod-name"
`:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
annotations:
service-per-pod-label: "pod-name"
service-per-pod-ports: "80:80"
spec:
selector:
matchLabels:
app: nginx
serviceName: nginx
replicas: 3
template:
metadata:
labels:
app: nginx
annotations:
pod-name-label: "pod-name"
spec:
terminationGracePeriodSeconds: 1
containers:
- name: nginx
image: gcr.io/google_containers/nginx-slim:0.8
ports:
- containerPort: 80
name: web
在这两种情况下,应该使用术语pod-name
,而不是其他值。他们使用它来知道他们应该为创建的服务使用的名称。