作者简介
陈正林,Rancher深度爱好者,多年互联网运维从业经验,负责过公司产品容器化项目,是DevOps和CI/CD践行者。博客地址:https://blog.zhenglin.work
Rancher提供了一个Charts应用商店(名为Catalog),让用户可以轻松地重复部署任何应用程序。Rancher应用商店可以理解为helm源或charts仓库;启用后,找到自己想要部署的应用,即可直接通过helm模板进行部署。在部署的时候,有些问答就是重置默认key-value配置的。

配置Rancher应用商店
全局启用、配置应用商店

在默认状态下,只开启基于Library源的应用商店,这个源由Rancher官方维护,稳定性较强。"Helm Stable"由helm官方维护,稳定性也不错,但没有针对Rancher进行优化;"Helm Incubator"由helm社区进行维护,稳定性一般。我们可以都设为enable后,进行使用。
项目中启用应用商店

直接点击【Launch】启用,启用后会发现很多应用的helm源(如下图)。

添加其他Charts仓库
可以添加自己私有Chart仓库、以及其他企业的(如阿里、elastic、bitnami)仓库到应用商店;

用户可以根据自己的情况灵活选择【全局、集群、项目】三个范围内的资源。如果添加为项目范围的,只能在此项目中使用此helm源(商店);如果使用私有helm源,则需要提供用户名和密码。
下面罗列了几个比较重要的charts仓库地址:
阿里charts仓库:
https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
bitnami:
https://charts.bitnami.com
elastic :
<https://helm.elastic.co
如果您想要添加elastic helm源:

在应用商店搜索elastic,您将会发现有很多Elastic-Helm可供选择。

话已至此,接下来开始实战演练。

实 战
利用Rancher应用商店搭建 elasticsearch+kibana+apm-server
在Rancher应用商店搜索所需应用
首先,在Rancher应用商店搜索efk;然后,我们选择来自Library,因为这个已经集成了elasticsearch+kibana+fluent;接着,点击【View Details】,进入配置自定义页面。

您可以指定命名空间,如果不指定就会部署到默认的efk中。
选项配置:
jvm也可以根据情况来调整 ,默认的512 m已经可以满足需求。如果想要调整到1g的话,那么在一台机器上运行多个实例会比较吃力,当然,如果机器性能好,可以适当调大一些。
使用默认镜像选择false后,就可以指定镜像,这里面镜像版本相对落后,可以从elastic官网镜像https://www.docker.elastic.co/#中获取到当前最新稳定版,然后填写进去(此处镜像名称和tag输入框不在一起)。这里不需要f(luent)就不启用,镜像名称也无需修改。

调整与完善
elasticsearch参数调整
自定义配置完成后点击【Launch】,待镜像都拉取完成后,根据提示继续完善和调整。这里面elasticsearch组件默认使用的是空数据,我们如果修改为持久卷的话 ,无论是主机映射,还是持久申明的卷,都要给777权限。

在本例中没有搭建存储平台,因此采用了本地Local Node Path做的持久卷(和主机目录映射差别不大),由于主机映射的目录只能被1个elasticsearch使用,所以在configmap中,变量discovery.zen.minimum_master_nodes 此处修改为1(这样处理之后把elasticsearch主机调度到一台机器上即可)。discovery.type = single-node 如果上个参数修改为1,discovery.zen.ping.unicast.hosts 这个配置在7.0版本后已经不建议使用了 ,可以去掉。
若继续使用默认的空数据卷,elasticsearch单pod也可以按照这种方式修改,具体环境变量参数如下图(在Resources-config maps中可以找到这些变量)

注:node.data=true 需要添加这个参数以避免多次安装出现的问题
kibana参数调整
首先查看对应镜像版本的说明文档:
https://www.elastic.co/guide/en/kibana/7.1/docker.html#environment-variable-config

然后和kibana的configmaps中定义环境变量参数进行对比。

若还想调整es和kibana日志,也可以在环境变量中设置:
kibana的设置:

es设置:
logger.org.elasticsearch.transport warn
部署apm-server
在应用商店搜索:apm-server,进入查看详情的页面,然后把此应用指定到和efk 应用同一个命名空间里。
apm-server 配置文件和环境变量的调整
到secrets(有的是config map)进行配置, 有个名称为apm-server.yml 的key,其value按照下图修改,把数据写入文件的配置改为写入到elasticsearch中。

另外,需要在环境变量中加入两个参数:

因为这是从应用商店安装的apm-server,默认把数据存到file,前面修改了输出为elasticsearch,这里再把输入到文件设为false(手动部署不需要进行此项操作,应用商店的需要检查一下)。
查看apm-server,进行验证


然后点击【Launch APM】,即可开始使用。根据页面提示把apm-agent 嵌入被测应用后,再查看apm-server采集到的数据。

