helm简介

helm -> yum

chart -> rpm

16275553013377_upload.png

helm V3


下载地址:

https://github.com/helm/helm/releases

当前版本:

wget https://get.helm.sh/helm-v3.7.1-linux-amd64.tar.gz

安装:

tar -xf helm-v3.0.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

添加chart:

helm repo add bitnami https://charts.bitnami.com/bitnami

更新缓存:

helm search repo bitnami

搜索软件:

helm search repo redis

查看已经安装的软件包:

]# helm list -A
NAME                        	NAMESPACE  	REVISION	UPDATED                                	STATUS  	CHART                             	APP VERSION
aws-load-balancer-controller	kube-system	1       	2023-03-13 15:41:36.418171978 +0800 CST	deployed	aws-load-balancer-controller-1.4.8	v2.4.7     
metrics-server              	kube-system	1       	2023-03-12 16:05:54.207667545 +0800 CST	deployed	metrics-server-3.8.4              	0.6.2

查看软件详细信息:

helm show all bitnami/redis

安装软件:

helm install NAME bitnami/redis
# 禁用持久存储
helm install db bitnami/redis --set replica.persistence.enabled=false --set master.persistence.enabled=false

# 官网地址,有更多的参数可以设置
artifacthub.io/packages/helm/bitnami/redis

指定软件名称:

helm install db-redis bitnami/redis -f /tmp/redis/values.yaml

查看已安装的软件:

]# helm list -A
NAME          	NAMESPACE  	REVISION	UPDATED                                	STATUS  	CHART               	APP VERSION
metrics-server	kube-system	1       	2023-03-12 16:05:54.207667545 +0800 CST	deployed	metrics-server-3.8.4	0.6.2      
prometheus    	kube-system	1       	2023-03-12 16:37:52.515709814 +0800 CST	deployed	prometheus-19.7.2   	v2.41.0

卸载软件:

]# helm uninstall prometheus -n kube-system



自定义helm应用的使用:

编写文件:

.
├── Chart.yaml
├── README.md
├── templates
│   ├── _cache_s3.tpl
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── _env_vars.tpl
│   ├── _helpers.tpl
│   ├── NOTES.txt
│   ├── pvc.yaml
│   ├── role-binding.yaml
│   ├── role.yaml
│   ├── secrets.yaml
│   └── service-account.yaml
└── values.yaml

打包:

helm package .

安装:

helm install --namespace gitlab gitlab-runner *.tgz

查看:

helm ls -n gitlab

卸载:

helm uninstall -n gitlab gitlab-runner-0-1655282389


安装fluent-bit:

添加官方chart源:

helm repo add fluent https://fluent.github.io/helm-charts

获取配置:

helm show values fluent/fluent-bit > fluent-bit.yaml

改完配置后指定chart文件安装:

helm install log fluent/fluent-bit -f fluent-bit.yaml -n logs


安装fluentd:fluentd默认的配置收集到es中的日志字段比较丰富比较实用。

helm repo add fluent https://fluent.github.io/helm-charts
helm show values fluent/fluentd > fluentd.yaml
helm install log fluent/fluentd -f fluentd.yaml -n logs

要修改如下配置:

  04_outputs.conf: |-
    <label @OUTPUT>
      <match **>
        @type elasticsearch
        host "192.168.0.20"
        port 9200
        path ""
        logstash_format true
        logstash_prefix "k8s"
      </match>
    </label>

