查了我一天喵的

过程

istio两种注入模式,一种是执行istioctl kube-inject将目标deployment的yaml先修改,也就是手动注入sidecarinitContainer,另一种就是在pod被部署的时候,利用k8s的webhook机制,进行自动注入。

在自动注入前,要在部署容器的namespace打上istio-injection: enabled标签,这样才会自动注入,同时,还可以指定template的注解:sidecar.istio.io/inject: true来做更小粒度的控制。

在使用bookinfo的demo过程中,自动注入并没有生效,甚至连pod都没有create

执行kubectl describe deployment productpage查看其中一个deployment,发现只有一个事件, Scaled up replica set productpage-v1-596598f447 to 1,然后就没有然后了。

执行kubectl describe replicaset productpage-v1-596598f447,显示failed calling webhook “sidecar-injector.istio.io”: Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: context deadline exceeded`

查看apiserver的日志,一直提示

 "sidecar-injector.istio.io": Post https://istio-sidecar-injector.istio-system.svc:443/inject?timeout=30s: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

查看controller-manager的日志,一直提示

Event(v1.ObjectReference{Kind:"HorizontalPodAutoscaler", Namespace:"istio-system", Name:"istio-telemetry", UID:"da322eac-127a-4c78-89e6-db614d697949", APIVersion:"autoscaling/v2beta2", ResourceVersion:"10847941", FieldPath:""}): type: 'Warning' reason: 'FailedComputeMetricsReplicas' invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API

看起来是在说找不到metrics api

上官网,Istio / Sidecar Injection Problems没有一个描述是符合的。github issue也没有提到要安装metrics-server

最后找到一篇博客,里面提到

于是乖乖安装metrics-server,然后注入sidecarpod就成功创建了 = = 其实一早就看到关于metrics api的报错,但是我认为那是收集监控数据的,于是没鸟他,还是图样了。

demo