Istio安装

安装前置条件

快速安装helm

VER=v2.16.1
wget https://mirror.azure.cn/kubernetes/helm/helm-$VER-linux-amd64.tar.gz
tar -xvf helm-$VER-linux-amd64.tar.gz
sudo mv linux-amd64/helm /usr/local/bin 
helm init --upgrade --tiller-image gcr.azk8s.cn/kubernetes-helm/tiller:$VER --stable-repo-url https://mirror.azure.cn/kubernetes/charts/

下载源码

下面是一个国内的同步仓库, 可以避免因为网速无法从Github下载的问题.

git clone https://gitee.com/mirrors/istio.git

然后, git tag 列出可用tag, 选择一个想要的tag并checkout:

git checkout -b v1.4.1 1.4.1

初始化CRD

Istio创建了大量的CRD定义, Istio将它们的安装工作单独放到一个目录中, 其实就相当于我们直接 kubectl apply -f ., 不过借助了helm, 可以指定一些变量.

cd install/kubernetes/helm/istio-init

这期间由于使用了gcr.io的镜像, 国内访问困难, 需要修改镜像地址. 打开 values.yaml, 修改其中的 global.hub字段, 将其改为使用 gcr.azk8s.cn:

global:
  # Default hub for Istio images.
  # Releases are published to docker hub under 'istio' project.
  # Dev builds from prow are on gcr.io
  hub: gcr.azk8s.cn/istio-testing

azk8s.cn是微软提供的一个镜像加速地址, 可以提供gcr.io, docker.io 这些镜像的国内加速, 比较安全可靠.

kubectl create ns istio-system
helm install . --name istio-init --namespace istio-system

安装Controller

一般的, CRD定义包括了CRD定义和Controller两部分.

在安装CRD定义之后, kube-api-controller仅能提供它们的基础CRUD, 并不能完成实际功能. Controller负责这些CRD资源的实际功能实现. 它们的 helm chart 存放在install/kubernetes/helm/istio 目录下.

cd ../istio

启用周边

values.yaml中包含了大量的配置项, 其中就包括了kiali/opentracing等, 如果你需要启用他们, 需要手动修改 enabled: true:

grafana:
  enabled: true
#
# addon prometheus configuration
#
prometheus:
  enabled: true
#
# addon jaeger tracing configuration
#
tracing:
  enabled: true
#
# addon kiali tracing configuration
#
kiali:
  enabled: true

默认的helm chart包含了Istio主要组件及prometheus等, 我们需要修改以下几个地方的镜像, 以提供加速:

./values.yaml:

global:
  # Default hub for Istio images.
  # Releases are published to docker hub under 'istio' project.
  # Dev builds from prow are on gcr.io
  hub: gcr.azk8s.cn/istio-testing

./charts/prometheus/values.yaml:

hub: dockerhub.azk8s.cn/prom

./charts/tracing/values.yaml:

jaeger:
  hub: dockerhub.azk8s.cn/jaegertracing
zipkin:
  hub: dockerhub.azk8s.cn/openzipkin

charts/kiali/values.yaml:

hub: quay.azk8s.cn/kiali

charts/grafana/values.yaml:

image:
  repository: dockerhub.azk8s.cn/grafana/grafana

修改完成后, 与Istio-init 一样, 安装即可:

helm install . --name istio --namespace istio-system

然后,开始观察Pod的启动情况:

watch kubectl -n istio-system get po

如果有Pod出现问题, 针对排错即可. 如果由于上面的镜像加速没配置好,导致安装阶段出现镜像拉取失败, 不必着急重装. 通过 kubectl -n istio-system get deploy 可以发现这一步安装的其实都是一些image, 如果哪一个镜像拉取失败, 我们可以直接 kubectl -n istio-system edit deploy xxxx

周边配置

默认情况下Kiali不会对外暴露端口, 可以简单点开放NodePort. 访问时会报告缺少secret, 可以这样创建一个 admin/admin的用户名/密码:

kubectl create secret generic kiali -n istio-system --from-literal "username=admin" --from-literal "passphrase=admin"

然后删除 Kiali 的Pod, 等待重新创建即可.