收集指定名称空间下的日志:默认收集全部名称空间的日志

    <source>
      @type tail
      @id in_tail_container_logs
      @label @KUBERNETES
      path /var/log/containers/*_default_*.log # 把*.log 改成 *_namespace_*.log 即可
      pos_file /var/log/fluentd-containers.log.pos
      tag kubernetes.*
      read_from_head true
      <parse>
        @type multi_format
        <pattern>
          format json
          time_key time
          time_type string
          time_format "%Y-%m-%dT%H:%M:%S.%NZ"
          keep_time_key false
        </pattern>
        <pattern>
          format regexp
          expression /^(?<time>.+) (?<stream>stdout|stderr)( (.))? (?<log>.*)$/
          time_format '%Y-%m-%dT%H:%M:%S.%NZ'
          keep_time_key false
        </pattern>
      </parse>
      emit_unmatched_lines true
    </source>


helm安装prometheus: 社区版,没有operator复杂,适合小规模集群。需要storageclass或emptyDir,有两个地方要改,分别是alertmanager 和 prometheus。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts 
helm show values prometheus-community/prometheus > prometheus.yaml

对导出的配置文件进行修改,参考官方文档:

https://artifacthub.io/packages/helm/prometheus-community/prometheus

storageClass:

persistentVolume:
  storageClass: "managed-nfs-storage" # 改成自己storageClass名称

alertmanager:

alertmanager:
  enabled: true # 不需要就设置为false

pushgateway:

prometheus-pushgateway:
  enabled: true

node-exporter:如果不需要对节点进行监控可以不安装,设置为false即可。

prometheus-node-exporter:
  enabled: true

kube-state-metrics:为HPA等组件提供决策指标支持的组件(Pod水平扩容)。

kube-state-metrics:
  enabled: false

安装:

helm install my-prometheus prometheus-community/prometheus -f prometheus.yaml

更新:

helm upgrade prometheus prometheus-community/prometheus -f prometheus.yaml

grafana模板:

https://grafana.com/grafana/dashboards/9614-nginx-ingress-controller/


安装prometheus-adapter:prometheus对接到k8s的适配器,让k8s支持prometheus格式的指标。

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm show values prometheus-community/prometheus-adapter > prometheus-adapter.yaml

修改配置之后安装:需要指定prometheus的地址,如:prometheus.kube-system.svc.cluster.local.

helm install my-prometheus-adapter prometheus-community/prometheus-adapter -f prometheus-adapter.yaml

官方文档:

https://artifacthub.io/packages/helm/prometheus-community/prometheus-adapter

主要修改的配置如下:注意端口使用的是svc的端口。

prometheus:
  url: http://prom-prometheus-server.kube-system.svc.cluster.local.
  port: 80 # 注意使用svc的端口

安装好后获取指标:需要等待一分钟才能获取到指标,如果发现只有一个指标那就是prometheus地址没指定正确。

kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 | jq

编辑配置:可以自定义规则

kubectl edit configmaps -n kube-system prometheus-adapter


使用helm安装metrics-server:

添加源:

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/

获取配置文件:修改下镜像地址

helm show values metrics-server/metrics-server > metrics-server-conf.yaml

安装:安装后需要在启动选项上添加 --kubelet-insecure-tls 选项来不验证证书。

helm install metrics-server metrics-server/metrics-server -n kube-system -f metrics-server-conf.yaml



helm V2

Helm --> Tiller --> API server

Helm:客户端

Tiller:服务端

Chart:一个helm程序包

Repository:Charts仓库

Release:特点的Chart部署与目标上的一个实例

Chart --> Config --> Release

Helm官网:https://helm.sh

Charts仓库:https://hub.kubeapps.com、https://hub.helm.sh



安装helm


官方下载地址:

https://github.com/helm/helm

安装包下载地址:下载Latest release包即可。

https://github.com/helm/helm/releases

安装:

tar xf helm-v2.9.1-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin


安装tiller


Tiller的权限rbac文件:有三种部署方式,这里部署集群级别,详见:https://github.com/helm/helm/blob/master/docs/rbac.md 

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

应用RBAC:将tiller绑定到集群的cluster-admin的Role。

kubectl apply -f tiller-rbac.yaml

安装Tiller:先设置代理后安装。

[root@k8s-master tiller]# helm init --service-account tiller --history-max 200
Creating /root/.helm 
Creating /root/.helm/repository 
Creating /root/.helm/repository/cache 
Creating /root/.helm/repository/local 
Creating /root/.helm/plugins 
Creating /root/.helm/starters 
Creating /root/.helm/cache/archive 
Creating /root/.helm/repository/repositories.yaml 
Adding stable repo with URL: https://kubernetes-charts.storage.googleapis.com 
Adding local repo with URL: http://127.0.0.1:8879/charts 
$HELM_HOME has been configured at /root/.helm.

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
To prevent this, run `helm init` with the --tiller-tls-verify flag.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation

看到上面信息说明安装成功。


如果没有代理这是用如下方法安装Tiller:

helm init --service-account tiller --upgrade -i registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.9.1  --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

--service-account    serviceaccount账号名

-i, --tiller-image       使用自定义的Tiller 镜像,默认镜像下不了改成可以下载的镜像

--stable-repo-url     指定仓库地址,默认是谷歌的,要改一下,改成阿里云的

--upgrade                tiller安装好后更新仓库

更多参数详见:helm init --help


安装好后查看版本:

[root@k8s-master tiller]# helm version
Client: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.3", GitCommit:"0e7f3b6637f7af8fcfddb3d2941fcc7cbebb0085", GitTreeState:"clean"}


使用


添加仓库:

helm repo add incubator https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/

更新仓库:

helm repo update


使用:

helm search

helm search stable/redis

helm install stable/redis

helm delete stable/redis

获取chart文件:

helm fetch stable/redis

查看当前可用仓库

helm repo list


卸载 Helm 服务器端 Tiller:

helm reset

helm reset --force


wordpress/
  Chart.yaml          # 对外初始化,元数据信息,版本、名称、维护者等等
  LICENSE             # 
  README.md           # 
  requirements.yaml   # 依赖关系
  values.yaml         # 
  charts/             # 被依赖的chart文件
  templates/          # 模本文件,配置清单
  templates/NOTES.txt #


自定义chart:

helm create myapp

myapp/
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   └── service.yaml
└── values.yaml

可以编辑资源配置清单,编辑完成后进行语法检查。

helm lint myapp

没有问题后进行打包:

helm package myapp

查看仓库:

helm repo list 

打开本地仓库:这个仓库使用nginx 放入文件既可以成为一个仓库。

helm serve

搜索自定义的仓库:

helm search myapp

安装自定义仓库中的应用:

helm install --name myapp1 local/myapp

查看安装生成的信息:

helm status myapp1

移除应用:

helm delete --purge myapp1


helm官网chart:

https://hub.kubeapps.com

helm repo add bitnami https://charts.bitnami.com/bitnami

helm fetch bitnami/elasticsearch