上一篇文章,我们简单介绍了基于IBM Kubernetes Service的最新版istio 1.5的部署,今天我们来学习下Istio 1.5的监控组件.
在Istio附件的1.5版本中,Prometheus、Grafana、Jaeger和Kiali监控组件包含在您的Istio安装中,但由于当前Istio社区版本中的安全问题,这些组件默认被禁用,要启用这些组件,请执行以下步骤。
1.修改ConfigMap: managed-istio-custom, 添加并保存:istio-monitoring: "true"
kubectl edit cm managed-istio-custom -n ibm-operators
修改后如下图所示:
2.将更改应用到Istio,此步骤可能需要10分钟才能生效。
kubectl annotate iop -n ibm-operators managed-istio --overwrite version="custom-applied-at: $(date)"
3.Grafana没有Secret会无法启动,一直在pending状态。所以要为Grafana创建Secret,按序执行下面3条命令。
GRAFANA_USERNAME=$(read -p 'Grafana Username: ' uval && echo -n $uval | base64)
GRAFANA_PASSPHRASE=$(read -p 'Grafana Passphrase: ' pval && echo -n $pval | base64)
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: grafana
namespace: istio-system
type: Opaque
data:
username: $GRAFANA_USERNAME
passphrase: $GRAFANA_PASSPHRASE
EOF
设定好的用户名和密码务必要记住。
4.暴露Grafana外部服务
kubectl expose deployment grafana -n istio-system --name=grafana-external --type=LoadBalancer --port=80 --target-port=3000
5.为Kiali提供一个Secret。Kiali是一个开源项目,它作为附加组件安装在Istio之上,使服务网格可视化。它提供了对微服务如何相互交互的更深入的了解,并提供了诸如断路器和服务请求费率等特性。我们后面的测试会用到。
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: kiali
namespace: istio-system
labels:
app: kiali
type: Opaque
data:
username: "YWRtaW4="
passphrase: "YWRtaW4="
EOF
6.暴露Kiali外部服务
kubectl expose deployment kiali -n istio-system --name=kiali-external --type=LoadBalancer --port=80 --target-port=20001
7. 最后,我们查看下Pod:kubectl get pod -n istio-system
在Kubernetes中,sidecar是pod中的通用容器,其目的是支持主容器。为了让Istio工作,Envoy proxy必须作为sidecar部署到deployment中的每个pod中。将istio sidecar注入到pod中有两种方法: 手动使用istioctl 命令行工具或使用Istio sidecar注入器自动注入。今天的练习中,我们将使用istio提供的自动注入。
我们将default命名空间启用istio自动注入:
kubectl label namespace default istio-injection=enabled
接下来我们要安装测试用到的应用程序:Guestbook App
git clone https://github.com/IBM/guestbook.git
切换到:cd guestbook/v2
首先安装Redis数据库和以及暴露的服务,数据库包含了一个主节点和两个从节点。
kubectl create -f redis-master-deployment.yaml
kubectl create -f redis-master-service.yaml
kubectl create -f redis-slave-deployment.yaml
kubectl create -f redis-slave-service.yaml
创建完成后查看一下:
kubectl get deployments
kubectl get svc
kubectl get pods
然后创建两个不同版本的应用:Guestbook v1和v2
kubectl apply -f ../v1/guestbook-deployment.yaml
kubectl apply -f guestbook-deployment.yaml
暴露Guestbook的服务:kubectl create -f guestbook-service.yaml
接着查看一下服务:kubectl get service guestbook -n default ,找到外部IP并复制到浏览器。
在浏览器中就能查看到刚才部署的留言簿应用。该服务将随机跳转到v1或v2版本。如果想看到一个不同的版本,需要进行硬刷新(mac上是cmd + shift + r, windows上是ctrl + f5),或者通过curl命令。
然后我们使用Kiali查看应用流量信息,先查一下前面创建的kiali外部服务
kubectl get svc/kiali-external -n istio-system
我的环境是 http://169.60.47.52/kiali/,刚才设置的secret,用户名和密码是:admin/admin。登录后就可以看到下图。
default命名空间我们看到了一个‘N/A’,表示这个命名空间还没有接入istio ingress gateway。
我们进入default,查看应用的版本视图,如果不是最近访问guestbook,可以切换下时间。
接下来看下Grafana外部服务IP
kubectl get svc/grafana-external -n istio-system
使用浏览器防范外部IP,然后用之前创建的Secret,用户名密码登录:
随后我们点击右上角的HOME,展开Istio的仪表板查看各类度量值,大部分是各类Istio组件的度量值,度量值都是通过Promethues来收集的。
突然发现目前Grafana的仪表板没有随着istio 1.5更新,仍然是1.4的组件。从Grafana官网上也没有找到istiod的Dashboard。
Istio Service和Istio workload是服务和负载的仪表板,主要是针对应用的,也是运维最为关心的。
最后我们进入“Istio workload”查看不同workload的度量值。
今天的关于Istio的监控管理就介绍到这里,下一篇我会重点介绍基于Istio 1.5的AB测试和金丝雀发布。