目前来说, Kubernetes 部署及管理应用程序的接口仍然相当复杂,在维护较多的资源时,用户必然会受困于其复杂多变的资源配置清单,
Helm 通过Charts 实现了类似于yum 或apt-get等程序包管理器的功能,大大降低了用户的使用成本。
下面通过Helm部署日志系统:
1.概述
关于系统日志收集处理方案,其实有很多种,因为之前使用ES比较多,所以也认为ELK是一个不错的解决方案,ELK(Elasticsearch + Logstash + Kibana)来管理日志。
Kubernetes 也要实现在整个集群级别收集和聚合日志,以便用户可以从单个仪表板监控整个集群,其常用的架构形式之一
一种流行的开源解决方案是将fluentd 作为节点级代理程序进行日志采集,并将之聚合存储于Elasticsearch 进行日志分析,以及通过Kibana 进行数据可视化。
Logstash是一个具有实时渠道能力的数据收集引擎,但和fluentd相比,它在效能上表现略逊一筹,故而逐渐被fluentd取代,并组合为EFK 。
EFK由ElasticSearch、Fluentd和Kiabana三个开源工具组成。
其中Elasticsearch是一款分布式搜索引擎,能够用于日志的检索
Fluentd是一个实时开源的数据收集器,
Kibana 是一款能够为Elasticsearch 提供分析和可视化的 Web 平台。
这三款开源工具的组合为日志数据提供了分布式的实时搜集与分析的监控系统。
在Kubernetes 上部署fluentd 和Kibana 的方式易于实现
1.fluentd由DaemonSet 控制器部署于集群中的各节点
2.Kibana则由Deployment控制器部署并确保其持续运行即可。
3.ElasticSearch是一个有状态的应用,需要使用Statefu!Set
控制器创建并管理相关的Pod 对象,而且它们还分别需要专用的持久存储系统存储日志数据,因此,其部署过程较之前两者要略为烦琐,
其部署架构如图
2.部署方式
1.K8s 项目在其Addons 目录中提供了资源配置清单用于部署EFK
2.Kubeapps ( https: //hub.kubeapps.com )为此三者分别提供了相应的Charts帮助用户通过Helm 轻松完成其部署
Helm方式部署EFK
在安装之前可以测试安装过程
如:helm install --name myapp local/myapp --dry-run --debug 查看输出的内容是否符合要求
1.查看相应的chart安装包
[root@k8s-master ~]# helm repo list
NAME URL
local http://127.0.0.1:8879/charts
stable https://kubernetes-charts.storage.googleapis.com
incubator https://kubernetes-charts-incubator.storage.googleapis.com/
注: 可以通过helm repo add 增加仓库,当然也可以删除仓库
[root@k8s-master helm]# helm search elasticsear|egrep elas|awk '{print $1}'
incubator/elasticsearch
incubator/elasticsearch-curator
incubator/fluentd-elasticsearch
stable/elasticsearch
stable/elasticsearch-curator
stable/elasticsearch-exporter
stable/fluentd-elasticsearch
stable/elastabot
stable/elastalert
[root@k8s-master helm]# helm search kibana|egrep kibana
stable/kibana 3.0.0 6.7.0 Kibana is an open source data visualization plugin for El...
当然可以通过https: //hub.kubeapps.com 这个网站搜索相应的软件包
我这边安装稳定版,先下载下来,然后解压
helm fetch stable/elasticsearch
helm fetch stable/fluentd-elasticsearch
helm fetch stable/kibana
[root@ helm]# ls
elasticsearch elasticsearch-1.28.0.tgz fluentd-elasticsearch fluentd-elasticsearch-2.0.7.tgz kibana kibana-3.0.0.tgz
注:这里关注一下helm es 和kibana 的版本,必须一致
1.修改ES默认的values.yaml文件符合自己的安装环境
这里修改的内容大概如下:
需要特别说明的是,未明确定义持久存储使用的存储类时,无须持久保存数据,或者
无可用的实现动态供给PV 的存储时, 也可以使用empty Dir 存储卷,实现方法是将上面示
例中master.persistence.enabled 和data. persistence.enabled 配置参数的值分别设置为“ false ”
master 节点的PVC 存储卷大小都是4Gi data节点的PVC 存储卷大小均为30Gi
rbac 相关的各资源创建为禁用状态。部署于生产环境时,默认设置中的资源请求和资源限制,以及data 节点的PVC 存储卷空间等较小
在启用了rbac 授权插件的集群中还需要创建elasticsearch 所需要的各ClusterRole 及ClusterRoleBinding 资源。
这些需要自定义的配置参数可以通过values 文件进行设置,或者直接由helm install 命令的 --set选项来实现
通过上面的方式修改好文件以后,接下来就是通过helm 命令来安装软件包
这些资源默认都安装到一个独立的名称空间,提前创建好
kubectl create narnespace logs
修改好的文件重新打包到本地(注:把之前的包移动到其他地方)
helm package elasticsearch
Successfully packaged chart and saved it to: /data/helm/elasticsearch-1.28.0.tgz
在另一个终端开启本地仓库服务
# helm serve
Regenerating index. This may take a moment.
Now serving you on 127.0.0.1:8879
# helm search local
NAME CHART VERSION APP VERSION DESCRIPTION
local/elasticsearch 1.28.0 6.7.0 Flexible and powerful open source, distributed real-time ...
安装ES
#helm install --name els --namespace=logs local/elasticsearch
# kubectl get pods -n logs |egrep els
els-elasticsearch-client-b57d4645b-b5s9n 1/1 Running 0 125m
els-elasticsearch-client-b57d4645b-f5zt5 1/1 Running 0 125m
els-elasticsearch-data-0 1/1 Running 0 125m
els-elasticsearch-data-1 1/1 Running 0 93s
els-elasticsearch-master-0 1/1 Running 0 125m
els-elasticsearch-master-1 1/1 Running 0 124m
els-elasticsearch-master-2 1/1 Running 0 123m
这一步可能有些环境资源有限,启动慢,或者可以通过修改文件,少启动几个POD
接下来我们测试一下
helm status els
els-elasticsearch-client.logs.svc 这个是提供给的集群访问地址
kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh
/ # nslookup els-elasticsearch-client.logs.svc
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local
Name: els-elasticsearch-client.logs.svc
Address 1: 10.108.12.35 els-elasticsearch-client.logs.svc.cluster.local
/ # curl http://els-elasticsearch-client.logs.svc:9200 #不知道为什么CURL 的时候就解析不到了
curl: (6) Couldn't resolve host 'els-elasticsearch-client.logs.svc'
/ # curl http://els-elasticsearch-client.logs.svc.cluster.local:9200 #换成完整的地址测试
{
........
"tagline" : "You Know, for Search"
}
可以看到我们的ES 安装完成了,可以使用了
为了节省资源,推荐另一种测试方式
kubectl patch svc els-elasticsearch-client -n logs -p '{"spec":{"type":"NodePort"}}'
# kubectl get svc -n logs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
els-elasticsearch-client NodePort 10.108.12.35 <none> 9200:30116/TCP 134m
2.修改fluentd-elasticsearch文件
fluentd 是运行于各节点上的日志采集代理,因此它受控于DaemonSet 控制器。
基于此Charts部署fluentd时通常仅需为其指定Elastic Search 服务的访问接口即可
不过,若需要收集master 节点上的日志就需要为部署的Pod对象添加tolerations 以容忍master 上的taints
一共有两个地方可以修改
当然如果不想收集MASTER日志可以通过下面简单的命令安装
helm install stable/fluentd-elasticsearch --namespace=logs --set elasticsearch.host="els-elasticsearch-client.logs.svc.cluster.local”
注:这里面涉及到一个镜像gcr.io/google-containers/fluentd-elasticsearch:v2.3.2,国内网络无法访问,通过下面方式在各节点部署
docker pull mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2
docker tag mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2 gcr.io/google-containers/fluentd-elasticsearch:v2.3.2
docker rmi mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2
# helm package fluentd-elasticsearch
Successfully packaged chart and saved it to: /data/helm/fluentd-elasticsearch-2.0.7.tgz
#helm install --name flu --namespace=logs local/fluentd-elasticsearch
# kubectl get pod -n logs |egrep flu
flu-fluentd-elasticsearch-7p9l6 1/1 Running 0 143m
flu-fluentd-elasticsearch-gzflr 1/1 Running 0 143m
可以看到ES服务上面有相应的索引文件了
命令结果中显示出以“ logstash-YYYY.MM.DD ”格式命名的索引列表,即表示fluentd已经能够正常采集到日志数据并输出到指定的Elastic Search 集群中。
3.修改kibana文件
Kibana 是Elastic Search 的数据分析及可视化平台, 能够用来搜索、查看存储在ElasticSearch索引中的数据。
它可以通过各种图表进行高级数据分析及展示,用户基于Web GUI可以快速创建仪表板( dashboard )实时显示ElasticSearch 的查询结果。
Kibana 配置过程简单便捷, 图形样式丰富,可借助于ElasticSearch 创建柱形图、折线图、散点图、直方图、饼图和地图等数据展示接口。
Kibana 增强了ElasticSearch 的数据分析能力,让用户能够更加智能地分析数据和展示数据
Kibana 是Elastic Search 的数据分析及可视化平台, 能够用来搜索、查看存储在ElasticSearch索引中的数据。
它可以通过各种图表进行高级数据分析及展示,用户基于Web GUI可以快速创建仪表板( dashboard )实时显示ElasticSearch 的查询结果。
Kibana 配置过程简单便捷, 图形样式丰富,可借助于ElasticSearch 创建柱形图、折线图、散点图、直方图、饼图和地图等数据展示接口。
Kibana 增强了ElasticSearch 的数据分析能力,让用户能够更加智能地分析数据和展示数据。
类似于fluentd , Kibana也通过URL 访问ElasticS earch但它要通过环境变量ELASTIC-仅供If:商业用法峡交流学习使用
部署于Kubernetes 上的Kibana 一般会由集群外的客户端访问,因此需要为其配置Ingress 资源,也可以使用NodePort 或LoadBalancer类型的Service 资源进行服务暴露。
默认通过HTTP 提供服务,在使用Ingress 暴露到互联网时,建议将其配置为HTTPS 类型的服务。
下面是valus.yaml修改的部分:
修改ES 的访问路径
让节点网络可以访问
#helm package kibana
Successfully packaged chart and saved it to: /data/helm/kibana-3.0.0.tgz
#helm install --name kibana --namespace=logs local/kibana
#kubectl get pods -n logs |egrep kib
kibana-f69f88748-tvz2r 1/1 Running 0 30s
# kubectl get svc -n logs |egrep kibana
kibana NodePort 10.98.143.243 <none> 443:32580/TCP 18h
创建好索引模式之后,即可通过“ Discover ”搜索数据,或者在“ Visualize ”界面中定义可视化图形,并将它们集成于可在“ Dashboard ”中创建的仪表板里
发现状态良好,可以使用了
这样就可以看到饼图了,更详细的图形配置和数据展示,请通过相关资料自行学习去,这边不在详细介绍了
参考文章:https://www.cnblogs.com/cjsblog/p/9476813.html
总结:本章详细讲解了Helm 的使用方式,并通过示例演示了其使用方法,大大降低了用户的使用k8s成本,不用自己编写配置清单,通过其他Chart文件,修改相应的参数,实现自己相符环境的部署。
所有评论(0)