[zh] sync /tasks/observability/kiali/index.md (#12269)
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
title: 网络可视化
|
||||
title: 网格可视化
|
||||
description: 此任务向您展示如何在 Istio 网格中可视化服务。
|
||||
weight: 49
|
||||
keywords: [telemetry,visualization]
|
||||
|
@ -19,111 +19,23 @@ test: no
|
|||
{{< /idea >}}
|
||||
|
||||
此任务始终将 [Bookinfo](/zh/docs/examples/bookinfo/) 示例应用程序作为示例。
|
||||
此任务假设 Bookinfo 应用程序安装在 `bookinfo` 命名空间中。
|
||||
|
||||
## 开始之前{#before-you-begin}
|
||||
|
||||
{{< tip >}}
|
||||
以下说明假设您已安装过 `istioctl` 并使用它来安装 Kiali。
|
||||
不使用 `istioctl` 来安装 Kiali, 请参考 [Kiali 安装说明](https://kiali.io/docs/installation/)。
|
||||
{{< /tip >}}
|
||||
遵循 [Kiali 安装](/zh/docs/ops/integrations/kiali/#installation)文档将 Kiali 部署到您的集群中。
|
||||
|
||||
### 创建 secret{#create-a-secret}
|
||||
## 生成服务图{#generating-a-graph}
|
||||
|
||||
{{< tip >}}
|
||||
如果您打算按照 [Istio 快速入门](/zh/docs/setup/getting-started/)说明使用 Istio 演示配置文件安装 Kiali,则会为您创建一个默认 secret,用户名为 `admin` ,密码为 `admin`。因此,您可以跳过此部分。
|
||||
{{< /tip >}}
|
||||
|
||||
在 Istio 命名空间中创建一个 Secret,作为 Kiali 的身份验证凭据。
|
||||
|
||||
首先,定义要用作 Kiali 用户名和密码的凭据。
|
||||
|
||||
当提示出现时输入 Kiali 用户名:
|
||||
|
||||
{{< text bash >}}
|
||||
$ KIALI_USERNAME=$(read -p 'Kiali Username: ' uval && echo -n $uval | base64)
|
||||
{{< /text >}}
|
||||
|
||||
当提示出现时输入 Kiali 密码:
|
||||
|
||||
{{< text bash >}}
|
||||
$ KIALI_PASSPHRASE=$(read -sp 'Kiali Passphrase: ' pval && echo -n $pval | base64)
|
||||
{{< /text >}}
|
||||
|
||||
如果使用的是 Z Shell `zsh`,请使用以下内容定义凭据:
|
||||
|
||||
{{< text bash >}}
|
||||
$ KIALI_USERNAME=$(read '?Kiali Username: ' uval && echo -n $uval | base64)
|
||||
$ KIALI_PASSPHRASE=$(read -s "?Kiali Passphrase: " pval && echo -n $pval | base64)
|
||||
{{< /text >}}
|
||||
|
||||
运行以下命令创建 secret:
|
||||
|
||||
{{< text bash >}}
|
||||
$ NAMESPACE=istio-system
|
||||
$ kubectl create namespace $NAMESPACE
|
||||
{{< /text >}}
|
||||
|
||||
{{< text bash >}}
|
||||
$ cat <<EOF | kubectl apply -f -
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: kiali
|
||||
namespace: $NAMESPACE
|
||||
labels:
|
||||
app: kiali
|
||||
type: Opaque
|
||||
data:
|
||||
username: $KIALI_USERNAME
|
||||
passphrase: $KIALI_PASSPHRASE
|
||||
EOF
|
||||
{{< /text >}}
|
||||
|
||||
### 通过 `istioctl` 安装{#install-Via-`istioctl`}
|
||||
|
||||
创建 Kiali secret 后,请参照 `istioctl` [安装说明](/zh/docs/setup/install/istioctl/)来安装 Kiali。
|
||||
例如:
|
||||
|
||||
{{< text bash >}}
|
||||
$ istioctl manifest apply --set values.kiali.enabled=true
|
||||
{{< /text >}}
|
||||
|
||||
{{< idea >}}
|
||||
该任务不讨论 Jaeger 和 Grafana。如果已经在集群中安装了它们,并且想了解 Kiali 如何与它们集成,则必须将其他参数传递给 `helm` 命令,例如:
|
||||
|
||||
{{< text bash >}}
|
||||
$ istioctl manifest apply \
|
||||
--set values.kiali.enabled=true \
|
||||
--set "values.kiali.dashboard.jaegerURL=http://jaeger-query:16686" \
|
||||
--set "values.kiali.dashboard.grafanaURL=http://grafana:3000"
|
||||
{{< /text >}}
|
||||
|
||||
{{< /idea >}}
|
||||
|
||||
安装 Istio 和 Kiali 后,部署 [Bookinfo](/zh/docs/examples/bookinfo/) 示例应用程序。
|
||||
|
||||
### 运行在 OpenShift{#running-on-OpenShift}
|
||||
|
||||
当 Kiali 在 OpenShift 上运行时,它需要访问一些 OpenShift 特定的资源才能正常运行,
|
||||
在安装 Kiali 之后,可以使用以下命令完成此操作:
|
||||
|
||||
{{< text bash >}}
|
||||
$ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiGroups":["apps.openshift.io"], "resources":["deploymentconfigs"],"verbs": ["get", "list", "watch"]}}]' --type json
|
||||
$ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiGroups":["project.openshift.io"], "resources":["projects"],"verbs": ["get"]}}]' --type json
|
||||
$ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiGroups":["route.openshift.io"], "resources":["routes"],"verbs": ["get"]}}]' --type json
|
||||
{{< /text >}}
|
||||
|
||||
## 生成服务图{#generating-a-service-graph}
|
||||
|
||||
1. 要验证服务是否在您的群集中运行,请运行以下命令:
|
||||
1. 要验证服务是否在您的集群中运行,请运行以下命令:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl -n istio-system get svc kiali
|
||||
{{< /text >}}
|
||||
|
||||
1. 要确定 Bookinfo URL,请按照说明确定 [Bookinfo ingress `GATEWAY_URL`](/zh/docs/examples/bookinfo/#determine-the-ingress-IP-and-port).
|
||||
1. 要确定 Bookinfo URL,请按照说明确定 [Bookinfo ingress `GATEWAY_URL`](/zh/docs/examples/bookinfo/#determine-the-ingress-IP-and-port)。
|
||||
|
||||
1. 要将流量发送到网格,您有三种选择
|
||||
1. 要将流量发送到网格,您有三种选择:
|
||||
|
||||
* 在浏览器中访问 `http://$GATEWAY_URL/productpage`
|
||||
|
||||
|
@ -145,19 +57,19 @@ $ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiG
|
|||
$ istioctl dashboard kiali
|
||||
{{< /text >}}
|
||||
|
||||
1. 要登录 Kiali UI,请到 Kiali 登录界面,然后输入存储在 Kiali secret 中的用户名和密码。
|
||||
|
||||
1. 登录后立即显示的 **Overview** 页面中查看网格的概述。**Overview** 页面显示了网格中具有服务的所有名称空间。以下屏幕截图显示了类似的页面:
|
||||
1. 登录后立即显示的 **Overview** 页面中查看网格的概述。**Overview** 页面显示了网格中具有服务的所有命名空间。以下屏幕截图显示了类似的页面:
|
||||
|
||||
{{< image width="75%" link="./kiali-overview.png" caption="Example Overview" >}}
|
||||
|
||||
1. 要查看名称空间图,请单击 Bookinfo 名称空间卡中的 `bookinfo` 图标。图形图标位于名称空间卡的左下角,看起来像是一组相连的圈子,页面类似于:
|
||||
1. 要查看命名空间图,请点击 Bookinfo 命名空间卡中的 `bookinfo` 图标。图形图标位于命名空间卡的左下角,看起来像是一组相连的圈子,页面类似于:
|
||||
|
||||
{{< image width="75%" link="./kiali-graph.png" caption="Example Graph" >}}
|
||||
|
||||
1. 这个图表示一段时间内流过服务网格的流量。该图使用 Istio 遥测而生成。
|
||||
|
||||
1. 要查看度量标准摘要,请选择图中的任何节点或边,以便在右侧的 summary details 面板中显示其度量的详细信息。
|
||||
|
||||
1. 要使用不同的图形类型查看服务网格,请从 **Graph Type** 下拉菜单中选择一种图形类型。有几种图形类型可供选择:**App**, **Versioned App**, **Workload**, **Service**。
|
||||
1. 要使用不同的图形类型查看服务网格,请从 **Graph Type** 下拉菜单中选择一种图形类型。有几种图形类型可供选择:**App**、**Versioned App**、**Workload**、**Service**。
|
||||
|
||||
* **App** 图形类型将一个应用程序的所有版本聚合到一个图形节点中。以下示例显示了一个单独的 **reviews** 节点,它代表了评论应用程序的三个版本。
|
||||
|
||||
|
@ -179,42 +91,46 @@ $ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiG
|
|||
|
||||
## 检查 Istio 配置{#examining-Istio-configuration}
|
||||
|
||||
1. 要检查有关 Istio 配置的详细信息,请单击左侧菜单栏上的 **Applications**,**Workloads** 和 **Services** 菜单图标。
|
||||
1. 要检查有关 Istio 配置的详细信息,请点击左侧菜单栏上的 **Applications**、**Workloads** 和 **Services** 菜单图标。
|
||||
以下屏幕截图显示了 Bookinfo 应用程序信息:
|
||||
|
||||
{{< image width="80%" link="./kiali-services.png" caption="Example Details" >}}
|
||||
|
||||
## 创建加权路由{#creating-weighted-routes}
|
||||
## 流量转移{#traffic-shifting}
|
||||
|
||||
您可以使用 Kiali 加权路由转发来定义特定百分比的请求流量以路由到两个或多个工作负载。
|
||||
您可以使用 Kiali 流量转移向导来定义特定百分比的请求流量以路由到两个或多个工作负载。
|
||||
|
||||
1. 查看 `bookinfo` 图的 **Versioned app graph**。
|
||||
|
||||
* 确保已经在 **Edge Labels** 下拉菜单中选择了 **Requests percentage** ,以查看路由到每个工作负载的流量百分比。
|
||||
* 确保已启用 **Traffic Distribution Edge Label** 的 **Display** 选项,以查看路由到每个工作负载的流量百分比。
|
||||
|
||||
* 确保已经选中 **Display** 下拉菜单中的 **Service Nodes** 复选框,以便在图中查看服务节点。
|
||||
* 确保已经已启用 **Show Service Nodes** 的 **Display** 选项,以在图中查看服务节点。
|
||||
|
||||
{{< image width="80%" link="./kiali-wiz0-graph-options.png" caption="Bookinfo Graph Options" >}}
|
||||
|
||||
1. 通过单击 `ratings` 服务 (triangle) 节点,将关注点放在 `bookinfo` 图内的 `ratings` 服务上。
|
||||
1. 通过点击 `ratings` 服务 (三角形) 节点,将关注点放在 `bookinfo` 图内的 `ratings` 服务上。
|
||||
注意,`ratings` 服务流量平均分配给两个 `ratings` 服务 `v1` 和 `v2`(每台服务被路由 50% 的请求)。
|
||||
|
||||
{{< image width="80%" link="./kiali-wiz1-graph-ratings-percent.png" caption="Graph Showing Percentage of Traffic" >}}
|
||||
|
||||
1. 点击侧面板上的 **ratings** 链接,进入 `ratings` 服务的服务视图。
|
||||
1. 点击侧面板上的 **ratings** 链接进入 `ratings` 服务的详情视图。这也可以通过右键点击 `ratings` 服务节点并从上下文菜单中选择 `Details` 来完成。
|
||||
|
||||
1. 从 **Action** 下拉菜单中,选择 **Create Weighted Routing** 以访问加权路由向导。
|
||||
1. 从 **Action** 下拉菜单中,选择 **Traffic Shifting** 以流量转移向导。
|
||||
|
||||
{{< image width="80%" link="./kiali-wiz2-ratings-service-action-menu.png" caption="Service Action Menu" >}}
|
||||
{{< image width="80%" link="./kiali-wiz2-ratings-service-action-menu.png" caption="Service Actions Menu" >}}
|
||||
|
||||
1. 拖动滑块以指定要路由到每个服务的流量百分比。
|
||||
对于 `ratings-v1`,将其设置为 10%;对于 `ratings-v2` ,请将其设置为 90%。
|
||||
|
||||
{{< image width="80%" link="./kiali-wiz3-weighted-routing-wizard.png" caption="Weighted Routing Wizard" >}}
|
||||
{{< image width="80%" link="./kiali-wiz3-traffic-shifting-wizard.png" caption="Weighted Routing Wizard" >}}
|
||||
|
||||
1. 单击 **Create** 按钮以创建新的路由。
|
||||
1. 点击 **Preview** 按钮以查看将由向导生成的 YAML。
|
||||
|
||||
1. 点击左侧导航栏中的 **Graph** 以返回到 `bookinfo` 图表。
|
||||
{{< image width="80%" link="./kiali-wiz3b-traffic-shifting-wizard-preview.png" caption="Routing Wizard Preview" >}}
|
||||
|
||||
1. 点击 **Create** 按钮以确认应用新的流量设置。
|
||||
|
||||
1. 点击左侧导航栏中的 **Graph** 以返回到 `bookinfo` 图表。注意现在 `ratings` 服务节点带有 `virtual service` 图标。
|
||||
|
||||
1. 发送请求到 `bookinfo` 应用程序。例如,要每秒发送一个请求,如果您的系统上装有 `watch`,则可以执行以下命令:
|
||||
|
||||
|
@ -224,14 +140,14 @@ $ oc patch clusterrole kiali -p '[{"op":"add", "path":"/rules/-", "value":{"apiG
|
|||
|
||||
1. 几分钟后,您会注意到流量百分比将反映新的流量路由,从而确认您的新流量路由已成功将所有流量请求的 90% 路由到 `ratings-v2`。
|
||||
|
||||
{{< image width="80%" link="./kiali-wiz4-ratings-weighted-route-90-10.png" caption="90% Ratings Traffic Routed to ratings-v2" >}}
|
||||
{{< image width="80%" link="./kiali-wiz4-traffic-shifting-90-10.png" caption="90% Ratings Traffic Routed to ratings-v2" >}}
|
||||
|
||||
## 验证 Istio 配置{#validating-Istio-configuration}
|
||||
|
||||
Kiali 可以验证您的 Istio 资源,以确保它们遵循正确的约定和语义。根据错误配置的严重程度,在 Istio 资源的配置中检测到的任何问题都可以标记为错误或警告。有关 Kiali 执行的所有验证检查的列表,请参考 [Kiali Validations page](https://kiali.io/docs/features/validations/)。
|
||||
Kiali 可以验证您的 Istio 资源,以确保它们遵循正确的约定和语义。根据错误配置的严重程度,在 Istio 资源的配置中检测到的任何问题都可以标记为错误或警告。有关 Kiali 执行的所有验证检查的列表,请参考 [Kiali Validation 页面](https://kiali.io/docs/features/validations/)。
|
||||
|
||||
{{< idea >}}
|
||||
Istio 1.4 引入了 `istioctl analyze`,它使您能够以在 CI 管道中使用的方式执行类似的分析。
|
||||
Istio 提供了 `istioctl analyze`,它使您能够以在 CI 管道中使用的方式执行类似的分析。这两种方法可以互为补充。
|
||||
{{< /idea >}}
|
||||
|
||||
强制对服务端口名称进行无效配置,以查看 Kiali 如何报告验证错误。
|
||||
|
@ -242,7 +158,7 @@ Istio 1.4 引入了 `istioctl analyze`,它使您能够以在 CI 管道中使
|
|||
$ kubectl patch service details -n bookinfo --type json -p '[{"op":"replace","path":"/spec/ports/0/name", "value":"foo"}]'
|
||||
{{< /text >}}
|
||||
|
||||
1. 通过单击左侧导航栏上的 **Services**,导航到 **Services** 列表。
|
||||
1. 通过点击左侧导航栏上的 **Services**,导航到 **Services** 列表。
|
||||
|
||||
1. 如果尚未选择,请从 **Namespace** 下拉菜单中选择 `bookinfo`。
|
||||
|
||||
|
@ -250,7 +166,7 @@ Istio 1.4 引入了 `istioctl analyze`,它使您能够以在 CI 管道中使
|
|||
|
||||
{{< image width="80%" link="./kiali-validate1-list.png" caption="Services List Showing Invalid Configuration" >}}
|
||||
|
||||
1. 单击 **Name** 列中的 **details** 链接,以导航到服务详细信息视图。
|
||||
1. 点击 **Name** 列中的 **details** 链接,以导航到服务详细信息视图。
|
||||
|
||||
1. 将鼠标悬停在错误图标上可以显示描述错误的提示。
|
||||
|
||||
|
@ -268,69 +184,53 @@ Istio 1.4 引入了 `istioctl analyze`,它使您能够以在 CI 管道中使
|
|||
|
||||
Kiali 提供了一个 YAML 编辑器,用于查看和编辑 Istio 配置资源。当检测到错误的配置时,YAML 编辑器还将提供验证消息。
|
||||
|
||||
1. 创建 Bookinfo 目标规则:
|
||||
1. 在 `bookinfo` VirtualService 中引入一个错误。
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl apply -f @samples/bookinfo/networking/destination-rule-all.yaml@
|
||||
$ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway-invalid"}]'
|
||||
{{< /text >}}
|
||||
|
||||
1. 单击左侧导航栏上的 `Istio Config` 以导航到 Istio 配置列表。
|
||||
1. 点击左侧导航栏上的 `Istio Config` 以导航到 Istio 配置列表。
|
||||
|
||||
1. 如果尚未选择,请从 **Namespace** 下拉菜单中选择 `bookinfo`。
|
||||
|
||||
1. 请注意错误消息以及错误警告图标,它们会警告您一些配置问题。
|
||||
|
||||
{{< image width="80%" link="./kiali-istioconfig0-errormsgs.png" caption="Istio Config List Incorrect Configuration Messages" >}}
|
||||
{{< image width="80%" link="./kiali-istioconfig0-errormsgs.png" caption="Istio Config List Incorrect Configuration" >}}
|
||||
|
||||
1. 将鼠标悬停在 `details` 行的 **Configuration** 列中的错误图标上,以查看其他消息。
|
||||
1. 在 `bookinfo` 行的 **Configuration** 列中点击错误图标,导航到 `bookinfo` 虚拟服务视图。
|
||||
|
||||
{{< image width="80%" link="./kiali-istioconfig1-tooltip.png" caption="Istio Config List Incorrect Configuration Tool Tips" >}}
|
||||
1. 预先选中 **YAML** 页签。请注意验证检查通知已关联的行颜色会突出显示且具有特别的图标。
|
||||
|
||||
1. 单击 **Name** 列中的 **details** 链接,以导航到 `details` 目标规则视图。
|
||||
{{< image width="80%" link="./kiali-istioconfig3-details-yaml1.png" caption="YAML Editor Showing Validation Notifications" >}}
|
||||
|
||||
1. 请注意消息和图标,它们提醒您一些失败的验证规则。
|
||||
|
||||
{{< image width="80%" link="./kiali-istioconfig2-details-errormsgs.png" caption="Istio Configuration Details View Showing Errors" >}}
|
||||
|
||||
1. 单击 **YAML** 选项卡以查看此 Istio 目标规则资源的 YAML。
|
||||
|
||||
1. 请注意未通过验证检查的行颜色会突出显示和异常图标。
|
||||
|
||||
{{< image width="80%" link="./kiali-istioconfig3-details-yaml1.png" caption="YAML Editor Showing Validation Errors and Warnings" >}}
|
||||
|
||||
1. 将鼠标悬停在黄色图标上可以查看工具提示消息,该消息提示您触发了警告的验证检查。
|
||||
有关警告起因和解决方法的更多详细信息,请在 [Kiali Validations page](https://kiali.io/docs/features/validations/) 上查找验证警告消息。
|
||||
|
||||
{{< image width="80%" link="./kiali-istioconfig3-details-yaml2.png" caption="YAML Editor Showing Warning Tool Tip" >}}
|
||||
|
||||
1. 将鼠标悬停在红色图标上可以查看工具提示消息,该消息提示您触发错误的验证检查。有关错误原因和解决方法的更多详细信息,请在 [Kiali Validations page](https://kiali.io/docs/features/validations/) 上查找验证错误消息。
|
||||
1. 将鼠标悬停在红色图标上可以查看工具提示消息,该消息提示您验证检查触发了错误。
|
||||
有关错误起因和解决方法的更多详细信息,请在 [Kiali Validation 页面](https://kiali.io/docs/features/validations/)上查找验证错误消息。
|
||||
|
||||
{{< image width="80%" link="./kiali-istioconfig3-details-yaml3.png" caption="YAML Editor Showing Error Tool Tip" >}}
|
||||
|
||||
1. 删除目标规则,使 `bookinfo` 返回其原始状态。
|
||||
1. 将虚拟服务 `bookinfo` 重置为其原始状态。
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl delete -f samples/bookinfo/networking/destination-rule-all.yaml
|
||||
$ kubectl patch vs bookinfo -n bookinfo --type json -p '[{"op":"replace","path":"/spec/gateways/0", "value":"bookinfo-gateway"}]'
|
||||
{{< /text >}}
|
||||
|
||||
## 关于 Kiali Public API{#about-the-Kiali-Public-API}
|
||||
## 更多特性{#additional-features}
|
||||
|
||||
要生成代表图表和其他指标,运行状况和配置信息的 JSON 文件,您可以访问
|
||||
[Kiali Public API](https://www.kiali.io/api)。
|
||||
例如,将浏览器指向 `$KIALI_URL/api/namespaces/graph?namespaces=bookinfo&graphType=app` 以使用 `app` 图形类型获取图形的 JSON 表示形式。
|
||||
除了本文所述的查看特性外,Kiali 还有许多特性,例如[集成 Jaeger 跟踪](https://kiali.io/docs/features/tracing/)。
|
||||
|
||||
Kiali Public API 建立在 Prometheus 查询之上,并且取决于标准的 Istio 度量配置。
|
||||
它还会调用 Kubernetes API 以获取有关您的服务的其他详细信息。
|
||||
为了获得使用 Kiali 的最佳体验,请在应用程序组件上使用元数据标签 `app` 和 `version`。作为模板,Bookinfo 示例应用程序遵循此约定。
|
||||
有关这些更多特性的详细信息,请参阅 [Kiali 文档](https://kiali.io/docs/features/)。
|
||||
|
||||
若想深度探索 Kiali,建议演练一遍 [Kiali 教程](https://kiali.io/docs/tutorials/)。
|
||||
|
||||
## 清理{#cleanup}
|
||||
|
||||
如果您不计划任何后续任务,请从群集中删除 Bookinfo 示例应用程序和 Kiali。
|
||||
如果您不计划任何后续任务,请从集群中删除 Bookinfo 示例应用程序和 Kiali。
|
||||
|
||||
1. 要删除 Bookinfo 应用程序,请参阅 [Bookinfo cleanup](/zh/docs/examples/bookinfo/#cleanup) 说明。
|
||||
1. 要删除 Bookinfo 应用程序,请参阅 [Bookinfo 清理](/zh/docs/examples/bookinfo/#cleanup)说明。
|
||||
|
||||
1. 要从 Kubernetes 环境中删除 Kiali,请删除所有带有 `app=kiali` 标签的组件:
|
||||
1. 要从 Kubernetes 环境中删除 Kiali:
|
||||
|
||||
{{< text bash >}}
|
||||
$ kubectl delete all,secrets,sa,configmaps,deployments,ingresses,clusterroles,clusterrolebindings,customresourcedefinitions --selector=app=kiali -n istio-system
|
||||
$ kubectl delete -f {{< github_file >}}/samples/addons/kiali.yaml
|
||||
{{< /text >}}
|
||||
|
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 140 KiB |
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 44 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 67 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 84 KiB |
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 91 KiB |
Before Width: | Height: | Size: 68 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 89 KiB |
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 79 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 43 KiB After Width: | Height: | Size: 68 KiB |
Before Width: | Height: | Size: 111 KiB After Width: | Height: | Size: 154 KiB |
After Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 45 KiB |
After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 39 KiB |
After Width: | Height: | Size: 19 KiB |