kubernetes-helm
admin
2024-01-21 02:09:39
0

目录

一、helm

1.Chart

2.Repository(仓库)

3.Release

二、 Helm配置

1.安装 helm 

2.使用 helm 安装 Chart

三、Helm 自定义模板

1.拉取 chart

2.创建自定义的 chart

3.修改 chart

4.打包 chart

5.部署 chart

6.部署 ingress

7.回滚

四、Helm 仓库

1.安装 harbor

2.安装 push 插件

(1)在线安装

(2)离线安装

(3)添加仓库

(4)推送 chart 到 harbor 中


一、helm

       在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。 况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。

        Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。通过动态生成 K8s 资源清单文件(deployment.yaml、service.yaml)。然后调用 Kubectl 自动执行 K8s 资源部署。

        Helm 是官方提供的类似于 YUM 的包管理器,是环境的流程封装。Helm 有三个重要的概念:Chart 、Repository 和 Release。

1.Chart

       Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。

2.Repository(仓库)

       Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository。

3.Release

       使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。可以理解为 Helm 使用 Chart 包部署的一个应用实例。一个 chart 通常可以在同一个集群中安装多次。每一次安装都会创建一个新的 release。
        以 MySQL chart 为例,如果你想在你的集群中运行两个数据库,可以安装该 chart 两次。每一个数据库都会拥有它自己的 release 和 release name。可以将 release 想象成应用程序发布的版本号。

二、 Helm配置

1.安装 helm 

下载二进制 Helm client 安装包
https://github.com/helm/helm/tags

tar -zxvf helm-v3.6.0-linux-amd64.tar.gzmv linux-amd64/helm /usr/local/bin/helmhelm version

命令补全

source <(helm completion bash)

2.使用 helm 安装 Chart

添加常用的 chart 仓库

helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add stable http://mirror.azure.cn/kubernetes/charts
helm repo add aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
helm repo add incubator https://charts.helm.sh/incubator

更新 charts 列表

helm repo update          
helm repo list

查看 stable 仓库可用的 charts 列表

helm search repo stable

删除 incubator 仓库

helm repo remove incubator

查看 chart 信息

helm show chart stable/mysql      查看指定 chart 的基本信息helm show all stable/mysql		  获取指定 chart 的所有信息

安装 chart

helm install my-redis bitnami/redis [-n default]   #指定 release 的名字为 my-redis,-n 指定部署到 k8s 的 namespace

helm install bitnami/redis --generate-name    #不指定 release 的名字时,需使用 –generate-name 随机生成一个名字

查看所有 release

helm ls 
helm list

查看指定的 release 状态

helm status my-redis

删除指定的 release

helm uninstall my-redis 

三、Helm 自定义模板

charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署到 k8s。

1.拉取 chart

mkdir /opt/helm
cd /opt/helmhelm pull stable/mysqlls
mysql-1.6.9.tgztar xf mysql-1.6.9.tgzyum install -y treetree mysql

可以看到,一个 chart 包就是一个文件夹的集合,文件夹名称就是 chart 包的名称。

chart 是包含至少两项内容的helm软件包:
(1)软件包自描述文件 Chart.yaml,这个文件必须有 name 和 version(chart版本) 的定义
(2)一个或多个模板,其中包含 Kubernetes 清单文件:
NOTES.txt:chart 的“帮助文本”,在用户运行 helm install 时显示给用户
deployment.yaml:创建 deployment 的资源清单文件
service.yaml:为 deployment 创建 service 的资源清单文件
ingress.yaml: 创建 ingress 对象的资源清单文件
_helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用

2.创建自定义的 chart

helm create nginxtree nginx

cat nginx/templates/deployment.yaml
在 templates 目录下 yaml 文件模板中的变量(go template语法)的值默认是在 nginx/values.yaml 中定义的,只需要修改 nginx/values.yaml 的内容,也就完成了 templates 目录下 yaml 文件的配置。
比如在 deployment.yaml 中定义的容器镜像:
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"

