k8s的Helm 工具安装

一、Helm 概述

1.1 helm 简介

在 Kubernetes 中部署容器云的应用也是一项有挑战性的工作,Helm 就是为了简化在 Kubernetes 中安装部署容器云应用的一个客户端工具。通过 helm 能够帮助开发者定义、安装和升级 Kubernetes 中的容器云应用,同时也可以通过 helm 进行容器云应用的分享。在 Kubeapps Hub 中提供了包括 Redis、MySQL 和 Jenkins 等常见的应用,通过 helm 可以使用一条命令就能够将其部署安装在自己的 Kubernetes 集群中。

Helm 是管理 Kubernetes 包的工具,Helm 能提供下面的能力:

  1. 创建新的 charts(图表)
  2. 将 charts 打包成 tgz 文件
  3. 与 chart 仓库交互
  4. 安装和卸载 Kubernetes 的应用
  5. 管理使用 Helm 安装的 charts 的生命周期

1.2 helm 架构

 Helm 架构由 Helm 客户端、Tiller 服务器端和 Chart 仓库所组成;Tiller 部署在 Kubernetes 中,Helm 客户端从 Chart 仓库中获取 Chart 安装包,并将其安装部署到 Kubernetes 集群中。

1.3 helm 的重要概念

  1. Charts:是创建 Kubernetes 应用实例的信息集合,也就是一个 helm 的程序包,它包含了运行一个 k8s 应用所有需要的镜像、依赖关系和资源定义等,必要时还会包含 Service 资源定义,它类似于 yum 的 rpm 文件
  2. Repository:Chart 仓库,用于集中存储和分发 Charts。
  3. Config:应用程序实例化安装时运行使用的配置信息
  4. Release:chart 的运行实例,包含特定的 config

1.3.1Helm3 与 Helm2 的区别

Helm2 是 C/S 架构,主要分为客户端 helm 和服务端 Tiller。在 Helm 2 中,Tiller 是作为一个 Deployment 部署在 kube-system 命名空间中,很多情况下,我们会为 Tiller 准备一个 ServiceAccount ,这个 ServiceAccount 通常拥有集群的所有权限。
用户可以使用本地 Helm 命令,自由地连接到 Tiller 中并通过 Tiller 创建、修改、删除任意命名空间下的任意资源。

在 Helm 3 中,Tiller 被移除了。新的 Helm 客户端会像 kubectl 命令一样,读取本地的 kubeconfig 文件,使用我们在 kubeconfig 中预先定义好的权限来进行一系列操作。

1.4 helm 组件

在 Helm 中有两个主要的组件,即 Helm 客户端和 Tiller 服务器

1.4.1 helm 客户端

是一个供终端用户使用的命令行工具

客户端负责如下的工作:

  • 本地 chart 开发
  • 管理仓库
  • 与 Tiller 服务器交互(发送需要被安装的 charts、请求关于发布版本的信息、请求更新或者卸载已安装的发布版本)

1.4.2 Tiller 服务器

Tiller 是 helm 的服务器端,一般运行于 kubernetes 集群之上,定义 tiller 的 ServiceAccount,并通过 ClusterRoleBinding 将其绑定至集群管理员角色 cluster-admin,从而使得它拥有集群级别所有的最高权限

Tiller 服务器负责如下的工作:

  • 监听来自于 Helm 客户端的请求
  • 组合 chart 和配置来构建一个发布
  • 在 Kubernetes 中安装,并跟踪后续的发布
  • 通过与 Kubernetes 交互,更新或者 chart

二、部署 Helm

官网

Helm 的官方网站 https://helm.sh/

2.1 安装 helm

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

tar -zxvf helm-v3.6.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/
helm version

//命令补全
source <(helm completion bash)

k8s的Helm 工具安装

k8s的Helm 工具安装

k8s的Helm 工具安装

2.2 使用 helm 安装 Chart

//添加常用的 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

k8s的Helm 工具安装

//更新 charts 列表

helm repo update          
helm repo list

k8s的Helm 工具安装

//查看 stable 仓库可用的 charts 列表

