K8S-Helm简单学习分享

helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。

Helm本质就是让k8s的应用管理(Deployment、Service等)可配置,能动态生成。通过动态生成K8S资源清单文(deployment.yaml、service.yaml)。然后kubectl自动调用K8S资源部署。

Helm,避免了我们去完成同样的资源对象在到多个环境中配置和维护过程。它能够把这些零零散散的应用资源文件放在一起进行统一配置,极大方便了开发人员对K8s集群应用的管理。

Helm 组件及相关术语

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

  • Helm:Helm 是一个命令行下的客户端工具。主要用于 Kubernetes 应用程序 Chart 的创建、打包、发布以及创建和管理本地和远程的 Chart 仓库。

  • Tiller:Tiller 是 Helm 的服务端,部署在 Kubernetes 集群中。Tiller 用于接收 Helm 的请求,并根据 Chart 生成 Kubernetes 的部署文件( Helm 称为 Release ),然后提交给 Kubernetes 创建应用。Tiller 还提供了 Release 的升级、删除、回滚等一系列功能。

  • Chart:Helm 的软件包,采用 TAR 格式。类似于 APT 的 DEB 包或者 YUM 的 RPM 包,其包含了一组定义 Kubernetes 资源相关的 YAML 文件。Chart有特定的文件目录结构,如果开发者想自定义一个新的 Chart,只需要使用Helm create命令生成一个目录结构即可进行开发。

  • Repoistory:Helm 的软件仓库,Repository 本质上是一个 Web 服务器,该服务器保存了一系列的 Chart 软件包以供用户下载,并且提供了一个该 Repository 的 Chart 包的清单文件以供查询。Helm 可以同时管理多个不同的 Repository, 官方仓库的地址是https://hub.helm.sh

  • Release:使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release。

1、Chart Install 过程:

  • Helm从指定的目录或者tgz文件中解析出Chart结构信息

  • Helm将指定的Chart结构和Values信息通过gRPC传递给Tiller

  • Tiller根据Chart和Values生成一个Release

  • Tiller将Release发送给Kubernetes用于生成Release

2、Chart Update过程:

  • Helm从指定的目录或者tgz文件中解析出Chart结构信息

  • Helm将要更新的Release的名称和Chart结构,Values信息传递给Tiller

  • Tiller生成Release并更新指定名称的Release的History

  • Tiller将Release发送给Kubernetes用于更新Release

3、Chart Rollback过程:

  • Helm将要回滚的Release的名称传递给Tiller

  • Tiller根据Release的名称查找History

  • Tiller从History中获取上一个Release

  • Tiller将上一个Release发送给Kubernetes用于替换当前Release

配置验证

需要helm压缩包(可以在github/helm/helm按照需求下载)

将文件解压:tar xf helm-v4.2.0-linux-amd64.tar.gz

进入目录:cd linux-amd64/

将命令添加到:cp helm /usr/local/sbin/

执行命令 helm

创建nginx-pod: helm create nginx

镜像拉取方式,也可以拉取本地镜像

service类型和端口号

ingress默认未开启

打开可以做资源限制

探针的编写,存活探针和就绪探针

自动调度,HPA配置,pod的最小数和最大数,cpu的平均使用率和内存的平均使用率

挂卷,外部存储放在哪

进入到nginx目录中可以创建

helm install nginx .

验证,访问地址

更改values.yaml文件,replicaCount: 5 之后不能用创建,要用更新

回滚操作

helm search repo mysql

在你本地已经添加的所有 Helm 仓库里,搜索有没有 mysql 相关的安装包(Chart 包)

Default values for nginx.

This is a YAML-formatted file.

Declare variables to be passed into your templates.

==============================================

1. 副本数配置

==============================================

Pod 副本数量

replicaCount: 5

==============================================

2. 容器镜像配置

==============================================

image:

镜像仓库地址

repository: nginx

镜像拉取策略:Always/IfNotPresent/Never

pullPolicy: IfNotPresent

镜像标签(为空则使用 Chart 默认 appVersion)

tag: ""

拉取私有镜像所需的 Secret 名称(数组)

imagePullSecrets: []

覆盖资源名称(短名称)

nameOverride: ""

覆盖资源完整名称

fullnameOverride: ""

==============================================

3. ServiceAccount 配置

==============================================