cat nginx/values.yaml | grep repository
repository: nginx
以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

3.修改 chart

vim nginx/Chart.yaml
apiVersion: v2
name: nginx                     #chart名字
description: A Helm chart for Kubernetes
type: application               #chart类型,application或library
version: 0.1.0                  #chart版本
appVersion: 1.16.0              #application部署版本vim nginx/values.yaml
replicaCount: 1image:repository: nginxpullPolicy: IfNotPresenttag: "latest"                 #设置镜像标签imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""serviceAccount:create: trueannotations: {}name: ""podAnnotations: {}podSecurityContext: {}# fsGroup: 2000securityContext: {}# capabilities:#   drop:#   - ALL# readOnlyRootFilesystem: true# runAsNonRoot: true# runAsUser: 1000service:type: ClusterIPport: 80ingress:enabled: true                 #开启 ingressclassName: ""annotations: {}# kubernetes.io/ingress.class: nginx# kubernetes.io/tls-acme: "true"hosts:- host: www.kgc.com         #指定ingress域名paths:- path: /pathType: Prefix      #指定ingress路径类型tls: []#  - secretName: chart-example-tls#    hosts:#      - chart-example.localresources:limits:cpu: 100mmemory: 128Mirequests:cpu: 100mmemory: 128Miautoscaling:enabled: falseminReplicas: 1maxReplicas: 100targetCPUUtilizationPercentage: 80# targetMemoryUtilizationPercentage: 80nodeSelector: {}tolerations: []affinity: {}

4.打包 chart

helm lint nginx         检查依赖和模版配置是否正确helm package nginx      打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz

5.部署 chart

helm install nginx ./nginx --dry-run --debug     使用 --dry-run 参数验证 Chart 的配置,并不执行安装helm install nginx ./nginx -n default            部署 chart,release 版本默认为 1
或者
helm install nginx ./nginx-0.1.0.tgz

可根据不同的配置来 install,默认是 values.yaml

helm install nginx ./nginx -f ./nginx/values-prod.yamlhelm lskubectl get pod,svc

6.部署 ingress

wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/mandatory.yaml
wget https://gitee.com/mirrors/ingress-nginx/raw/nginx-0.30.0/deploy/static/provider/baremetal/service-nodeport.yaml
kubectl apply -f mandatory.yaml
kubectl apply -f service-nodeport.yamlkubectl get pod,svc -n ingress-nginxkubectl get ingress

修改为 NodePort 访问后,升级

vim nginx/values.yaml
service:type: NodePortport: 80nodePort: 30080ingress:enabled: falsevim nginx/templates/service.yaml
apiVersion: v1
kind: Service
metadata:name: {{ include "nginx.fullname" . }}labels:{{- include "nginx.labels" . | nindent 4 }}
spec:type: {{ .Values.service.type }}ports:- port: {{ .Values.service.port }}targetPort: httpprotocol: TCPname: httpnodePort: {{ .Values.service.nodePort }}               指定 nodePortselector:{{- include "nginx.selectorLabels" . | nindent 4 }}

升级 release,release 版本加 1

helm upgrade nginx nginx kubectl get svccurl

7.回滚

根据 release 版本回滚

helm history nginx            查看 release 版本历史helm rollback nginx 1         回滚 release 到版本1helm history nginx            nginx release 已经回滚到版本 1

       通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。
      在命令行使用 --set 指定参数来部署(install,upgrade)release
注:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。
helm upgrade nginx nginx --set image.tag='1.15'

四、Helm 仓库

helm 可以使用 harbor 作为本地仓库,将自定义的 chart 推送至 harbor 仓库。

1.安装 harbor

上传 harbor-offline-installer-v1.9.1.tgz 和 docker-compose 文件到 /opt 目录

cd /opt
cp docker-compose /usr/local/bin/
chmod +x /usr/local/bin/docker-composetar zxf harbor-offline-installer-v1.9.1.tgz
cd harbor/vim harbor.yml
hostname: ip
harbor_admin_password: Harbor12345      admin用户初始密码
data_volume: /data                      数据存储路径,自动创建
chart:absolute_url: enabled                 在chart中启用绝对url
log:level: infolocal:rotate_count: 50rotate_size: 200Mlocation: /var/log/harbor           日志路径

