前言
helm: k8s的包管理器,这里是v3版本
大致流程:Chart仓库<-helm->存储到helm客户端本地->config->kubeconfig->Kube Apiserver->Release
chart仓库:存储chart程序包,不包含程序,是一个资源描述/模板 ,是一个http服务器。
helm:本地客户端
config:提供chart包所需的变量,构建特定的chart包配置,对应chart包里的values.yaml文件
Release:特定的chart包的本地实例化对象,部署于目标集群上的一个实例
当chart更新后,helm可以滚动更新对应的Release实例
部署
下载Helm包
Releases · helm/helm (github.com)
Helm包是一个二进制程序,直接解压就可以用,将解压后的 helm 文件放置在 /usr/bin/ 下即可
你也可以通过脚本一键安装最新版本的helm: curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
添加源
添加微软家的源,并命名为 stable
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
列出已有的源
helm repo list
查询stable源包含的包
helm search repo stable
常用命令
release命令(v3版本)
-
install
helm install <release_name> <chart_name> <flag>
helm install myelk elastic/elasticsearch --namespace elk -f values.yaml
相同的包,不同的实例,之间是不相干独立管理的。
-
delete
-
helm uninstall <release_name> <flag>
flag 如果指定–keep-history,则属于标记删除,依然可以查到状态。在这种情况下,你可以通过 helm rollback 恢复
-
-
upgrade:更新release版本,更新release配置
helm upgrade <release_name> <chart_name> <flag>
- chart_name 通过search命令查找
- flag:
- –recreate-pods 重建所有Pod.
-
rollback:回滚release版本
-
list
-
history:获取release历史版本
-
status:获取release状态信息
-
get:获取release已设置的值。
-
helm get values <release-name>
-
chart命令(v3版本)
-
search 通过一个关键词查找一个chat。
helm search repo metallb
-
create 创建一个chart,将包含一些必要的文件
-
fetch 下载压缩包但不安装。常用来安装前自定义配置,例如values.yaml
-
get 下载
-
inspect
-
package 打包一个chart
helm package <chart根目录>
-
verify 验证一个chart
定制化
就是通过定制化包的values.yaml
通过下列命令导出包所支持的所有参数:
helm show value <pkg.name>
➜ helm show values apphub/nginx | grep -v '#' | grep -v '^$'
image:
registry: docker.io
repository: bitnami/nginx
tag: 1.16.1-debian-10-r0
pullPolicy: IfNotPresent
replicaCount: 1
podAnnotations: {}
affinity: {}
nodeSelector: {}
tolerations: {}
resources:
limits: {}
requests: {}
livenessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 30
timeoutSeconds: 5
failureThreshold: 6
readinessProbe:
httpGet:
path: /
port: http
initialDelaySeconds: 5
timeoutSeconds: 3
periodSeconds: 5
service:
type: LoadBalancer
port: 80
httpsPort: 443
nodePorts:
http: ""
https: ""
annotations: {}
externalTrafficPolicy: Cluster
ingress:
enabled: false
certManager: false
hostname: example.local
annotations: {}
tls:
- hosts:
- example.local
secretName: example.local-tls
secrets:
metrics:
enabled: false
image:
registry: docker.io
repository: bitnami/nginx-exporter
tag: 0.5.0-debian-10-r0
pullPolicy: IfNotPresent
podAnnotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9113"
service:
port: 9113
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "{{ .Values.metrics.service.port }}"
resources:
limits: {}
requests: {}
serviceMonitor:
enabled: false
可以看到配置并非是k8s的标准格式。