若探针采集的数据已经发送,点击进去即可查看详细数据。
手动部署filebeat+metricbeat+packetbeat向es发送数据
部署filebeat
这一镜像详情里提供了Kubernetes部署的yaml,稍作修改就可以使用:
https://www.elastic.co/guide/en/beats/filebeat/版本号/running-on-kubernetes.html
下载所需的yaml后,修改命名空间到自己制定 ,直接在Rancher中部署完成后修改输出elasticsearch地址(config maps中),如果是在环境变量中定义elasticsearch地址,那么直接在环境变量中修改即可,这个视情况而定。
部署metricbeat
部署metricbeat有些复杂,官方提供了(具体下载根据版本情况)Kubernetes所需的yaml文件:
https://www.elastic.co/guide/en/beats/metricbeat/6.6/running-on-kubernetes.html
把官网提供的yaml下载下来后,用Rancher导入到kube-system空间中。会部署两个metricbeat,一个是daemonset,一个是deployment,deployment可以暂停。如果没有kube-state-metrics组件,因为此前设定了依赖关系,也会自动部署一个。
然后修改配置文件config-map :
第一个配置文件metricbeat.yml:设置抓取的信息要输入到正确的elasticsearch和kibana中。

或es输入直接设置为:
output.elasticsearch.hosts: ['${ELASTICSEARCH_HOST}']
把多余的变量删除掉,直接把ELASTICSEARCH_HOST 在环境变量中定义为 http://es_ip:port
第二个配置文件kubernetes.yml:

需注意,第一个hosts: ["localhost:10255"] 修改为hosts: ["https://${HOSTNAME}:10250"]
参照:
https://www.elastic.co/guide/en/beats/metricbeat/current/running-on-kubernetes.html红帽的配置方法
然后,把/etc/kubernetes/ssl/certs/serverca、/etc/kubernetes/ssl/kube-node.pem和/etc/kubernetes/ssl/kube-node-key.pem 在工作负载界面通过主机映射挂载进去即可 (如果没有这些证书文件,则无法从相关接口获取数据,这些文件都是用于鉴权的)。
最后在环境变量中把正确的es地址信息填写进去即可完成。
部署kube-state-metrics
如上图所用到kube-state-metrics的数据,会自动部署;但如果kube-state-metrics没有部署成功,后者提供的镜像有问题该如何解决呢?
我们可以从https://github.com/kubernetes/kube-state-metrics/blob/master/kubernetes/kube-state-metrics-deployment.yaml 找到正确的镜像文件名称,对照修改镜像名称为:quay.io/coreos/kube-state-metrics:v1.5.0 即可完成部署(现在可能为1.6版本)。这一地址也有部署需要的各种yaml文件,但需要注意不同的版本。
我们把 kube-state-metrics-service.yaml、kube-state-metrics-service-account.yaml、kube-state-metrics-deployment.yaml 等所有yaml文件下载下来,先导入SA(service-account)类的yaml,剩下的yaml再逐个导入。由于master版本无法确定具体的版本,建议选用release中的具体版本,再通过Rancher把这些yaml导入到系统空间"kube-system"。
yaml文件里面所包含的多个镜像仓库是谷歌的,如果您无法“科学上网”,可以换成其他公司的同名镜像:如,image: k8s.gcr.io/addon-resizer:1.8.3,也可以在dockerhub上搜到其他公司提供的image: siriuszg/addon-resizer:1.8.4,笔者没有搜索到1.8.3 就选用更高版本,1.8.4,一般原则是相同版本,然后选择dockerhub排名较高的镜像。
部署完成后,把kube-state-metrics的8080端口映射出来,我们通过浏览器访问进行验证:
访问kube-state-metrics页面会显示健康 "/health" 相关指标。
最终采集到的数据在kibana呈现验证:

部署:packetbeat
这一操作相对简单,官方提供了Docker的部署方式,您对照参数部署到Rancher即可:
https://www.elastic.co/guide/en/beats/packetbeat/current/load-kibana-dashboards.html

另外,还要增加--strict.perms=false -e -E output.elasticsearch.hosts=ip:port使数据发送到之前搭建的es里。
--net=host 在RancherUI对应的操作为:在networking模块把"Use Host's Network Namespace"设为真。

packetbeat是用于采集host(宿主)机器的数据,如果部署到容器中,有些数据可能抓取不到。解决这一问题,可能需要提权,也可以在RancherUI最后配置项"Add Capabilities" 里面把下面两项增加上。

经过多次验证,把如下文件挂载到容器,基本和在host(宿主)机器上部署packetbeat效果一样。

注意
把主机时间也要映射到所有的容器中,避免容器时间不一致导致的一系列问题。
推荐阅读
原创干货 | 将Rancher Catalog的Prometheus模板从Cattle环境转换到Kubernetes环境
About Rancher Labs
Rancher Labs由CloudStack之父梁胜创建。旗舰产品Rancher是一个开源的企业级Kubernetes管理平台,实现了Kubernetes集群在混合云+本地数据中心的集中部署与管理。Rancher一向因操作体验的直观、极简备受用户青睐,被Forrester评为2018年全球容器管理平台领导厂商,被Gartner评为2018年全球最酷的云基础设施供应商。
目前Rancher在全球拥有超过一亿的下载量,并拥有包括中国人寿、华为、中国平安、兴业银行、民生银行、平安证券、海航科技、厦门航空、上汽集团、海尔、米其林、丰田、本田、中船重工、中联重科、迪斯尼、IBM、Cisco、Nvidia、辉瑞制药、西门子、CCTV、中国联通、等全球著名企业在内的共25000家企业客户。