安装带有 Clair service 和 chart 仓库服务的 Harbor

./install.sh --with-clair --with-chartmuseum

2.安装 push 插件

(1)在线安装

helm plugin install https://github.com/chartmuseum/helm-push

(2)离线安装

wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gzmkdir ~/.local/share/helm/plugins/helm-push
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-pushhelm repo ls

登录 Harbor WEB UI 界面,创建一个新项目
浏览器访问:http://ip ,默认的管理员用户名和密码是 admin/Harbor12345
点击 “+新建项目” 按钮
填写项目名称为 “chart_repo”,访问级别勾选 “公开”,点击 “确定” 按钮,创建新项目

(3)添加仓库

helm repo add harbor http://ip/chartrepo/chart_repo --username=admin --password=Harbor12345
注:这里的 repo 的地址是/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项目。

(4)推送 chart 到 harbor 中

cd /opt/helm
helm push nginx harbor

查看 chart_repo 项目中的 Helm Charts

相关内容

热门资讯

修改工具教程版!红中会馆智能插... 修改工具教程版!红中会馆智能插件是真的,分享详细开挂攻略是一款可以让一直输的玩家,快速成为一个“必胜...
修改工具教程版!牛魔王新版智能... 您好:牛魔王新版确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会...
修改工具教程版!甘孜娱乐中心智... 修改工具教程版!甘孜娱乐中心智能插件是真的,分享详细开挂攻略一、甘孜娱乐中心AI软件牌型概率发牌机制...
修改工具教程版!必中娱乐智能插... 您好,必中娱乐这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
修改工具教程版!德扑之星俱乐部... 修改工具教程版!德扑之星俱乐部智能插件是真的,分享详细开挂攻略1、让任何用户在无需AI插件第三方神器...
修改工具教程版!胡乐邯郸麻将智... 胡乐邯郸麻将这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这...
修改工具教程版!Newpk俱乐... 亲,Newpk俱乐部这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,Newpk俱乐...
修改工具教程版!同城字牌智能插... 修改工具教程版!同城字牌智能插件是真的,分享详细开挂攻略;原来确实真的有挂(需添加指定薇719890...
修改工具教程版!口袋广丰智能插... 亲,口袋广丰这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,口袋广丰的开挂软件,名...
修改工具教程版!禾盛联盟智能插... 您好,禾盛联盟这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...
修改工具教程版!直隶麻将智能插... 亲,直隶麻将这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,直隶麻将的开挂软件,名...
修改工具教程版!大丰麻将智能插... 大丰麻将这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这款游...
修改工具教程版!川娱竞技智能插... 您好:川娱竞技确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发...
修改工具教程版!闲来老版本智能... 修改工具教程版!闲来老版本智能插件是真的,分享详细开挂攻略一、闲来老版本AI软件牌型概率发牌机制”必...
修改工具教程版!云游科技智能插... 修改工具教程版!云游科技智能插件是真的,分享详细开挂攻略;原来确实真的有挂(需添加指定薇719890...
修改工具教程版!沐星互娱智能插... 修改工具教程版!沐星互娱智能插件是真的,分享详细开挂攻略一、沐星互娱AI软件牌型概率发牌机制”必胜“...
修改工具教程版!血流换三张智能... 血流换三张这个游戏其实有挂的,确实是有挂的,需要了解加客服微信:【7198902】, 很多玩家在这款...
修改工具教程版!乐太坊智能插件... 亲,乐太坊这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,乐太坊的开挂软件,名称叫...
修改工具教程版!天天互娱智能插... 修改工具教程版!天天互娱智能插件是真的,分享详细开挂攻略是一款可以让一直输的玩家,快速成为一个“必胜...
修改工具教程版!多乐麻将智能插... 您好,多乐麻将这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打...