三、实践篇之一,Helm部署Istio


导语 本次采用的是 Kubernetes v1.15.0 版集群环境,Helm 版本为 v2.14.3,安装的 Istio 版本为 v1.4,官方文档说明中指出只在 K8S 的 v1.13、v1.14、v1.15 做过测试,请暂时不要将 K8S 升级至 v1.16 版

Ps:Kubernetes安装指引,请查看文档==>传送门

一、部署helm

  • 安装helm客户端

从github下载helm(https://github.com/helm/helm/releases)

wget https://get.helm.sh/helm-v2.14.3-linux-amd64.tar.gz

解包,只需要包中的一个命令

tar zxf helm-v2.14.3-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/ &&

chmod +x /usr/local/bin/helm

设置命令自动补全

echo 'source <(helm completion bash)' >> /etc/profile

. /etc/profile #重载环境变量

  • 安装Tiller server(需要创建授权用户)

tiller-rbac.yaml #创建授权用户

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

kubectl apply -f tiller-rbac.yaml #执行yaml文件

helm init --service-account=tiller #Tiller server的环境初始化

helm init -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.14.3 --stable-repo-url http://mirror.azure.cn/kubernetes/charts/ --service-account tiller --override spec.selector.matchLabels.'name'='tiller',spec.selector.matchLabels.'app'='helm' --output yaml | sed 's@apiVersion: extensions/v1beta1@apiVersion: apps/v1@' | kubectl apply -f -

检查安装

kubectl get pods -n kube-system | grep tiller

helm version

安装检查

二、安装Istio

  • 添加 Istio 到 Helm 仓库

helm repo add istio.io https://storage.googleapis.com/istio-release/releases/1.4.0/charts/

  • 下载Istio
wget https://github.com/istio/istio/releases/download/1.4.0/istio-1.4.0-linux.tar.gz
tar -zxvf istio-1.4.0-linux.tar.gz
mv istio-1.4.0 istio
cd istio
  • 创建命名空间

kubectl create namespace istio-system

  • 安装 CRDs (Custom Resource Definitions)

helm template install/kubernetes/helm/istio-ini t --name istio-init --namespace istio-system | kubectl apply -f -

等待 CRDs 创建完成

kubectl -n istio-system wait --for=condition=complete job --all

输出如下

job.batch/istio-init-crd-10-1.4.0 condition met
job.batch/istio-init-crd-11-1.4.0 condition met
job.batch/istio-init-crd-14-1.4.0 condition met

  • 部署 Istio 到集群

helm template install/kubernetes/helm/istio --name istio --namespace istio-system | kubectl apply -f -

kubectl get pods -n istio-system

istio

  • 为default添加istio注入(可选)

kubectl label namespace default istio-injection=enable

三、部署测试应用bookinfo

bookinfo示例部署了一个用于演示多种 Istio 特性的应用,该应用由四个单独的微服务构成。 这个应用模仿在线书店的一个分类,显示一本书的信息。 页面上会显示一本书的描述,书籍的细节(ISBN、页数等),以及关于这本书的一些评论。

  • bookinfo应用的架构

bookinfo

  • Bookinfo 应用分为四个单独的微服务

    • productpage. 这个微服务会调用 details 和 reviews 两个微服务,用来生成页面
    • details. 这个微服务中包含了书籍的详细信息。
    • reviews. 这个微服务中包含了书籍相关的评论。它还会调用 ratings 微服务
    • ratings. 这个微服务中包含了由书籍评价组成的评级信息。
  • reviews微服务有三个版本

    • v1 版本不会调用 ratings 服务。
    • v2 版本会调用 ratings 服务,并使用 1 到 5 个黑色星形图标来显示评分信息。
    • v3 版本会调用 ratings 服务,并使用 1 到 5 个红色星形图标来显示评分信息。
  • bookinfo的编排文件bookinfo.yaml(目录samples/bookinfo/platform/kube)

  • 创建命名空间用以部署

    kubectl create ns bookinfo-application

  • 为这个命名空间大上 istio-injection=enabled 标签

    kubectl label namespace bookinfo-application istio-injection=enabled

  • 部署 bookinfo application

    kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml -n bookinfo-application

  • 暴露服务入口

     如果没有外部负载均衡可以将名为 istio-ingressgateway 的 service 类型由LoadBalancer修改为 NodePort 类型,随后通过 istio-ingressgateway 所在的服务器IP地址+端口的形式访问服务。
    istio 的 Gateway 允许外部流量进入 Istio 服务网,与 K8S 的 ingress 直接指定路由不同,istio 的路由规则不在 gateway 中指定,需要通过 VirtualService 单独配置。执行下面命令创建 gateway 和 virtualservice。

    kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml -n bookinfo-application

    • 访问页面并不断刷新

       可以在浏览器打开 http://NodeIp:NodePort/productpage以浏览 Bookinfo Application 页面,如果刷新几次应用的页面,就会看到 productpage 页面中会随机展示 reviews 服务的不同版本的效果(红色、黑色的星形或者没有显示)。reviews 服务出现这种情况是因为我们还没有使用 Istio 来控制版本的路由。

    http://192.168.68.150:31380/productpage

    • 最终应用部署的示意图

    要在 Istio 中运行这一应用,无需对应用自身做出任何改变。 您只要简单的在 Istio 环境中对服务进行配置和运行,具体一点说就是把 Envoy sidecar 注入到每个服务之中。 最终的部署结果将如下图所示(注意前面步骤中对bookinfo-application命名空间打了标签)

     所有的微服务都和 Envoy sidecar 集成在一起,被集成服务所有的出入流量都被 sidecar 所劫持,这样就为外部控制准备了所需的 Hook,然后就可以利用 Istio 控制平面为应用提供服务路由、遥测数据收集以及策略实施等功能。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM