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
登陆:设置密码
设定server的url:
此操作会在每个node上安装cattle-node-agent的pod;
每个pod都需要正确解析此server的url,如果不能解析,则此pod的状态为CrashLoopBackOff;
建议此server url可以被内网或者公网的DNS所解析;(如果没有,则可通过patch的方式暂时解决)
未正确解析server url的状态:
通过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
注意:如果是通过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代理后是不需要此端口的:
修改为:把端口去掉
然后把上面patch的ip,换为nginx代理的ip即可;
登陆后:稍等几分钟,状态将会变为Active
开始从集群中获取信息:
到此,rancher已成功管理k8s集群!