serviceAccount:

是否自动创建 ServiceAccount

create: true

是否自动挂载 API 凭证到 Pod

automount: true

ServiceAccount 注解

annotations: {}

ServiceAccount 名称(不填则自动生成)

name: ""

==============================================

4. Pod 元数据配置

==============================================

Pod 注解

podAnnotations: {}

Pod 标签

podLabels: {}

==============================================

5. 安全上下文

==============================================

Pod 级别安全上下文

podSecurityContext:

容器文件系统属组

fsGroup: 2000

容器级别安全上下文

securityContext:

移除所有 Linux 能力权限

capabilities:

drop:

  • ALL

根文件系统只读

readOnlyRootFS: true

以非 root 用户运行

runAsNonRoot: true

运行用户 UID

runAsUser: 1000

==============================================

6. Service 服务暴露配置

==============================================

service:

Service 类型:ClusterIP / NodePort / LoadBalancer / ExternalName

type: NodePort

Service 内部端口

port: 80

容器端口(对应 Pod 端口)

targetPort: 80

NodePort 固定端口(仅 type=NodePort 时可用,不指定则自动分配)

nodePort: ""

Service 注解

annotations: {}

==============================================

7. Ingress 外部访问配置

==============================================

ingress:

是否启用 Ingress

enabled: false

Ingress 控制器类名

className: ""

Ingress 注解

annotations: {}

域名与路径配置

hosts:

  • host: chart-example.local

paths:

  • path: /

pathType: ImplementationSpecific

HTTPS 证书配置

tls: []

==============================================

8. Gateway API HTTPRoute(新一代网关)

==============================================

httpRoute:

enabled: false

annotations: {}

parentRefs:

  • name: gateway

sectionName: http

hostnames:

  • chart-example.local

rules:

  • matches:

  • path:

type: PathPrefix

value: /headers

==============================================

9. 资源限制(CPU / 内存)

==============================================

resources:

资源上限

limits:

cpu: 100m

memory: 128Mi

资源申请(启动预留)

requests:

cpu: 100m

memory: 128Mi

==============================================

10. 健康检查(存活 + 就绪探针)

==============================================

livenessProbe:

httpGet:

path: /

port: http

启动后等待时间

initialDelaySeconds: 30

检查间隔

periodSeconds: 10

超时时间

timeoutSeconds: 5

失败阈值

failureThreshold: 3

readinessProbe:

httpGet:

path: /

port: http

initialDelaySeconds: 5

periodSeconds: 10

timeoutSeconds: 5

failureThreshold: 3

==============================================

11. 自动扩缩容 HPA

==============================================

autoscaling:

enabled: false

minReplicas: 1

maxReplicas: 100

targetCPUUtilizationPercentage: 80

targetMemoryUtilizationPercentage: 80

==============================================

12. 存储卷挂载

==============================================

额外存储卷

volumes: []

容器内挂载路径

volumeMounts: []

==============================================

13. 节点调度配置

==============================================

节点选择器

nodeSelector: {}

污点容忍度

tolerations: []

节点亲和性 / Pod 亲和性

affinity: {}

相关推荐
NNYSJYKJ1 小时前
告别刷题无效与偏科:脑能模型解锁 K12 学习底层能力构建
学习
凌云若寒1 小时前
BarTender许可 | 关于PDF打印数量说明
学习·pdf·产品经理·制造·软件需求
一只机电自动化菜鸟2 小时前
一建机电备考笔记(36) 焊接技术—焊接方法与工艺(含考频+题型)
笔记·学习·职场和发展·生活·学习方法
乖硅不乖2 小时前
Dummy七日学习(七)
学习
知识分享小能手2 小时前
R语言入门学习教程,从入门到精通,R语言获取数据 (8)
开发语言·学习·r语言
sensen_kiss2 小时前
CAN302 Technologies for E-Commerce 电子商务技术 Pt.8 网络安全(Secure the Web)
网络·学习·安全·web安全
通信小呆呆2 小时前
注意力机制用于信号同步:从匹配滤波到可学习对齐
人工智能·学习·机器学习·信息与通信
ziqi5222 小时前
Docker compose 和共享数据
运维·docker·容器
YangYang9YangYan3 小时前
2026运营岗位学习数据分析对于提升个人能力的价值
学习·数据挖掘·数据分析