k8s的自有的dashboard太过丑陋,目前比较流行的k8s WebUI界面有Rancher;

本文将介绍:如何使用Helm在k8s集群上安装rancher!

本文是在踩无数坑之后的总结,让你少走弯路!看似不多的总结,花费了好几天时间才搞定;

官方参考文档https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/ha-install/helm-rancher/tcp-l4/rancher-install/

注:建议以官方参考文档为准,目前官方的文档已经很详细了(之前不太详细)

安装前约定:

    1. 使用的版本为rancher稳定版

    2. ingress-nginx:k8s集群使用ingress-nginx作为代理(测试traefik,rancher web无法访问)

    3. cert-manager:安装此helm(看后边介绍)

    4. rancher用helm管理,只能使用https的方式,http的方式将无法访问,要配置ssl证书;

第一步:安装rancher的helm仓库

helm repo add rancher-stable https://releases.rancher.com/server-charts/stable

#helm repo list
NAME          	URL                                                       
stable        	https://kubernetes-charts.storage.googleapis.com          
local         	http://127.0.0.1:8879/charts                              
incubator     	https://kubernetes-charts-incubator.storage.googleapis.com
bitnami       	https://charts.bitnami.com                                
rancher-stable	https://releases.rancher.com/server-charts/stable

第二步:安装cert-manager的helm chart仓库(需要科学-上网)

Rancher依靠来自官方Kubernetes Helm图表存储库的cert-manager版本v0.5.2来发布Rancher自己生成的CA的证书或请求Let的加密证书。

helm install stable/cert-manager --name cert-manager --namespace kube-system --version v0.5.2

#helm list
NAME        	REVISION	UPDATED                 	STATUS  	CHART              	APP VERSION	NAMESPACE    
cert-manager	1       	Mon May 20 22:32:19 2019	DEPLOYED	cert-manager-v0.5.2	v0.5.2     	kube-system

如果不安装cert-manager将会报如下错误:

Error: validation failed: unable to recognize "": no matches for kind "Issuer" in version "certmanager.k8s.io/v1alpha1"

第三步:使用自签名或者权威SSL证书安装Rancher server

权威证书参考:https://www.cnrancher.com/docs/rancher/v2.x/cn/installation/ha-install/helm-rancher/tcp-l4/rancher-install/

自签证书参考:https://www.cnrancher.com/docs/rancher/v2.x/cn/install-prepare/self-signed-ssl/#%E5%9B%9B-%E7%94%9F%E6%88%90%E8%87%AA%E7%AD%BE%E5%90%8D%E8%AF%81%E4%B9%A6

本例使用的域名:rancher.staplescn.com

受信任客户的访问IP:10.78.99.34(如果有多个IP,以逗号隔开)

生成证书命令:./create_self-signed-cert.sh --ssl-domain=rancher.staplescn.com --ssl-trusted-ip=10.78.99.34

生成的没有此名字的证书:tls.key和tls.cry(如果有这2个证书,下面重命名的步骤可以省略)

重命名证书操作:

mv rancher.staplescn.com.key tls.key
mv rancher.staplescn.com.crt tls.crt

创建secret:

kubectl create ns cattle-system
kubectl -n cattle-system create secret tls tls-rancher-ingress --cert=./tls.crt --key=./tls.key
kubectl -n cattle-system create secret generic tls-ca --from-file=cacerts.pem

[root@ansible ssl]# kubectl get secret -n cattle-system | grep tls
tls-ca                       Opaque                                1      99m
tls-rancher-ingress          kubernetes.io/tls                     2      99m

第四步:通过helm安装rancher

helm install rancher-stable/rancher \
  --name rancher \
  --namespace cattle-system \
  --set hostname=rancher.staplescn.com \
  --set ingress.tls.source=secret \
  --set privateCA=true

为pod设置hosts,这样各pod才能通信,否则各pod无法通信,导致webUI不能正常访问;

注:本例中,10.10.5.157为最前端的nginx的ip,即ingress-nginx前边的nginx(加此代理的目的是访问是不用加端口)

kubectl patch deploy rancher -p '{"spec":{"template":{"spec":{"hostAliases":[{"ip":"10.10.5.157","hostnames":["rancher.staplescn.com"]}]}}}}' -n cattle-system

第五步:登陆WebUI

绑定本机hosts:10.10.5.217rancher.staplescn.com


登陆:设置密码

使用rancher管理现有的kubernetes集群_rancher


设定server的url:

    此操作会在每个node上安装cattle-node-agent的pod;

    每个pod都需要正确解析此server的url,如果不能解析,则此pod的状态为CrashLoopBackOff;

    建议此server url可以被内网或者公网的DNS所解析;(如果没有,则可通过patch的方式暂时解决)

使用rancher管理现有的kubernetes集群_rancher_02

未正确解析server url的状态:

使用rancher管理现有的kubernetes集群_rancher_03

通过patch的方式为控制器打补丁:

kubectl patch deploy cattle-cluster-agent -p '{"spec":{"template":{"spec":{"hostAliases":[{"ip":"10.10.5.217","hostnames":["rancher.staplescn.com"]}]}}}}' -n cattle-system

kubectl patch ds cattle-node-agent -p '{"spec":{"template":{"spec":{"hostAliases":[{"ip":"10.10.5.217","hostnames":["rancher.staplescn.com"]}]}}}}' -n cattle-system

使用rancher管理现有的kubernetes集群_k8s_04

注意:如果是通过nginx转发至ingress-nginx,则要修改控制器的CATTLE_SERVER环境变量;

    kubectl edit deploy cattle-cluster-agent -n cattle-system

    kubectl edit ds cattle-node-agent -n cattle-system


    默认CATTLE_SERVER为加端口的,增加nginx代理后是不需要此端口的:

    使用rancher管理现有的kubernetes集群_rancher_05

    修改为:把端口去掉

    使用rancher管理现有的kubernetes集群_rancher_06

    然后把上面patch的ip,换为nginx代理的ip即可;


登陆后:稍等几分钟,状态将会变为Active

使用rancher管理现有的kubernetes集群_rancher_07



开始从集群中获取信息:

使用rancher管理现有的kubernetes集群_k8s_08

到此,rancher已成功管理k8s集群!