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: {}

相关推荐
Patrick_Wilson2 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生2 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
云恒要逆袭2 天前
运行你的第一个Docker容器
后端·docker·容器
Java之美3 天前
一次k8s升级引发的DevicePlugin注册失败
云原生·kubernetes
程序员老赵4 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
武子康7 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
通信小呆呆10 天前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
H__Rick10 天前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee10 天前
量化学习-第1章-什么是量化金融
学习·金融·datawhale