1. helm 简介
1.1
移除 Tiller
helm3 移除了其服务器端组件,Tiller,现在完全没有代理。
Tiller 之前是一个运行在 Kubernetes 上的小型应用程序,它用于监听 Helm 命令并处理设置 Kubernetes 资源的实际工作。
helm3 使用与 kubectl 上下文相同的访问权限
无需再使用 helm init 来初始化 Helm
Release Name 位于命名空间中
分布式仓库以及 Helm Hub
Helm 命令可以从远程仓库安装 Chart。类似 docker hub
helm3 可以添加多个远程仓库,从远程仓库进行安装
helm3 命令可以直接在 Helm Hub 中寻找 Chart
JSON Schema 验证
从 Helm 3 开始,chart 维护者可以为输入值定义 JSON Schema。这一功能的完善十分重要,因为迄今为止你可以在 values.yaml 中放入任何你所需的内容,但是安装的最终结果可能不正确或出现一些难以理解的错误消息。
Helm 3 默认添加了针对 Kubernetes 对象的 OpenAPI 验证,这意味着发送到 Kubernetes API 的请求将会被检查是否正确。
helm3 相较与 helm2 命令行有些改变
2.
解压 tar 包。例如:
tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
找到文件夹中的 helm 二进制文件,将其拷贝到可执行目录中。例如:
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
给脚本可执行权限:
chmod 700 get_helm.sh
执行脚本:
helm 命令使用 tab 键补全
3. helm3 命令使用
3.1
kubernetes 官方的 package 的 helm 查询网站在:https://artifacthub.io/
仓库管理命令列表:
helm repo add
– 添加 chart 仓库helm repo add [NAME] [URL] [flags]
helm repo index
– 生成一个包含打包图表的目录的索引文件helm repo index [DIR] [flags]
helm repo list
– 查看 chart 仓库helm repo list [flags]
helm repo remove
– 删除一个或多个 chart 仓库helm repo remove [REPO1 [REPO2 ...]] [flags]
helm repo update
– 从 chart 仓库本地更新可用 chart 的信息helm repo update [flags]
注意:国内常用的仓库有
阿里云的源 : https://apphub.aliyuncs.com
微软 azure 的源 : http://mirror.azure.cn/kubernetes/charts/
实例:
添加 chart 仓库
查看 仓库
3.2 搜索相关软件 chart
helm search repo
: 从 repo仓库中搜索helm search repo [keyword] [flags]
helm search repo nginx
helm search hub
: 从 官方 https://hub.helm.sh 搜索软件包helm search hub [keyword] [flags]
3.3
helm pull
: 从仓库下载图表,并(可选地)将其解压缩到本地目录中。类似 docker pull,下载到本地。helm pull [chart URL | repo/chartname] [...] [flags]
helm install
: 可以直接安装,也可以下载下来后再安装helm install [NAME] [CHART] [flags]
有五种不同的方式可以安装的chart:
通过 仓库 安装:
helm install mymaria example/mariadb
通过一个打包好的 chart 文件:
helm install mynginx ./nginx-1.2.3.tgz
通过一个文件夹中的解压后的文件:
helm install mynginx ./nginx
通过网络路径安装:
helm install mynginx https://example.com/charts/nginx-1.2.3.tgz
通过指定repo仓库安装:
helm install --repo https://example.com/charts/ mynginx nginx
说明:
Chart.yaml
是 chart 的描述信息README.md
是此 chart 的帮助信息templates
values.yaml
里记录的是 chart 的各种信息,比如镜像是什么,root 密码是什么,是否使用持久性存储等
3.4 验证 yaml 文件格式
helm lint PATH [flags]
: 检查chart中可能出现的问题
3.5
注意: Release: 使用 Helm install 命令在 Kubernetes 集群中安装的 Chart 称为 Release
helm list [flags]
: list release默认情况下,它只列出已部署或失败的版本。
默认情况下,项目按字母顺序排序。使用 ‘-d’ 标志按发行日期排序。
如果提供了
--filter
标志,它将被视为一个过滤器。过滤器是应用于发布列表的正则表达式。只返回与筛选器匹配的项。
helm status RELEASE_NAME [flags]
: 显示 指定 release 的状态,状态信息包括:最后部署时间
k8s 命名空间
状态(可以是: unknown, deployed, uninstalled, superseded, failed, uninstalling, pending-install, pending-upgrade or pending-rollback)
这个版本包含的资源列表
最后一次测试套件运行细节
附加 notes 提供的chart
helm show all [CHART] [flags]
: 显示指定目录下 chart 的所有信息helm show chart [CHART] [flags]
: 显示指定目录下 chart 的定义,也就是 Chart.yaml 文件的内容helm show readme [CHART] [flags]
: 显示指定目录下 chart 的 readMe 信息,也就是 README.md 文件的内容helm show values [CHART] [flags]
3.6
3.7
3.8
3.9 卸载应用
helm uninstall RELEASE_NAME [...] [flags]
: 卸载指定应用
4. helm 搭建私有仓库
将自己写的包推送到私有仓库,有以下几个步骤:
搭建私有仓库
写好自己的 chart 文件
将 chart 文件打包
创建包的索引文件
搭建私有仓库
在一台新的机器上,搭建私有仓库,IP 地址为 10.113.69.133
首先使用的是 httpd 镜像,其实其他镜像也可以,例如 nginx
将本地目录 /k8s-proxy/helm-repo/ 映射到容器中
创建一个自定义文件夹,里面存放自定义的chart文件
创建 testechart,
helm create testchart
进行打包,
生成库的 index文件,其中 url 为 httpd 服务的地址,也就是 私有仓库的地址:
搜索复制到 node01 上的 charts 包
5. 使用 helm 安装 Prometheus
5.1 prometheus 架构简介
Prometheus 是一套开源的系统监控报警框架。
结构图:
注意:
Prometheus Server
:是 Prometheus 架构中的核心部分,负责实现对监控数据的获取、存储及查询。Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用 Service Discovery 的方式动态管理监控目标,并从这些监控目标中获取数据。
其次 Prometheus Server 本身也是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。
Prometheus Server 对外提供了自定义的 PromQL,实现对数据的查询以及分析。
Exporter
:是提供监控数据的来源。Exporter 分为两类:
一类 Exporter 直接内置了对 Prometheus 监控的支持,如 Kubernetes、etcd 等;
另一类是因为原有监控目标并不直接支持 Prometheus,需要通过 Prometheus 提供的 Client Library 编写该监控目标的监控采集程序,如 Mysql、JMX 等。
对于 Exporter,Prometheus Server 采用 pull 的方式来采集数据。
PushGateway
:同样是监控数据的来源。对于由于特定原因,如网络环境不允许等,Prometheus Server 不能直接与 Exporter 进行通信时,可以使用 PushGateway 来进行中转。
内部网络的监控数据主动 Push 到 Gateway 中,而和对 Exporter 一样,Prometheus Server 也利用 pull 的方式从 PushGateway 采集数据。
Alertmanager
:是 Prometheus 体系中的告警组件。在 Prometheus Server 中可以设定门限与警报规则。
当采集到的数据满足相关规则后,就会产生一条告警。
Alertmanager 从 Prometheus Server 接收到告警后,会根据事先设定的路径,向外发出告警。
常见的告警发送路径有:电子邮件、PagerDuty、Webhook、Slack 等。
Grafana
: 数据展示与输出。Prometheus Serve r有内置的 UI 用于展示采集到的监控数据。
在该 UI 上,可以通过各种内置的数学公式对原始数据进行加工,并通过图形化的方式展现出来。
当然,Prometheus Server 原生 UI 的展示方式还是比较基础和单薄,所以目前更多的是通过对接 Grafana 来进行数据的展示,可以得到更好的展示效果。
5.2
Prometheus Operator 架构图如下:
说明:
Operator
: 根据自定义资源(Custom Resource Definition / CRDs)来部署和管理 Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。Prometheus
:声明 Prometheus deployment 期望的状态,Operator 确保这个 deployment 运行时一直与定义保持一致。Prometheus Server
: Operator 根据自定义资源 Prometheus 类型中定义的内容而部署的 Prometheus Server 集群,这些自定义资源可以看作是用来管理 Prometheus Server 集群的 StatefulSets 资源。ServiceMonitor
:声明指定监控的服务,描述了一组被 Prometheus 监控的目标列表。该资源通过 Labels 来选取对应的 Service Endpoint,让 –Prometheus Server
通过选取的 Service 来获取 Metrics 信息。Service
Alertmanager
:定义 AlertManager deployment 期望的状态,Operator 确保这个 deployment 运行时一直与定义保持一致。
5.3 通过 helm 安装 Prometheus-operator
创建 Prometheus 专属的命名空间
查看安装是否完成
可以导入dashboard 的 json文件,来生成好看的界面,官网地址:https://grafana.com/grafana/dashboards
6. helm 安装日志管理
6.1 日志管理架构
ELK
Elasticsearch
: 是个开源分布式搜索引擎,存储日志及提供查询接口。Logstash
: 是一个完全开源的工具,他可以对日志进行收集发送给 Elasticsearch.Kibana
: 是一个开源和免费的 web 界面的工具,可以让用户浏览 Elasticsearch 里的日志.
注意:
logstash : 性能低,消耗资源,且存在不支持消息队列缓存及存在数据丢失的问题
因此 logstash 一般可以用 fluentd 或者 filebeat 替代为 EFK框架
6.2
日志管理系统的组件:
elasticsearch
FileBeat
FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash,官方也推荐此工具。
metricbeat
系统级监控。用于从系统和服务收集指标。从 CPU 到内存,从 Redis 到 Nginx
Metricbeat 能够以一种轻量型的方式,输送各种系统和服务统计数据。
可以获取系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据,以及获得如同系统上 top 命令类似的各个进程的统计数据。
步骤:
创建单独存放日志管理系统的 namespace,名为 efk-logger
添加官方 helm 源:
helm repo add elastic https://helm.elastic.co
搜索并且下载 elasticsearch ,下载好后,解压文件,
helm pull elastic/elasticsearch
修改默认的配置,values.yaml 文件中的内容
因为不准备使用持久性存储,所以这里把 persistence 下面的 enabled 值有 true 改为 false。
因为我们环境一台 master,3 台 worker,所以 replicas 修改为 3, minimumMasterNodes 修改为 1。
如果 镜像因为网络的原因下载不了,那就需要先下载镜像。
docker.elastic.co/elasticsearch/elasticsearch
安装 elasticsearch,
helm install elasticsearch .
查看安装状态,
搜索并且下载 filebeat ,下载好后,解压文件,
helm pull elastic/filebeat
修改默认的配置,values.yaml 文件中的内容
建议提前把所需镜像在所有节点上下载下来, 镜像为:
"docker.elastic.co/beats/filebeat"
安装 filebeat,
helm install filebeat .
查看 状态,
搜索并且下载 filebeat ,下载好后,解压文件,
helm pull elastic/metricbeat
修改默认的配置,values.yaml 文件中的内容
建议提前把所需镜像在所有节点上下载下来, 镜像为
docker.elastic.co/beats/metricbeat
安装 filebeat,
helm install metricbeat .
查看 状态,
搜索并且下载 filebeat ,下载好后,解压文件,
helm pull elastic/kibana
修改默认的配置,values.yaml 文件中的内容
建议提前把所需镜像在所有节点上下载下来, 镜像为
docker.elastic.co/beats/kibana
修改 kibana svc 的类型为 nodeport
安装 filebeat,
helm install kibana .
查看 状态,
博主你好,你的网站做得真好,可以跟你换个友链吗?