查了我一天喵的
过程
istio两种注入模式,一种是执行istioctl kube-inject
将目标deployment
的yaml先修改,也就是手动注入sidecar
和initContainer
,另一种就是在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
,然后注入sidecar
的pod
就成功创建了 = = 其实一早就看到关于metrics api的报错,但是我认为那是收集监控数据的,于是没鸟他,还是图样了。