helm search repo stable

k8s的Helm 工具安装

//删除 incubator 仓库

helm repo remove incubator

k8s的Helm 工具安装

//查看 chart 信息

helm show chart stable/mysql     #查看指定 chart 的基本信息

helm show all stable/mysql         #获取指定 chart 的所有信息

k8s的Helm 工具安装

k8s的Helm 工具安装

//安装 chart

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

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

k8s的Helm 工具安装

k8s的Helm 工具安装

//查看所有 release

helm ls 
helm list

k8s的Helm 工具安装

//查看指定的 release 状态

helm status my-redis 

k8s的Helm 工具安装

//删除指定的 release

helm uninstall my-redis 

k8s的Helm 工具安装

2.3 Helm 自定义模板

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

//拉取 chart

mkdir /opt/helm
cd /opt/helm

helm pull stable/mysql

ls
mysql-1.6.9.tgz

tar xf mysql-1.6.9.tgz

yum install -y tree

tree mysql
mysql
├── Chart.yaml
├── README.md
├── templates
│   ├── configurationFiles-configmap.yaml
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── initializationFiles-configmap.yaml
│   ├── NOTES.txt
│   ├── pvc.yaml
│   ├── secrets.yaml
│   ├── serviceaccount.yaml
│   ├── servicemonitor.yaml
│   ├── service.yaml
│   ├── ingress.yaml
│   └── tests
│       ├── test-configmap.yaml
│       └── test.yaml
└── values.yaml

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

k8s的Helm 工具安装

k8s的Helm 工具安装

#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 中重复使用

//创建自定义的 chart

helm create nginx

tree nginx
nginx
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── hpa.yaml
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml

cat nginx/templates/deployment.yaml

k8s的Helm 工具安装

k8s的Helm 工具安装

#在 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

k8s的Helm 工具安装

#以上变量值是在 create chart 的时候就自动生成的默认值,你可以根据实际情况进行修改。

//修改 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部署版本

k8s的Helm 工具安装

vim nginx/values.yaml
replicaCount: 1

image:
  repository: nginx
  pullPolicy: IfNotPresent
  tag: "latest"                 #设置镜像标签

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  create: true
  annotations: {}
  name: ""

podAnnotations: {}

podSecurityContext: {}
  # fsGroup: 2000

securityContext: {}
  # capabilities:
  #   drop:
  #   - ALL
  # readOnlyRootFilesystem: true
  # runAsNonRoot: true
  # runAsUser: 1000

service:
  type: ClusterIP
  port: 80

ingress:
  enabled: true                 #开启 ingress
  className: ""
  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.local

resources:
  limits:
    cpu: 100m
    memory: 128Mi
  requests:
    cpu: 100m
    memory: 128Mi

autoscaling:
  enabled: false
  minReplicas: 1
  maxReplicas: 100
  targetCPUUtilizationPercentage: 80
  # targetMemoryUtilizationPercentage: 80

nodeSelector: {}

tolerations: []

affinity: {}

k8s的Helm 工具安装

注意:镜像那修改soscscs/myapp,否则会错

k8s的Helm 工具安装

k8s的Helm 工具安装

 //打包 chart

helm lint nginx        #检查依赖和模版配置是否正确

helm package nginx     #打包 chart,会在当前目录下生成压缩包 nginx-0.1.0.tgz

k8s的Helm 工具安装

//部署 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

k8s的Helm 工具安装

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

helm install nginx ./nginx -f ./nginx/values-prod.yaml

helm ls
NAME     NAMESPACE    REVISION    UPDATED                                    STATUS      CHART          APP VERSION
nginx    default      1           2022-01-18 23:43:06.170248683 +0800 CST    deployed    nginx-0.1.0    1.16.0     

kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-67779bd969-kq2fm   1/1     Running   0          58m

NAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
service/kubernetes      ClusterIP   10.96.0.1       <none>        443/TCP   37h
service/nginx           ClusterIP   10.100.0.171    <none>        80/TCP    58s

k8s的Helm 工具安装

k8s的Helm 工具安装

 #部署 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.yaml

