kubernetes应用的包管理Helm工具
helm简介
Helm是Kubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。
Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。
对于应用发布者而言
通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。
对于使用者而言
使用Helm后能以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序
部署helm
安装helm
# tar zxf /root/helm/helm-v3.15.4-linux-amd64.tar.gz
# cd /root/helm/linux-amd64/
# ls
# cp -p helm /usr/local/bin/
配置helm命令补齐
# echo "source <(helm completion bash)" >> ~/.bashrc
# source ~/.bashrc
# helm version 查看结果:
helm常用操作
create 创建一个 chart 并指定名字
dependency 管理 chart 依赖
get 下载一个 release。可用子命令:all、hooks、manifest、notes、values
history 获取 release 历史
install 安装一个 chart
list 列出 release
package 将 chart 目录打包到 chart 存档文件中
pull 从远程仓库中下载 chart 并解压到本地 # helm pull stable/mysql -- untar
repo 添加,列出,移除,更新和索引 chart 仓库。可用子命令:add、index、 list、remove、update
rollback 从之前版本回滚
search 根据关键字搜索 chart。可用子命令:hub、repo
show 查看 chart 详细信息。可用子命令:all、chart、readme、values
status 显示已命名版本的状态
template 本地呈现模板
uninstall 卸载一个 release
upgrade 更新一个 release
version 查看 helm 客户端版本
查询官方应用中心
# helm search hub nginx #在官方仓库中搜索
# helm search repo nginx #在本地仓库中搜索
管理第三方repo源
# helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts 【添加阿里云】
# helm repo add bitnami https://charts.bitnami.com/bitnami 【添加bitnami仓库】
# helm repo add miscro http://mirror.azure.cn/kubernetes/charts/ 【微软仓库】
# helm repo list 【查看仓库信息】
# helm search repo aliyun 【查看仓库存储helm清单】
# helm repo remove aliyun 【删除第三方存储库】
helm的使用方法
# helm search repo nginx 【查找chart】
# helm show chart bitnami/nginx 【查看chart信息】
安装chart 包
# helm install mariadb miscro/mariadb
# helm list 查看结果:
# kubectl get pods
# helm status mariadb 【查看项目的发布状态】
# helm uninstall mariadb 【卸载项目】
# helm list 查看结果:
安装项目前预定义项目选项
# helm pull bitnami/nginx
# docker load -i /root/nginx-1.27.1-debian-12-r2.tar
# docker tag bitnami/nginx:1.27.1-debian-12-r2 reg.timinglee.org/bitnami/nginx:1.27.1-debian-12-r2
# docker push reg.timinglee.org/bitnami/nginx:1.27.1-debian-12-r2
# cd ~
# tar zxf nginx-18.1.11.tgz
# cd nginx/
# vim values.yaml 【项目变量文件】
# helm install timinglee /root/nginx
# kubectl get svc
# kubectl get pods 查看结果:
# vim values.yaml 【更新变量文件】
# helm upgrade timinglee .
# kubectl get svc 查看结果:
# kubectl get ingress
# vim /etc/hosts
# curl www.timinglee.org
# helm history timinglee
# helm uninstall timinglee 【删除项目】
# helm list 查看结果:
构建helm中的chart包
Helm Chart目录结构
# helm create timinglee 【简历chart项目】
# tree timinglee/
构建方法
# cd /root/helm/linux-amd64/timinglee/
# vim Chart.yaml
# vim values.yaml
#更改内容
image:
repository: myapp
pullPolicy: IfNotPresent
tag: "v1"
ingress:
enabled: true
className: "nginx"
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: www.timinglee.org
paths:
- path: /
pathType: ImplementationSpecific
# helm lint . 检测查看:
# helm install timinglee .
# kubectl get deployments.apps
项目打包
# cd /root/helm/linux-amd64
# helm package timinglee/
# ls
项目可以通过各种分享方式发方为任何人后部署即可
# helm install timinglee timinglee-0.1.0.tgz
构建helm仓库
在harbor仓库中构建一个公开的项目
安装helm push插件
如果网络没问题情况下直接安装即可
# cd ~
# dnf install git -y
# helm plugin install https://github.com/chartmuseum/helm-push
离线安装
# mkdir -p ~/.local/share/helm/plugins/helm-push
# tar zxf helm-push_0.10.4_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push
# ls ~/.local/share/helm/plugins/helm-push
查看helm调用命令是否成功
# helm cm-push --help 查看结果:
上传项目到仓库
# helm repo add timinglee https://reg.timinglee.org/chartrepo/timinglee 【添加仓库】
为helm添加证书
# cp /etc/docker/certs.d/reg.timinglee.org/ca.crt /etc/pki/ca-trust/source/anchors/
# update-ca-trust 【更新本地ca认证库】
再次添加仓库
# helm repo add timinglee https://reg.timinglee.org/chartrepo/timinglee
上传本地项目
命令执行格式:helm cm-push <项目名称> <仓库名称> -u admin -p lee
# helm cm-push timinglee-0.1.0.tgz timinglee -u admin -p lee
查看项目上传情况
# helm search repo timinglee 【上传后数据未更新】
# helm repo update timinglee 【更新仓库】
# helm search repo timinglee 查看结果:
安装项目
# helm install timinglee timinglee/timinglee 【安装】
# curl www.timinglee.org 查看运行:
helm的版本迭代
从新构建新版本项目
# vim /root/helm/linux-amd64/timinglee/Chart.yaml
# vim /root/helm/linux-amd64/timinglee/values.yaml
# helm package timinglee
上传项目到helm仓库中
# helm cm-push timinglee-0.2.0.tgz timinglee -u admin -p lee
# helm repo update timinglee 【更新仓库】
# helm search repo timinglee -l 查看结果:
更新应用
# helm upgrade timinglee timinglee/timinglee
# curl http://www.timinglee.org/
显示项目版本
# helm history timinglee
应用回滚
# helm rollback timinglee
# helm history timinglee
# curl www.timinglee.org 查看运行:
Prometheus简介
Prometheus是一个开源的服务监控系统和时序数据库
其提供了通用的数据模型和快捷数据采集、存储和查询接口
它的核心组件Prometheus服务器定期从静态配置的监控目标或者基于服务发现自动配置的目标中进行拉取数据
新拉取到啊的 数据大于配置的内存缓存区时,数据就会持久化到存储设备当中
Prometheus架构
组件功能:
监控代理程序:如node_exporter:收集主机的指标数据,如平均负载、CPU、内存、磁盘、网络等等多个维度的指标数据。
kubelet(cAdvisor):收集容器指标数据,也是K8S的核心指标收集,每个容器的相关指标数据包括:CPU使用率、限额、文件系统读写限额、内存使用率和限额、网络报文发送、接收、丢弃速率等等。
API Server:收集API Server性能指标数据,包括控制队列的性能、请求速率和延迟时长等
etcd:收集etcd存储集群的相关指标数据
kube-state-metrics:该组件可派生出k8s相关多个指标数据,主要是资源类型相关的计数器和元数据信息,包括制定类型的对象总数、资源限额、容器状态以及Pod资源标签系列等。
每个被监控的主机都可以通过专用的`exporter`程序提供输出监控数据的接口,并等待`Prometheus`服务器周期性的进行数据抓取
如果存在告警规则,则抓取到数据之后会根据规则进行计算,满足告警条件则会生成告警,并发送到`Alertmanager`完成告警的汇总和分发
当被监控的目标有主动推送数据的需求时,可以以`Pushgateway`组件进行接收并临时存储数据,然后等待`Prometheus`服务器完成数据的采集
任何被监控目标都要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示
监控目标可以通过配置信息以静态形式指定,也可以让Prometheus通过服务发现的机制进行动态管理
在k8s中部署Prometheus
下载部署Prometheus所需资源
# helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
在helm中添加Prometheus仓库
# mkdir -p prometheus
# cd prometheus/
# tar zxf kube-prometheus-stack-62.6.0.tgz
# ls kube-prometheus-stack/
# tar zxf prometheus-adapter-4.11.0.tgz
# ls prometheus-adapter/
根据所有项目中的values.yaml中指定的image路径下载容器镜像并上传至harbor仓库
容器镜像prometheus推送
# docker load -i prometheus-62.6.0.tar
# docker tag quay.io/prometheus/prometheus:v2.54.1 reg.timinglee.org/prometheus/prometheus:v2.54.1
# docker tag quay.io/thanos/thanos:v0.36.1 reg.timinglee.org/thanos/thanos:v0.36.1
# docker tag quay.io/prometheus/alertmanager:v0.27.0 reg.timinglee.org/prometheus/alertmanager:v0.27.0
# docker tag quay.io/prometheus-operator/admission-webhook:v0.76.1 reg.timinglee.org/prometheus-operator/admission-webhook:v0.76.1
# docker tag quay.io/prometheus-operator/prometheus-operator:v0.76.1 reg.timinglee.org/prometheus-operator/prometheus-operator:v0.76.1
# docker tag registry.k8s.io/ingress-nginx/kube-webhook-certgen:v20221220-controller-v1.5.1-58-g787ea74b6 reg.timinglee.org/ingress-nginx/kube-webhook-certgen:v20221220-controller-v1.5.1-58-g787ea74b6
# docker tag quay.io/prometheus-operator/prometheus-config-reloader:v0.76.1 reg.timinglee.org/prometheus-operator/prometheus-config-reloader:v0.76.1
# docker push reg.timinglee.org/prometheus/prometheus:v2.54.1
# docker push reg.timinglee.org/thanos/thanos:v0.36.1
# docker push reg.timinglee.org/prometheus/alertmanager:v0.27.0
# docker push reg.timinglee.org/prometheus-operator/admission-webhook:v0.76.1
# docker push reg.timinglee.org/prometheus-operator/prometheus-operator:v0.76.1
# docker push reg.timinglee.org/ingress-nginx/kube-webhook-certgen:v20221220-controller-v1.5.1-58-g787ea74b6
# docker push reg.timinglee.org/prometheus-operator/prometheus-config-reloader:v0.76.1
# docker load -i node-exporter-v1.8.2.tar
# docker tag reg.timinglee.org/prometheus/node-exporter:v1.8.2 reg.timinglee.org/prometheus/node-exporter:v1.8.2
# docker push reg.timinglee.org/prometheus/node-exporter:v1.8.2
容器镜像grafana推送
# docker load -i grafana-11.2.0.tar
# docker tag grafana/grafana:11.2.0 reg.timinglee.org/grafana/grafana:11.2.0
# docker tag grafana/grafana-image-renderer:latest reg.timinglee.org/grafana/grafana-image-renderer:latest
# docker tag quay.io/kiwigrid/k8s-sidecar:1.27.4 reg.timinglee.org/kiwigrid/k8s-sidecar:1.27.4
# docker tag bats/bats:v1.4.1 reg.timinglee.org/bats/bats:v1.4.1
# docker push reg.timinglee.org/grafana/grafana:11.2.0
# docker push reg.timinglee.org/grafana/grafana-image-renderer:latest
# docker push reg.timinglee.org/kiwigrid/k8s-sidecar:1.27.4
# docker push reg.timinglee.org/bats/bats:v1.4.1
容器镜像nginx-exporter推送
# docker load -i nginx-exporter-1.3.0-debian-12-r2.tar
# docker tag bitnami/nginx-exporter:1.3.0-debian-12-r2 reg.timinglee.org/bitnami/nginx-exporter:1.3.0-debian-12-r2
# docker push reg.timinglee.org/bitnami/nginx-exporter:1.3.0-debian-12-r2
容器镜像kube-state-metrics推送
# docker load -i kube-state-metrics-2.13.0.tar
# docker tag registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.13.0 reg.timinglee.org/kube-state-metrics/kube-state-metrics:v2.13.0
# docker tag quay.io/brancz/kube-rbac-proxy:v0.18.0 reg.timinglee.org/brancz/kube-rbac-proxy:v0.18.0
# docker push reg.timinglee.org/kube-state-metrics/kube-state-metrics:v2.13.0
# docker push reg.timinglee.org/brancz/kube-rbac-proxy:v0.18.0
利用helm安装Prometheus
卸载命令(如需要重新安装): helm -n kube-prometheus-stack uninstall kube-prometheus-stack
# kubectl create namespace kube-prometheus-stack
# cd /root/prometheus/kube-prometheus-stack 【在这个目录执行】
# helm -n kube-prometheus-stack install kube-prometheus-stack .
# kubectl --namespace kube-prometheus-stack get pods 查看结果:
# kubectl -n kube-prometheus-stack get svc
# kubectl -n kube-prometheus-stack edit svc kube-prometheus-stack-grafana 【修改暴漏方式】
各个svc的作用
alertmanager-operated 告警管理
kube-prometheus-stack-grafana 展示prometheus采集到的指标
kube-prometheus-stack-prometheus-node-exporter 收集节点级别的指标的工具
kube-prometheus-stack-prometheus 主程序
登陆grafana
查看grafana密码
# kubectl -n kube-prometheus-stack get secrets kube-prometheus-stack-grafana -o yaml
# echo "YWRtaW4=" | base64 -d
# echo -n "cHJvbS1vcGVyYXRvcg==" | base64 -d
prometheus监控
下载prometheus
官网:https://github.com/prometheus-operator/prometheus-operator
登录使用
设置语言
监控使用示例
建立监控项目
# helm pull bitnami/nginx --version 18.1.11 【下载示例所需helm项目】
# vim values.yaml 【修改项目开启监控】
# kubectl -n kube-prometheus-stack edit svc kube-prometheus-stack-prometheus
# kubectl -n kube-prometheus-stack get svc kube-prometheus-stack-prometheus
查看监控
# kubectl -n kube-prometheus-stack get servicemonitors.monitoring.coreos.com --show-labels
# helm install timinglee . 【安装项目,在安装之前一定要上传镜像到仓库中】
# kubectl get svc 查看结果:
# ab -c 5 -n 100 http://172.25.254.53/index.html 【压力测试】