zoukankan      html  css  js  c++  java
  • 注入 Istio sidecar

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

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

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

    应用部署

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

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

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

    kubectl label namespace default istio-injection=enabled
    kubectl 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-bhn9m
    kubectl get pod
    

    排除pod注入

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

    [root@cn-hongkong k8s_yaml]# cat httpd.yaml 
    apiVersion: apps/v1beta1
    kind: Deployment
    metadata:
      name: httpd
    spec:
      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工具并拷贝至环境,链接https://github.com/istio/istio/releases/

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

    mv -f istioctl /usr/local/bin
    

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

    $ kubectl get cm -n istio-system | grep istio-sidecar-injector
    istio-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

  • 相关阅读:
    Python元组、列表、字典
    测试通过Word直接发布博文
    Python环境搭建(windows)
    hdu 4003 Find Metal Mineral 树形DP
    poj 1986 Distance Queries LCA
    poj 1470 Closest Common Ancestors LCA
    poj 1330 Nearest Common Ancestors LCA
    hdu 3046 Pleasant sheep and big big wolf 最小割
    poj 3281 Dining 最大流
    zoj 2760 How Many Shortest Path 最大流
  • 原文地址:https://www.cnblogs.com/Dev0ps/p/11043821.html
Copyright © 2011-2022 走看看