zoukankan      html  css  js  c++  java
  • istio部署-快速入门

    参考

    本文为 istio 快速入门部署,一般用于演示环境。

    1. 准备工作

    • k8s集群要支持istio自动注入,需要检查api server的启动参数,确保 admission control 部分按顺序启用 MutatingAdmissionWebhookValidatingAdmissionWebhook;
    • 通过 kube-apiserver -h | grep enable-admission-plugins 查看已启用的 admission control
    • Which plugins are enabled by default

    2. 下载

    # 下载1.1.7版本
    wget https://github.com/istio/istio/releases/download/1.1.7/istio-1.1.7-linux.tar.gz
    
    # 解压
    tar -zxvf istio-1.1.7-linux.tar.gz
    

    3. 实施

    cd istio-1.1.7
    kubectl apply -f install/kubernetes/istio-demo.yaml
    
    # "-w" 参数用于持续查询pod状态变化;
    # pod状态为 "Completed" 时, 表示执行 "Job" 留下的pod, "Completed" 状态说明 "Job" 执行成功
    kubectl get pod -n istio-system -w
    

    4. 应用示例

    4.1 部署应用

    git clone https://github.com/fleeto/flaskapp.git
    cd flaskapp
    
    cat flask.istio.yaml 
    apiVersion: v1
    kind: Service
    metadata:
      name: flaskapp
      labels:
        app: flaskapp
    spec:
      # "selector" 仅使用1个标签,则 "Service" 对两个 "Deployment" 均有效
      selector:
        app: flaskapp
      ports:
        # 根据istio规范对端口进行命名
        - name: http
          port: 80
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: flaskapp-v1
    spec:
      replicas: 1
      template:
        metadata:
          # 两个标签,其中以不同的 "version" 标签进行区分;
          # istio中通常使用这两个标签作为应用与版本的标识
          labels:
            app: flaskapp
            version: v1
        spec:
          containers:
          - name: flaskapp
            # image一致
            image: dustise/flaskapp
            imagePullPolicy: Always
            # 注册一个名为 "version" 的环境变量,两个应用取值不同
            env:
            - name: version
              value: v1
    ---
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
      name: flaskapp-v2
    spec:
      replicas: 1
      template:
        metadata:
          labels:
            app: flaskapp
            version: v2
        spec:
          containers:
          - name: flaskapp
            image: dustise/flaskapp
            imagePullPolicy: Always
            env:
            - name: version
              value: v2
    
    # 部署应用
    kubectl apply -f flask.istio.yaml
    

    4.2 部署istio

    • 使用 istioctl 进行注入, 其修改 Deployment , 在Pod中注入 Sidecar 容器;
    • 本节采用手工注入,实际生产环境中一般会打开pod的自动注入功能。
    # 注入 "sidecar"
    istioctl kube-inject -f flask.istio.yaml | kubectl apply -f -
    
    # 查看pod
    # pod中容器数量从"1"变为"2"
    kubectl get pod -w
    
    # 注入容器 "istio-proxy" ;
    # 另有初始化劫持容器 "istio-init"
    kubectl describe pod flaskapp-v1-66b59cdfc6-zk9sz
    

    4.3 部署客户端服务

    git clone https://github.com/fleeto/sleep.git
    cd sleep/kubernetes/
    
    # 虽然客户端服务不需要提供对外服务能力, 但 "sleep.yaml" 仍然需要创建 "Service" 资源对象;
    # istio注入要求: 没有 "Service" 的  "Deployment" 无法被istio发现并进行操作
    istioctl kube-inject -f sleep.yaml | kubectl apply -f -
    
    # 验证
    kubectl get pod -w
    

    4.4 验证服务

    # 重复获取 "http://flaskapp/env/version" 的内容;
    # 返回结果:"v2" 与 "v1" 结果随机出现,大约各一半
    kubectl exec -it sleep-5f47f5c866-9xtsf -c sleep bash
    bash-4.4# for i in `seq 10` ; do http --body http://flaskapp/env/version ; done
    

    4.5 创建目标规则与默认路由

    4.5.1 目标规则

    # 使用 Pod 标签将 "flaskapp" 服务分成两个 "subset"
    cat flaskapp/flaskapp-destinationrule.yaml 
    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      name: flaskapp
    spec:
      host: flaskapp
      subsets:
      - name: v1
        labels:
          version: v1
      - name: v2
        labels:
          version: v2
    

    4.5.2 默认路由

    建议:无论是否进行进一步的流量控制,都建议为网格中的服务创建默认的路由规则,以防发生意料之外的访问结果。

    # "VirtualService" 资源对象,接管对 "flaskapp" 主机名的访问,将所有流量转发到 "DestinationRule" 资源对象定义的 "v2 subset" 
    cat flaskapp/flaskapp-default-vs-v2.yaml 
    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: flaskapp-default-v2
    spec:
      hosts:
      - flaskapp
      http:
      - route:
        - destination:
            host: flaskapp
            subset: v2
    

    4.5.3 验证

    # 重复获取 "http://flaskapp/env/version" 的内容;
    # 返回结果:只有 "v2" 返回,默认路由已生效
    kubectl exec -it sleep-5f47f5c866-9xtsf -c sleep bash
    bash-4.4# for i in `seq 10` ; do http --body http://flaskapp/env/version ; done
    

    5. 总结

    典型流程:注入-->部署-->创建目标规则-->创建默认路由。

  • 相关阅读:
    Object-c NSArray
    内存管理池
    Objuct-c 对象的初始化 存起器 属性 self和super 内存管理
    继承什么的
    Object C 多态性
    Objectvie
    (重点) 协议
    分类
    一张图了解Python
    转载 MySql常用查询语句(23种)
  • 原文地址:https://www.cnblogs.com/netonline/p/11611634.html
Copyright © 2011-2022 走看看