我们最近开始使用istio Istio建立内出了服务网格Kubernetes景观。
现在,如果将istio istio-proxysidecar容器注入到作业中,作业和cronjobs不会终止并永远运行,这是一个问题。本istio-proxy应注射虽然建立到工作需要交谈的服务适当的MTLS连接并符合我们的安全规定。
我还注意到了Istio(istio / issues / 6324)和kubernetes(kubernetes / issues / 25908)中的未解决问题,但是似乎两者都无法在短期内提供有效的解决方案。
起初,停止前挂钩似乎很适合解决此问题,但此概念本身存在一些困惑:kubernetes / issues / 55807
lifecycle:
preStop:
exec:
command:
...
Run Code Online (Sandbox Code Playgroud)
底线:如果容器成功完成,则不会执行这些钩子。
GitHub上还有一些相对较新的项目试图使用专用控制器(我认为这是最可取的方法)来解决这个问题,但是对我们的团队而言,他们还不够成熟,无法立即将它们投入生产:
同时,我们自己完成了以下变通方法,该变通方法可以执行到边车中并发送SIGTERM信号,但前提是主容器成功完成:
apiVersion: v1
kind: ServiceAccount
metadata:
name: terminate-sidecar-example-service-account
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: terminate-sidecar-example-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get","delete"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["create"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: …Run Code Online (Sandbox Code Playgroud) 我们希望 Prometheus 安装能够抓取 Pod 中两个容器的指标。一个容器通过 HTTPS 在端口 443 公开指标,而另一个容器通过 HTTP 在端口 8080 公开指标。两个容器在同一路径提供指标,即/metrics.
如果我们将prometheus.io/scheme声明为 http 或 https,则只会抓取一个容器。对于另一个我们总是收到:如果我们根本server returned HTTP status 400 Bad Request
不定义prometheus.io/scheme,也会发生同样的情况。然后,Prometheus 将为两个端口使用 http,并且对于在端口 443 公开指标的容器会失败,因为它只期望 HTTPS 请求。
有没有办法告诉普罗米修斯如何准确地抓取我们部署中的各个容器?获取两个容器的指标有哪些可行的解决方法?
库伯内特斯:1.10.2
普罗米修斯:2.2.1
apiVersion: apps/v1
kind: Deployment
metadata:
name: xxx
namespace: xxx
spec:
selector:
matchLabels:
app: xxx
template:
metadata:
labels:
app: xxx
annotations:
prometheus.io/scrape: "true"
prometheus.io/path: "/metrics"
spec:
containers:
- name: container-1
image: xxx
ports:
- containerPort: 443
- name: container-2 …Run Code Online (Sandbox Code Playgroud)