Why Rancher + k3s + Istio?

Why Rancher

Rancher 是可以轻松地管理各种环境的 Kubernetes 成熟开源软件;使用 Rancher 节约资金和心智投入。

Why k3s

K3s 是轻量级的 Kubernetes 发行版,专为资源有限的环境打造;使用 k3s,避免落入 Kubernetes 启动后没有资源给业务服务使用的尬尴境地。 同时 k3s 的部署安装也较为简单,与 Rancher 同出一源,兼容性也有保障。

Why Istio

服务网格的优势无需赘述,而 Istio 是几个服务网格实现中目前使用范围较广的一个。 参考:Why use Istio?

安装 Rancher

安装 Rancher 之前需要先安装好 Docker,如果你的服务器在国内,还需要配置 Docker Hub 的镜像加速(可以使用阿里云镜像加速Azure CN Docker Registry Proxy Cache),本文不再赘述。

安装 Rancher Server

Rancher 的安装非常简单,指定数据存储的目录(挂载到/var/lib/rancher)和暴露的 HTTP / HTTPS 端口,一行命令直接完成:

docker run -d --name rancher-server -v /root/rancher/data:/var/lib/rancher -p 9080:80 -p 9443:443 --restart=unless-stopped --log-opt max-size=10m rancher/rancher:stable

根据机器性能,等候数秒到数十秒,就可以通过指定的 HTTPS 端口访问 Rancher Web UI 了,你也可以为 Rancher Web UI 配置额外的外部负载均衡进行访问。本例中 HTTPS 证书由 Rancher 自动生成。

设置管理密码

设置 Server URL

设置管理密码和 Server URL 后,安装就完成了。

Rancher

安装 k3s

Air Gap

如果服务器在国内,需要事先准备下载好 k3s 的可执行文件和 airgap 的镜像包。 从 k3s Release 下载对应文件,本例为 k3sk3s-airgap-images-amd64.tar

wget https://github.com/rancher/k3s/releases/download/v0.8.1/k3s
cp k3s /usr/local/bin/
chmod +x /usr/local/bin/k3s
wget https://github.com/rancher/k3s/releases/download/v0.8.1/k3s-airgap-images-amd64.tar
mkdir -p /var/lib/rancher/k3s/agent/images/
cp k3s-airgap-images-amd64.tar  /var/lib/rancher/k3s/agent/images/

同时还需要准备 pause 镜像。本例中是通过 AZure CN GCR Proxy Cache 下载的 k8s.gcr.io/pause:3.1

docker pull gcr.azk8s.cn/google_containers/pause-amd64:3.1
docker tag gcr.azk8s.cn/google_containers/pause-amd64:3.1 k8s.gcr.io/pause:3.1
docker rmi gcr.azk8s.cn/google_containers/pause-amd64:3.1

安装 k3s

同样一行命令安装 k3s:

curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--docker" sh -

安装 k3s

验证安装结果:

查看 nodes

查看 pods

导入集群

创建 Rancher 集群,获取导入命令

在 Rancher 中,点击“添加集群”,选择“导入现有的Kubernetes集群”,设置集群名称,点击“创建”。

添加集群

在创建完成页面中复制导入命令。本例使用的是自签名证书,因此复制最后一个命令。 如果不小心错过了这个界面,可以在集群页面点击右侧的三个点,然后点击“升级”(Update),就可以再次看到集群导入命令。

复制导入命令

在导入命令执行成功之前, Rancher 中此集群的状态会保持在 Pending 状态。

集群列表

集群 Pending 状态

执行导入命令

在集群 Master 节点的执行导入命令,导入 k3s 集群到 Rancher。

执行导入命令

执行导入命令后,集群状态短暂会变化为 Waiting

集群 Waiting 状态

待所有导入工作完成后,集群状态将变为 Active,至此,k3s 集群导入 Rancher 完成。

集群已导入

启动 Istio

在本文写作时,Rancher 中更方便的使用 Istio 的工具已经在 2.3.0 的预览版中出现。 本文可能不再更新,但诸位看官记得检查最新的工具和方法。

Air Gap

如果服务器在国内,下载镜像速度可能较慢。
Docker Hub 的镜像可以通过阿里云镜像加速Azure CN Docker Registry Proxy Cache 解决,在通过 Rancher 启动 Istio 时候还需要两个来自 Quay.io 的镜像 cert-manager-controllerhyperkube,也可以同样通过 Azure CN 的镜像解决。

docker pull quay.azk8s.cn/jetstack/cert-manager-controller:v0.3.1
docker tag quay.azk8s.cn/jetstack/cert-manager-controller:v0.3.1 quay.io/jetstack/cert-manager-controller:v0.3.1
docker rmi quay.azk8s.cn/jetstack/cert-manager-controller:v0.3.1
docker pull quay.azk8s.cn/coreos/hyperkube:v1.7.6_coreos.0
docker tag quay.azk8s.cn/coreos/hyperkube:v1.7.6_coreos.0 quay.io/coreos/hyperkube:v1.7.6_coreos.0
docker rmi quay.azk8s.cn/coreos/hyperkube:v1.7.6_coreos.0

打开应用商店

进入刚刚创建的集群的“Default”项目,选择应用商店。

应用商店

点击“启动”,找到“Istio”打开。

Istio

配置 Istio 并启动

出于测试目的,我们在跟踪选项中打开“Jaeger”和“Kiali”的外部访问,并在监控选项中开启“Grafana”。

配置跟踪选项

配置监控选项

然后点击“启动”,Rancher 将开始安装 Istio。

Istio 安装中

稍等片刻,Istio 安装完成。

Istio 安装完成

转到“工作负载”页面,可以看到 gatewaygalleycitadel(security)、 jaeger(tracing)、 sidecar-injectorgalleypilotmixer(policy)、 certmanagergrafanakialiprometheus 等组件已经在正常运行。

Istio 工作负载

如果要开启自动 sidecar 注入,还需要在集群中执行如下命令:

kubectl label namespace $your-namesapce istio-injection=enabled

配置负载均衡

Istio 中 Grafana 的外部访问需要单独配置。转到“负载均衡”页面,“添加Ingress规则”。

Istio 添加 Ingress 规则

Istio 负载均衡

此时就可以通过 Ingress 地址去访问 Jaeger / Kiali / Grafana 了。

Istio Kiali

Istio Grafana