[zh] improve proxy-cmd zipkin prometheus virtual-machines (#13955)

Signed-off-by: xin.li <xin.li@daocloud.io>
This commit is contained in:
my-git9 2023-10-02 13:22:18 +08:00 committed by GitHub
parent 04769ce9a7
commit dfce373e6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 48 deletions

View File

@ -17,7 +17,7 @@ test: yes
本示例通过在虚拟机VM上运行一项服务来跨 Kubernetes 部署 Bookinfo 应用程序,
并说明了如何以单个网格的形式控制此基础架构。
## 概述{#overview}
## 概述 {#overview}
{{< image width="80%" link="./vm-bookinfo.svg" caption="在虚拟机上运行 Bookinfo" >}}
@ -25,7 +25,7 @@ test: yes
https://docs.google.com/drawings/d/1G1592HlOVgtbsIqxJnmMzvy6ejIdhajCosxF1LbvspI/edit
-->
## 开始之前{#before-you-begin}
## 开始之前 {#before-you-begin}
- 按照[虚拟机安装引导](/zh/docs/setup/install/virtual-machine/)的介绍来配置 Istio。
@ -34,7 +34,7 @@ https://docs.google.com/drawings/d/1G1592HlOVgtbsIqxJnmMzvy6ejIdhajCosxF1LbvspI/
- 按照[虚拟机配置](/zh/docs/setup/install/virtual-machine/#configure-the-virtual-machine)
创建一个虚拟机并添加到 `vm` 命名空间下。
## 在虚拟机上运行 MySQL{#running-MySQL-on-the-VM}
## 在虚拟机上运行 MySQL {#running-MySQL-on-the-VM}
您将在虚拟机上安装 MySQL并将其配置为 ratings 服务的后端。
@ -62,16 +62,18 @@ EOF
$ sudo systemctl restart mysql
{{< /text >}}
您可以在 [Mysql](https://mariadb.com/kb/en/library/download/) 中找到配置 MySQL 的详细信息。
您可以在 [Mysql](https://mariadb.com/kb/en/library/download/)
中找到配置 MySQL 的详细信息。
在虚拟机上,将 ratings 数据库添加到 mysql 中。
在虚拟机上,将 ratings 数据库导入到 mysql 中。
{{< text bash >}}
$ curl -LO {{< github_file >}}/samples/bookinfo/src/mysql/mysqldb-init.sql
$ mysql -u root -ppassword < mysqldb-init.sql
{{< /text >}}
为了便于直观地检查 Bookinfo 应用程序输出中的差异,您可以使用以下命令来更改并检查所生成的 ratings 数据库:
为了便于直观地检查 Bookinfo 应用程序输出中的差异,您可以使用以下命令来更改并检查所生成的
`ratings` 数据库:
{{< text bash >}}
$ mysql -u root -ppassword test -e "select * from ratings;"
@ -83,7 +85,7 @@ $ mysql -u root -ppassword test -e "select * from ratings;"
+----------+--------+
{{< /text >}}
更改 ratings 数据库:
更改 `ratings` 数据库:
{{< text bash >}}
$ mysql -u root -ppassword test -e "update ratings set rating=1 where reviewid=1;select * from ratings;"
@ -95,10 +97,10 @@ $ mysql -u root -ppassword test -e "update ratings set rating=1 where reviewid=
+----------+--------+
{{< /text >}}
## 向网格中注册 mysql 服务{#registering-the-mysql-service-with-the-mesh}
## 将 mysql 服务暴露给网格 {#expose-the-mysql-service-to-the-mesh}
当虚拟机启动时,将会自动被注册到网格中。
然而,就像创建 Pod 一样,仍需要创建一个 Service 才能进行轻松访问
然而,就像创建 Pod 时一样,我们仍然需要创建一个 Service然后才能轻松访问它
{{< text bash >}}
$ cat <<EOF | kubectl apply -f - -n vm
@ -117,7 +119,7 @@ spec:
EOF
{{< /text >}}
## 使用 mysql 服务{#using-the-mysql-service}
## 使用 mysql 服务 {#using-the-mysql-service}
Bookinfo 中的 ratings 服务将使用该虚拟机上的数据库。
为了验证它是否正常工作,请在虚拟机上创建使用 mysql 数据库的 ratings 服务第二个版本。
@ -136,7 +138,7 @@ $ kubectl apply -n bookinfo -f @samples/bookinfo/networking/virtual-service-rati
您可以验证 Bookinfo 应用程序的输出显示的是 Reviewer1 的 1 个星,
还是 Reviewer2 的 4 个星,或者更改虚拟机的 ratings 服务并查看结果。
## 从虚拟机访问 Kubernetes 服务{#reaching-Kubernetes-services-from-the-virtual-machine}
## 从虚拟机访问 Kubernetes 服务 {#reaching-Kubernetes-services-from-the-virtual-machine}
在上面的示例中,我们将虚拟机视为一个服务。
您还可以在您的虚拟机中无缝调用 Kubernetes 的服务:
@ -151,11 +153,11 @@ $ curl productpage.bookinfo:9080
Istio 的 [DNS 代理](/zh/docs/ops/configuration/traffic-management/dns-proxy/)自动为您的虚拟机配置
DNS允许通过 Kubernetes 的主机名进行访问。
## 清理{#cleanup}
## 清理 {#cleanup}
- 按照 [`Bookinfo` 清理](/zh/docs/examples/bookinfo/#cleanup)中的步骤,
删除 `Bookinfo` 样例应用及其配置。
- 删除 `mysqldb` 服务
- 删除 `mysqldb` Service
{{< text syntax=bash snip_id=none >}}
$ kubectl delete service mysqldb

View File

@ -19,18 +19,17 @@ Istio 提供了两个非常有价值的命令来帮助诊断流量管理配置
如果您想尝试以下的命令,需要:
* 有一个安装了 Istio 和 Bookinfo 应用的 Kubernetes 集群(正如在
[安装步骤](/zh/docs/setup/getting-started/)和
[Bookinfo 安装步骤](/zh/docs/examples/bookinfo/#deploying-the-application)所描述的那样)。
* 有一个安装了 Istio 和 Bookinfo 应用的 Kubernetes 集群(正如在[安装步骤](/zh/docs/setup/getting-started/)和
[Bookinfo 安装步骤](/zh/docs/examples/bookinfo/#deploying-the-application)所描述的那样)。
或者
或者
* 使用类似的命令在 Kubernetes 集群中运行您自己的应用。
## 获取网格概况{#get-an-overview-of-your-mesh}
## 获取网格概况 {#get-an-overview-of-your-mesh}
`proxy-status` 命令容许您获取网格的概况。如果您怀疑某一个 Sidecar
没有接收到配置或配置不同步时,`proxy-status` 将告诉您原因
您可以使用 `proxy-status` 命令获取网格的概况。如果您怀疑某一个 Sidecar
没有接收到配置或配置不同步时,可以通过 `proxy-status` 命令进行检测
{{< text bash >}}
$ istioctl proxy-status
@ -47,16 +46,15 @@ reviews-v3-7dbcdcbc56-t8wrx.default SYNCED SYNCED SYN
如果列表中缺少代理,这意味着它目前没有连接到 Istiod 实例,因此不会接收任何配置。
* `SYNCED` 意思是 Envoy 知晓了 {{< gloss >}}Istiod{{< /gloss >}}
已经将最新的配置发送给了它。
* `NOT SENT` 意思是 Istiod 没有发送任何信息给 Envoy。这通常是因为
* `SYNCED` 表示 Envoy 已确认 {{<gloss>}}Istiod{{</gloss>}} 发送给它的最新配置。
* `NOT SENT` 表示 Istiod 尚未向 Envoy 发送任何内容。这通常是因为
Istiod 没什么可发送的。
* `STALE` 意思是 Istiod 已经发送了一个更新到 Envoy但还没有收到应答。
这通常意味着 Envoy 和 Istiod 之间存在网络问题,或者 Istio 自身的 bug
* `STALE` 表示 Istiod 已经将更新的配置发送到给了 Envoy但还没有收到应答。
这通常意味着 Envoy 和 Istiod 之间存在网络问题,或者 Istio 自身存在问题
## 检查 Envoy 和 Istiod 的差异 {#retrieve-diffs-between-envoy-and-Istiod}
通过提供代理 ID`proxy-status` 命令还可以用来检查 Envoy
`proxy-status` 命令还可以通过代理 ID 来检查 Envoy
已加载的配置和 Istiod 发送给它的配置有什么异同,这可以帮您准确定位哪些配置是不同步的,
以及问题出在哪里。
@ -106,13 +104,14 @@ Listeners Match
Routes Match (RDS last loaded at Tue, 04 Aug 2020 11:52:54 IST)
{{< /text >}}
从这儿可以看到,监听器和路由是匹配的,但集群不同步。
从这儿可以看到,监听器和路由是匹配的,但集群信息不同步。
## 深入 Envoy 配置 {#deep-dive-into-envoy-configuration}
`proxy-config` 命令可以用来查看给定的 Envoy 是如何配置的。
这样就可以通过 Istio 配置和自定义资源来查明任何您无法检测到的问题。
下面的命令为给定 Pod 提供了集群、监听器或路由的基本概要(当需要时可以为监听器或路由改变集群):
这样就可以使用它来检测仅通过查看 Istio 配置和自定义资源无法检测到的一些问题。
下面的命令展示了给定 Pod 的集群cluster、监听器listener或路由route的基本概要
(当需要时可以为监听器或路由改变集群):
{{< text bash >}}
$ istioctl proxy-config cluster -n istio-system istio-ingressgateway-7d6874b48f-qxhn5
@ -142,7 +141,7 @@ xds-grpc -
zipkin - - - STRICT_DNS
{{< /text >}}
为了调试 Envoy 您需要理解 Envoy 集群、监听器、路由、endpoints
为了调试 Envoy,您需要理解 Envoy 集群、监听器、路由、Endpoint
以及它们是如何交互的。我们将使用带有 `-o json` 参数的 `proxy-config`
命令,根据标志过滤出并跟随特定的 Envoy它将请求从 `productpage` Pod
发送到 `reviews` Pod 9080 端口。
@ -308,9 +307,9 @@ zipkin -
...
{{< /text >}}
1. 此集群配置为从 Istiod通过 ADS检索关联的 endpoints
1. 此集群配置为从 Istiod通过 ADS检索关联的 Endpoint
所以 Envoy 会使用 `serviceName` 字段作为主键,来检查
endpoint 列表并把请求代理到其中之一。
Endpoint 列表并把请求代理到其中之一。
{{< text bash json >}}
$ istioctl proxy-config cluster productpage-v1-6c886ff494-7vxhs --fqdn reviews.default.svc.cluster.local -o json
@ -340,7 +339,7 @@ zipkin -
]
{{< /text >}}
1. 要查看此集群当前可用的 endpoint请使用 `proxy-config` endpoints 命令。
1. 要查看此集群当前可用的 Endpoint请使用 `proxy-config` endpoints 命令。
{{< text bash json >}}
$ istioctl proxy-config endpoints productpage-v1-6c886ff494-7vxhs --cluster "outbound|9080||reviews.default.svc.cluster.local"
@ -408,16 +407,17 @@ $ istioctl proxy-config bootstrap -n istio-system istio-ingressgateway-7d6874b48
验证与 Istiod 的连通性是一个有用的故障排除步骤。
服务网格内的每个代理容器都应该能和 Istiod 通信。
这可以通过几个简单的步骤来实现
这可以通过几个简单的步骤来检测
1. 创建一个 `sleep` pod
1. 创建一个 `sleep` Pod
{{< text bash >}}
$ kubectl create namespace foo
$ kubectl apply -f <(istioctl kube-inject -f samples/sleep/sleep.yaml) -n foo
{{< /text >}}
1. 使用`curl`测试 Istiod 的连接。下面的示例使用默认 Istiod 配置参数和启用相互 TLS 调用 v1 注册 API
1. 使用 `curl` 测试 Istiod 的连接。下面的示例使用默认 Istiod 配置参数和启用双向 TLS
调用 v1 注册 API
{{< text bash >}}
$ kubectl exec $(kubectl get pod -l app=sleep -n foo -o jsonpath={.items..metadata.name}) -c sleep -n foo -- curl -sS istiod.istio-system:15014/version
@ -425,7 +425,7 @@ $ istioctl proxy-config bootstrap -n istio-system istio-ingressgateway-7d6874b48
您应该收到一个响应,其中列出了 Istiod 的版本。
## Istio 使用的 Envoy 版本是什么?{#what-envoy-version-is-Istio-using}
## Istio 使用的 Envoy 版本是什么? {#what-envoy-version-is-Istio-using}
要在部署中找出 Envoy 的版本,您可以通过 `exec` 进入容器并查询 `server_info` 终端:

View File

@ -8,7 +8,7 @@ test: n/a
---
[Prometheus](https://prometheus.io/) 是一个开源的监控系统、
时间序列数据库。您可以利用 Prometheus 与 Istio 集成来收集指标,
时间序列数据库。您可以利用 Prometheus 与 Istio 集成来收集指标Metrics
通过这些指标判断 Istio 和网格内的应用的运行状况。您可以使用
[Grafana](/zh/docs/ops/integrations/grafana/) 和
[Kiali](/zh/docs/tasks/observability/kiali/) 来可视化这些指标。
@ -23,7 +23,7 @@ Istio 提供了一个简单地安装示例来快速安装、运行 Prometheus
$ kubectl apply -f {{< github_file >}}/samples/addons/prometheus.yaml
{{< /text >}}
这将会在您的集群中部署 Prometheus。这仅用于展示,不会针对性能和安全性进行调整。
这将会在您的集群中部署 Prometheus。这仅用于演示,并未针对性能或安全性进行调整。
{{< warning >}}
快速开始的配置仅适合小型集群和短期监控,不适用于大型网格和长时间的监控。
@ -49,7 +49,6 @@ $ kubectl apply -f {{< github_file >}}/samples/addons/prometheus.yaml
1. 控制平面(`istiod` Deployment
1. 入口和出口网关
1. Ingress and Egress gateways
1. Envoy Sidecar
1. 用户应用程序(如果这些应用程序向 Prometheus 暴露指标的话)
@ -58,8 +57,9 @@ $ kubectl apply -f {{< github_file >}}/samples/addons/prometheus.yaml
### 选项 1指标合并 {#option-1-metrics-merging}
为了简化配置Istio 可以通过 `prometheus.io` 注解来控制指标的获取。
他允许 Istio 通过 [Helm `stable/prometheus`](https://github.com/helm/charts/tree/master/stable/prometheus)
的 chart 使用标准配置获取数据,开箱即用。
这使得 Istio 抓取可以使用标准配置开箱即用,例如
[Helm `stable/prometheus`](https://github.com/helm/charts/tree/master/stable/prometheus)
Chart 提供的配置。
{{< tip >}}
尽管 `prometheus.io` 并不是 Prometheus 的核心注解,
@ -69,7 +69,7 @@ $ kubectl apply -f {{< github_file >}}/samples/addons/prometheus.yaml
该选项默开启但是允许在[安装](/zh/docs/setup/install/istioctl/)时通过
`--set meshConfig.enablePrometheusMerge=false` 关闭。当开启后,
会将适当的 `prometheus.io` 注解添加到所有的数据平面容器中来设置指标收集。
如果这些注解已经存在他们将会被覆盖。使用该选项Envoy sidecar 将 Istio
如果这些注解已经存在他们将会被覆盖。使用该选项Envoy Sidecar 将 Istio
的指标与应用程序的指标合并。合并的指标将由 `:15020/stats/prometheus` 收集。
该选项以纯文本的形式显示所有指标。

View File

@ -7,25 +7,30 @@ owner: istio/wg-environments-maintainers
test: n/a
---
[Zipkin](https://zipkin.io/) 是一个分布式追踪系统。它帮助收集在定位服务架构延迟问题时所需的计时数据。包括数据的收集和查找等特性。
[Zipkin](https://zipkin.io/) 是一个分布式追踪系统,可用来协助收集在定位服务架构延迟问题时所需的计时数据,
功能包括此数据的收集和查找。
## 安装 {#installation}
### 方法1快速开始 {#quick-start}
Istio 提供了一个基本的安装示例来快速启动和运行 Zipkin:
Istio 提供了一个基本的安装示例来快速启动和运行 Zipkin
{{< text bash >}}
$ kubectl apply -f {{< github_file >}}/samples/addons/extras/zipkin.yaml
{{< /text >}}
通过 kubectl apply -f 将 Zipkin 部署到集群中。仅用于演示,没有针对性能或安全性进行调优。
通过 `kubectl apply -f` 将 Zipkin 部署到集群中。此示例仅用于演示,
没有针对其性能或安全性进行调优。
### 方法2定制化安装 {#customizable-install}
查阅 [Zipkin 文档](https://zipkin.io/) 开始安装。Zipkin 集成 Istio 使用时没有特别的地方需要修改。
参阅 [Zipkin 文档](https://zipkin.io/)开始安装。Zipkin 集成 Istio 使用时无需进行特殊修改。
Zipkin 安装完成后,您需要指定 Istio 代理用来向 Deployment 发送追踪数据。可以在安装时候可以通过配置参数 `--set values.global.tracer.zipkin.address=<zipkin-collector-address>:9411` 指定。更高级配置例如TLS 配置可以参考 [`ProxyConfig.Tracing`](/zh/docs/reference/config/istio.mesh.v1alpha1/#Tracing) 链接。
Zipkin 安装完成后,您需要指定 Istio 代理用来向 Deployment 发送追踪数据。
可以在安装时通过指定参数 `--set values.global.tracer.zipkin.address=<zipkin-collector-address>:9411`
进行配置。更高级配置例如TLS 配置可以参考
[`ProxyConfig.Tracing`](/zh/docs/reference/config/istio.mesh.v1alpha1/#Tracing) 链接。
## 使用 {#usage}