kubectl get pod,svc -n ingress-nginx
NAME                                            READY   STATUS    RESTARTS   AGE
pod/nginx-ingress-controller-54b86f8f7b-jjlnj   1/1     Running   0          79s

NAME                    TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
service/ingress-nginx   NodePort   10.101.36.34   <none>        80:30665/TCP,443:30363/TCP   6s

kubectl get ingress
NAME                CLASS    HOSTS          ADDRESS        PORTS   AGE
nginx               <none>   www.kgc.com    10.101.36.34   80      58m

vim /etc/hosts
.....
192.168.80.12 node02 www.kgc.com

curl http://www.kgc.com:30665

k8s的Helm 工具安装

k8s的Helm 工具安装

k8s的Helm 工具安装

k8s的Helm 工具安装

k8s的Helm 工具安装

//修改为 NodePort 访问后,升级

vim nginx/values.yaml
service:
  type: NodePort
  port: 80
  nodePort: 30080

ingress:
  enabled: false

vim 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: http
      protocol: TCP
      name: http
      nodePort: {{ .Values.service.nodePort }}              #指定 nodePort
  selector:
    {{- include "nginx.selectorLabels" . | nindent 4 }}

k8s的Helm 工具安装k8s的Helm 工具安装

 升级 release,release 版本加 1

k8s的Helm 工具安装

//回滚
#根据 release 版本回滚

helm history nginx              #查看 release 版本历史

helm rollback nginx 1           #回滚 release 到版本1

helm history nginx           #nginx release 已经回滚到版本 1
REVISION    UPDATED                     STATUS        CHART          APP VERSION    DESCRIPTION     
1           Tue Jan 18 23:43:06 2022    superseded    nginx-0.1.0    1.16.0         Install complete
2           Wed Jan 19 01:02:42 2022    superseded    nginx-0.1.0    1.16.0         Upgrade complete
3           Wed Jan 19 01:04:52 2022    deployed      nginx-0.1.0

k8s的Helm 工具安装

#通常情况下,在配置好 templates 目录下的 kubernetes 清单文件后,后续维护一般只需要修改 Chart.yaml 和 values.yaml 即可。

//在命令行使用 --set 指定参数来部署(install,upgrade)release
#注:此参数值会覆盖掉在 values.yaml 中的值,如需了解其它的预定义变量参数,可查看 helm 官方文档。

helm upgrade nginx nginx --set image.tag='1.15'

2.4 helm 仓库

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

//安装 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-compose

tar zxf harbor-offline-installer-v1.9.1.tgz
cd harbor/

vim harbor.yml
hostname: 192.168.80.13
harbor_admin_password: Harbor12345     #admin用户初始密码
data_volume: /data                     #数据存储路径,自动创建
chart:
  absolute_url: enabled                #在chart中启用绝对url
log:
  level: info
  local:
    rotate_count: 50
    rotate_size: 200M
    location: /var/log/harbor          #日志路径

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

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

//安装 push 插件
#在线安装

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

 #离线安装

wget https://github.com/chartmuseum/helm-push/releases/download/v0.8.1/helm-push_0.8.1_linux_amd64.tar.gz

mkdir ~/.local/share/helm/plugins/helm-push
tar -zxvf helm-push_0.8.1_linux_amd64.tar.gz -C ~/.local/share/helm/plugins/helm-push

helm repo ls

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

#添加仓库

helm repo add harbor http://192.168.80.13/chartrepo/chart_repo --username=admin --password=Harbor12345

#注:这里的 repo 的地址是<Harbor URL>/chartrepo/<项目名称>,Harbor 中每个项目是分开的 repo。如果不提供项目名称, 则默认使用 library 这个项目。

#推送 chart 到 harbor 中

cd /opt/helm
helm push nginx harbor

#查看 chart_repo 项目中的 Helm Charts

