博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
注入 Istio sidecar
阅读量:5061 次
发布时间:2019-06-12

本文共 2655 字,大约阅读时间需要 8 分钟。

注入 Istio sidecar

网格中的每个 Pod 都必须伴随一个 Istio 兼容的 Sidecar 一同运行。

下文中将会介绍两种把 Sidecar 注入到 Pod 中的方法:使用 istioctl 客户端工具进行注入,或者使用 Istio sidecar injector 自动完成注入过程。

手工注入过程会修改控制器(例如 Deployment)的配置。这种注入方法会修改 Pod template,把 Sidecar 注入到目标控制器生成的所有 Pod 之中。要加入、更新或者移除 Sidecar,就需要修改整个控制器。

自动注入过程会在 Pod 的生成过程中进行注入,这种方法不会更改控制器的配置。手工删除 Pod 或者使用滚动更新都可以选择性的对 Sidecar 进行更新。

手工或自动注入都会从 istio-system 命名空间的 istio-sidecar-injector 以及 istio ConfigMap 中获取配置信息。手工注入方式还可以选择从本地文件中读取配置。

Sidecar 的自动注入

使用 Kubernetes 的 ,可以进行 Sidecar 的自动注入。Kubernetes 1.9 以后的版本才具备这一能力。使用这一功能之前首先要检查 kube-apiserver 的进程,是否具备 admission-control 参数,并且这个参数的值中需要包含 MutatingAdmissionWebhook 以及 ValidatingAdmissionWebhook 两项,并且按照正确的顺序加载,这样才能启用 admissionregistration API:

[root@cn-hongkong ~]# kubectl api-versions | grep admissionregistrationadmissionregistration.k8s.io/v1beta1

 注意,跟手工注入不同的是,自动注入过程是发生在 Pod 级别的。因此是不会看到 Deployment 本身发生什么变化的。但是可以使用 kubectl describe 来观察单独的 Pod,在其中能看到注入 Sidecar 的相关信息。

应用部署

部署 sleep 应用,检查一下是不是只产生了一个容器。

kubectl apply -f samples/sleep/sleep.yamlkubectl get deployment -o wide

default 命名空间设置标签:istio-injection=enabled: 注意是只要运行在这个namespace下都pod都会自动注入Sidecar.

kubectl label namespace default istio-injection=enabledkubectl get namespace -L istio-injection

这样就会在 Pod 创建时触发 Sidecar 的注入过程了。删掉运行的 Pod,会产生一个新的 Pod,新 Pod 会被注入 Sidecar。原有的 Pod 只有一个容器,而被注入 Sidecar 的 Pod 会有两个容器:

禁用 default 命名空间的自动注入功能,然后检查新建 Pod 是不是就不带有 Sidecar 容器了:

kubectl label namespace default istio-injection-kubectl delete pod sleep-776b7bcdcd-bhn9mkubectl get pod

排除pod注入

同时也可以在deployment中通过设置annotation,sidecar.istio.io/inject=true来控制pod级别的自动注入。

[root@cn-hongkong k8s_yaml]# cat httpd.yaml apiVersion: apps/v1beta1kind: Deploymentmetadata:  name: httpdspec:  replicas: 2  template:    metadata:      annotations:        sidecar.istio.io/inject: "false"      labels:        run: httpd    spec:      containers:      - name: httpd        image: httpd        ports:        - containerPort: 80

 Sidecar 手动注入

a) 下载istioctl工具并拷贝至环境,链接 ;

b) 将istioctl二进制拷贝至/usr/local/bin目录下

mv -f istioctl /usr/local/bin

c)安装Istio控制面,确认注入相关configmap已创建成功

$ kubectl get cm -n istio-system | grep istio-sidecar-injectoristio-sidecar-injector                  1         15h

d)准备需要注入的文件test.yaml

e) 将istioctl处理之后的内容部署到kubernetes上

$kubectl apply -f <(istioctl kube-inject -f test.yaml)或者$istioctl kube-inject -f test.yaml | kubectl apply -f -

 f)  可以通过k8s命令查看pod详细内容

$kubectl describe pod test-c9f4b55c7-np4cf

 故障排查

现象:当启动了基于namespace或者手动出入sidecar时,发现pod无法起来。

排查方法:

1.kubectl describe rs httpd

发现日志显示istio-sidecar-injector连接超时。

解决方法:

kubectl delete pod istio-sidecar-injector-6fd47fb7c8-mr9kp -n istio-system

转载于:https://www.cnblogs.com/Dev0ps/p/11043821.html

你可能感兴趣的文章
Ubuntu 各版本的几个国内更新源
查看>>
_019_中断系统调用_终端(皆为粗略)
查看>>
datagridview选中一行属性
查看>>
使用repeater实现gridview的功能
查看>>
Java基础:Java抽象类与接口的区别
查看>>
C# winform 类型转换和时间详解
查看>>
排序算法
查看>>
java操作二叉树
查看>>
Properties
查看>>
Java_I/O输入输出_实现读取文件时出现一个表示读取进度的进度条。可以使用java.swing包提供的输入流类ProgressMonitorInputStream...
查看>>
Linux Running State Process ".so"、"code" Injection Technology
查看>>
php学习笔记
查看>>
AJAX的使用
查看>>
在Windows 8.1及IE 11中如何使用HttpWatch
查看>>
时间仍在,是我们在飞逝
查看>>
[转]数据挖掘中所需的概率论与数理统计知识、上
查看>>
centos一键安装lnmp成功后无法访问ip(解决办法)
查看>>
在JS中使用全局变量
查看>>
Django学习-4-request获取数据
查看>>
python----redis
查看>>