使用Rancher导入k3s集群并启动Istio服务网格
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 后,安装就完成了。
安装 k3s
Air Gap
如果服务器在国内,需要事先准备下载好 k3s 的可执行文件和 airgap 的镜像包。
从 k3s Release 下载对应文件,本例为 k3s
和 k3s-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 -
验证安装结果:
导入集群
创建 Rancher 集群,获取导入命令
在 Rancher 中,点击“添加集群”,选择“导入现有的Kubernetes集群”,设置集群名称,点击“创建”。
在创建完成页面中复制导入命令。本例使用的是自签名证书,因此复制最后一个命令。 如果不小心错过了这个界面,可以在集群页面点击右侧的三个点,然后点击“升级”(Update),就可以再次看到集群导入命令。
在导入命令执行成功之前, Rancher 中此集群的状态会保持在 Pending
状态。
执行导入命令
在集群 Master 节点的执行导入命令,导入 k3s 集群到 Rancher。
执行导入命令后,集群状态短暂会变化为 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-controller
和 hyperkube
,也可以同样通过 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 并启动
出于测试目的,我们在跟踪选项中打开“Jaeger”和“Kiali”的外部访问,并在监控选项中开启“Grafana”。
然后点击“启动”,Rancher 将开始安装 Istio。
稍等片刻,Istio 安装完成。
转到“工作负载”页面,可以看到 gateway
、 galley
、 citadel
(security)、 jaeger
(tracing)、 sidecar-injector
、 galley
、 pilot
、 mixer
(policy)、 certmanager
、 grafana
、 kiali
、 prometheus
等组件已经在正常运行。
如果要开启自动 sidecar 注入,还需要在集群中执行如下命令:
kubectl label namespace $your-namesapce istio-injection=enabled
配置负载均衡
Istio 中 Grafana 的外部访问需要单独配置。转到“负载均衡”页面,“添加Ingress规则”。
此时就可以通过 Ingress 地址去访问 Jaeger / Kiali / Grafana 了。