Istio 1.0 部署

原文連接:Istio 1.0 部署html

北京時間 2018 年 8 月 1 日(建軍節)凌晨 0 點,Istio 宣佈推出 1.0 正式版本,並表示已可用於生產環境。這距離最初的 0.1 版本發佈已過去一年多的時間。這個項目的組件相對比較複雜,原有的一些選項是靠 ConfigMap 以及 istioctl 分別調整的,如今經過從新設計的 Helm Chart,安裝選項用 values.yml 或者 helm 命令行的方式來進行集中管理了。mysql

在安裝 Istio 以前要確保 Kubernetes 集羣(僅支持 v1.9 及之後版本)已部署並配置好本地的 kubectl 客戶端。linux

1. 下載 Istio

$ wget https://github.com/istio/istio/releases/download/1.0.0/istio-1.0.0-linux.tar.gz
$ tar zxf istio-1.0.0-linux.tar.gz
$ cp istio-1.0.0/bin/istioctl /usr/local/bin/
複製代碼

2. 使用 Helm 部署 Istio 服務

克隆 Istio 倉庫:git

$ git clone https://github.com/istio/istio.git
$ cd istio
複製代碼

安裝包內的 Helm 目錄中包含了 Istio 的 Chart,官方提供了兩種方法:github

  • 用 Helm 生成 istio.yaml,而後自行安裝。
  • Tiller 直接安裝。

很明顯,兩種方法並無什麼本質區別,這裏咱們採用第一種方法來部署。sql

$ helm template install/kubernetes/helm/istio --name istio --namespace istio-system --set sidecarInjectorWebhook.enabled=true --set ingress.service.type=NodePort --set gateways.istio-ingressgateway.type=NodePort --set gateways.istio-egressgateway.type=NodePort --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 設置爲 true,從而使自動注入屬性生效。api

部署完成後,能夠檢查 isotio-system namespace 中的服務是否正常運行:bash

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

istio-citadel-f5779fbbb-brbxd
istio-cleanup-secrets-jjqg5
istio-egressgateway-6c5cc7dd86-l2c82
istio-galley-6bf8f6f4b7-twvzl
istio-ingressgateway-fbfdfc5c7-fg9xh
istio-pilot-85df58955d-g5bfh
istio-policy-74c48c8ccb-wd6h6
istio-sidecar-injector-cf5999cf8-h9smx
istio-statsd-prom-bridge-55965ff9c8-2hmzf
istio-telemetry-cb49594cc-gfd84
istio-tracing-77f9f94b98-9xvzs
prometheus-7456f56c96-xcdh4
servicegraph-5b8d7b4d5-lzhth
複製代碼
  1. 過去的 istio-ca 現已改名 istio-citadel
  2. istio-cleanup-secrets 是一個 job,用於清理過去的 Istio 遺留下來的 CA 部署(包括 sa、deploy 以及 svc 三個對象)。
  3. egressgatewayingress 以及 ingressgateway,能夠看出邊緣部分的變更很大,之後會另行發文。

3. Prometheus、Grafana、Servicegraph 和 Jaeger

等全部 Pod 啓動後,能夠經過 NodePort、Ingress 或者 kubectl proxy 來訪問這些服務。好比能夠經過 Ingress 來訪問服務。ide

首先爲 Prometheus、Grafana、Servicegraph 和 Jaeger 服務建立 Ingress:post

$ 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 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 頁面:

若是你已經部署了 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. 參考

相關文章
相關標籤/搜索