Istio 0.8 部署


使用 Helm 部署 Istio 服务

Istio 0.8 部署

使用 Helm 部署 Istio 服务

Tue Jul 10, 2018

1800 Words|Read in about 4 Min
Tags: istio   service mesh  

北京时间 2018 年 6 月 1 日(儿童节)上午 9: 30 Istio 0.8.0 LTS(长期支持版本)发布。这个项目的组件相对比较复杂,原有的一些选项是靠 ConfigMap 以及 istioctl 分别调整的,现在通过重新设计的 Helm Chart,安装选项用 values.yml 或者 helm 命令行的方式来进行集中管理了。

在安装 Istio 之前要确保 Kubernetes 集群(仅支持 v1.7.3 及以后版本)已部署并配置好本地的 kubectl 客户端。

1. 下载 Istio


$ wget https://github.com/istio/istio/releases/download/0.8.0/istio-0.8.0-linux.tar.gz
$ tar zxf istio-0.8.0-linux.tar.gz
$ cp istio-0.8.0/bin/istioctl /usr/local/bin/


2. 使用 Helm 部署 Istio 服务


克隆 Istio 仓库:

$ git clone https://github.com/istio/istio.git -b release-0.8
$ cd istio

安装包内的 Helm 目录中包含了 Istio 的 Chart,官方提供了两种方法:

  • 用 Helm 生成 istio.yaml,然后自行安装。
  • Tiller 直接安装。

很明显,两种方法并没有什么本质区别,这里我们采用第一种方法来部署。

有两种方式(选择其一执行):

  • 不开启自动 sidecar 注入
$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system --set sidecarInjectorWebhook.enabled=false --set ingress.service.type=NodePort --set ingressgateway.service.type=NodePort --set egressgateway.service.type=NodePort --set global.tag=0.8.0 --set tracing.enabled=true --set servicegraph.enabled=true --set prometheus.enabled=true --set tracing.jaeger.enabled=true --set grafana.enabled=true > istio.yaml

$ kubectl create namespace istio-system
$ kubectl create -f istio.yaml

这里说的是使用 install/kubernetes/helm/istio 目录中的 Chart 进行渲染,生成的内容保存到 ./istio.yaml 文件之中。将 sidecarInjectorWebhook.enabled 设置为 False,从而禁止自动注入属性生效。

  • 开启自动 sidecar 注入
$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system --set sidecarInjectorWebhook.enabled=true --set ingress.service.type=NodePort --set ingressgateway.service.type=NodePort --set egressgateway.service.type=NodePort --set global.tag=0.8.0 --set tracing.enabled=true --set servicegraph.enabled=true --set prometheus.enabled=true --set tracing.jaeger.enabled=true --set grafana.enabled=true > istio.yaml

$ kubectl create namespace istio-system
$ kubectl create -f istio.yaml

部署完成后,可以检查 isotio-system namespace 中的服务是否正常运行:

$ kubectl -n istio-system get pods -o go-template='{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}'

istio-citadel-ff5696f6f-p6xz6
istio-cleanup-old-ca-mtzqv
istio-egressgateway-58d98d898c-9wmrb
istio-ingress-6fb78f687f-78tt8
istio-ingressgateway-6bc7c7c4bc-mgkvg
istio-mixer-post-install-zqmtr
istio-pilot-6c5c6b586c-7hk6r
istio-policy-5c7fbb4b9f-4rspm
istio-statsd-prom-bridge-6dbb7dcc7f-s9qvd
istio-telemetry-54b5bf4847-s5mqr
istio-tracing-67dbb5b89f-4ftd9
prometheus-586d95b8d9-pdwkh
servicegraph-6d86dfc6cb-xbpjx
  1. 过去的 istio-ca 现已更名 istio-citadel
  2. istio-cleanup-old-ca 是一个 job,用于清理过去的 Istio 遗留下来的 CA 部署(包括 sa、deploy 以及 svc 三个对象)。
  3. istio-mixer-post-install 同样也是一个 job,和上面的 Job 一样,简单的调用 kubectl 创建第三方资源,从而避免了之前的 CDR 需要重复创建的尴尬状况。
  4. egressgatewayingress 以及 ingressgateway,可以看出边缘部分的变动很大,以后会另行发文。

3. Prometheus、Grafana、Servicegraph 和 Jaeger


等所有 Pod 启动后,可以通过 NodePort、Ingress 或者 kubectl proxy 来访问这些服务。比如可以通过 Ingress 来访问服务。

首先为 Prometheus、Grafana、Servicegraph 和 Jaeger 服务创建 Ingress:

$ cat ingress.yaml

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: prometheus
  namespace: istio-system
spec:
  rules:
  - host: prometheus.istio.io
    http:
      paths:
      - path: /
        backend:
          serviceName: prometheus
          servicePort: 9090
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grafana
  namespace: istio-system
spec:
  rules:
  - host: grafana.istio.io
    http:
      paths:
      - path: /
        backend:
          serviceName: grafana
          servicePort: 3000
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: servicegraph
  namespace: istio-system
spec:
  rules:
  - host: servicegraph.istio.io
    http:
      paths:
      - path: /
        backend:
          serviceName: servicegraph
          servicePort: 8088
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tracing
  namespace: istio-system
spec:
  rules:
  - host: tracing.istio.io
    http:
      paths:
      - path: /
        backend:
          serviceName: tracing
          servicePort: 80
$ kubectl create -f ingress.yaml

然后在你的本地电脑上添加四条 hosts

$Ingree_host prometheus.istio.io
$Ingree_host grafana.istio.io
$Ingree_host servicegraph.istio.io
$Ingree_host tracing.istio.io

$Ingree_host 替换为 Ingress Controller 运行节点的 IP。

通过 http://grafana.istio.io 访问 Grafana 服务:

通过 http://servicegraph.istio.io 访问 ServiceGraph 服务,展示服务之间调用关系图。

  • http://servicegraph.istio.io/force/forcegraph.html : As explored above, this is an interactive D3.js visualization.

  • http://servicegraph.istio.io/dotviz : is a static Graphviz visualization.

  • http://servicegraph.istio.io/dotgraph : provides a [DOT](https://www.wikiwand.com/en/DOT_(graph_description_language) serialization.
  • http://servicegraph.istio.io/d3graph : provides a JSON serialization for D3 visualization.
  • http://servicegraph.istio.io/graph : provides a generic JSON serialization.

通过 http://tracing.istio.io/ 访问 Jaeger 跟踪页面:

通过 http://prometheus.istio.io/ 访问 Prometheus 页面:

Note


如果你已经部署了 Prometheus-operator,可以不必部署 Grafana,直接将 addons/grafana/dashboards 目录下的 Dashboard 模板复制出来放到 Prometheus-operator 的 Grafana 上,然后添加 istio-system 命名空间中的 Prometheus 数据源就可以监控 Istio 了。


4. Mesh Expansion


Istio 还支持管理非 Kubernetes 管理的应用。此时,需要在应用所在的 VM 或者物理中部署 Istio,具体步骤请参考 Mesh Expansion

部署好后,就可以向 Istio 注册应用,如:

# istioctl register servicename machine-ip portname:port
$ istioctl -n onprem register mysql 1.2.3.4 3306
$ istioctl -n onprem register svc1 1.2.3.4 http:7000


5. 参考



See Also

Tue Jul 10, 2018

1800 Words|Read in about 4 Min
Tags: istio   service mesh