原文链接:https://www.cnblogs.com/feizirui/p/17212419.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:k8s的Helm 工具安装 - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • excel2016怎么做数据分析?Excel2016做仓库统计分析的教程

    以下是关于“Excel2016怎么做数据分析?Excel2016做仓库统计分析的教程”的完整攻略: Excel2016数据分析的基础知识 Excel2016是数据分析的利器,通过多种数据分析函数的使用,可以对大量的数据进行整理、分析和展示。以下介绍了Excel2016数据分析的一些常用函数: 1. IF函数 IF函数是判断条件是否成立,如果成立则返回“tru…

    云计算 2023年5月17日
    00
  • ASP.NET中实现Form表单字段值自动填充到操作模型中

    ASP.NET中实现Form表单字段值自动填充到操作模型中 在ASP.NET中,我们可以实现Form表单字段值自动填充到操作模型中。本文将提供一个完整的攻略,包括如何实现自动填充、如何使用例代码内容。 实现自动填充 在ASP.NET中,我们可以实现Form表单字段值自动填充到操作模型中。以下是一个示例说明,演示如何实现自动填充: [HttpPost] pub…

    云计算 2023年5月16日
    00
  • Android API开发之SMS短信服务处理和获取联系人的方法

    在 Android API 开发中,我们可以使用 SMS 短信服务处理和获取联系人的方法。本文将深入浅析这些方法,包括如何发送和接收短信、如何获取联系人信息等。同时,本文将提供两个示例,以帮助读者更好地理解这些方法。 发送和接收短信 要在 Android 中发送和接收短信,我们可以使用 SmsManager 和 BroadcastReceiver 类。具体来…

    云计算 2023年5月16日
    00
  • 玩转云端 | 算力基础设施升级,看天翼云紫金DPU显身手!

      数字时代下,算力成为新的核心生产力,传统以CPU为核心的架构难以满足新场景下快速增长的算力需求,具备软硬加速能力的DPU得以出现并快速发展。天翼云凭借领先的技术和丰富的应用实践自研紫金DPU,打造为云而生的全新一代云计算体系结构,助力算力基础设施升级,赋能海量算力高效释放。 传统数据中心里,所有的数据处理都依赖于CPU的通用计算能力,近10年来,数据带宽…

    云计算 2023年4月22日
    00
  • Pandas数据操作及数据分析常用技术介绍

    Pandas数据操作及数据分析常用技术介绍 一、Pandas简介 Pandas是Python中一个用于数据处理和数据分析的非常流行的库,它提供了强大而且高效的数据处理工具,可以处理结构化和非结构化的数据,特别适合处理表格和关系型数据。Pandas的主要数据结构是Series和DataFrame。 二、数据读取 使用Pandas进行数据处理和分析,首先要将数据…

    云计算 2023年5月18日
    00
  • 云计算学习导学

    待到秋来九月八,我花开后百花杀 云计算的市场发展和未来前景 云计算学习指南 课程目标 适合对象 课程目录 后续学习 云计算的市场发展和未来前景 云计算近些年来,无论是公有云还是私有云都有非常高的增长趋势,并且云计算的市场规模还是很庞大的。 从厂商和国家方面来说,有许多公司和国家都在支持这一行业,特别是国家出台了许多政策支持云计算行业,特别是金融业特别需要这方…

    2023年4月13日
    00
  • 淘宝前端团队谈前端工程化的云构建

    淘宝前端团队谈前端工程化的云构建是指将前端团队的工程化建设部分,通过云服务平台实现。 整个过程分为以下几步: 1.环境搭建 首先需要搭建一个基于云服务平台的“云构建”环境,可以选择阿里云CodePipeline、腾讯云DevOps等常见云服务平台。 例如,如果我们选择用阿里云的CodePipeline,我们需要完成以下几个步骤: 1)创建项目;2)选择代码源…

    云计算 2023年5月17日
    00
  • Python如何通过ip2region解析IP获得地域信息

    一、IP2Region简介 IP2Region是一个使用纯真IP库的第三方开源Python库,它可以快速地将IP地址解析为具体的地域信息,包括省份、城市、区域、邮编、经纬度等。 二、安装IP2Region 在Python中安装IP2Region只需要使用pip命令即可,使用以下命令进行安装: pip install ip2region 三、使用IP2Regi…

    云计算 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部