searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

弹性计算基于k8s的chart改造的最佳实践

2023-10-13 07:12:09
20
0

1. helm 基本介绍

1.1 helm 项目

Helm 帮助您管理 Kubernetes 应用—— Helm Chart,即使是最复杂的 Kubernetes 应用程序,都可以帮助您定义,安装和升级。Helm Chart 易于创建、发版、分享和发布,所以停止复制粘贴,开始使用 Helm 吧。Helm 是 CNCF 的毕业项目,由 Helm 社区维护。

优势:

复杂性管理

即使是最复杂的应用,Helm Chart 依然可以描述, 提供使用单点授权的可重复安装应用程序。

易于升级

随时随地升级和自定义的钩子消除您升级的痛苦。

分发简单

Helm Chart 很容易在公共或私有化服务器上发版,分发和部署站点。

回滚

使用 helm rollback 可以轻松回滚到之前的发布版本。

1.2 helm 基本原理

  • helm cli: 一个命令行工具,用于本地开发及管理chart,chart仓库管理等
  • tiller:  是 Helm 的服务端。Tiller 负责接收 Helm 的请求,与 k8s 的 apiserver 交互,根据chart 来生成一个 release 并管理 release. helm V3 版本已废弃
  • chart: Helm的打包格式叫做chart,所谓chart就是一系列文件, 它描述了一组相关的 k8s 集群资源
  • release : 使用 helm install 命令在 Kubernetes 集群中部署的 Chart 称为 Release.

Helm3 可以支持所有的 Kubernetes 认证及鉴权等全部安全特性。Helm和本地的 kubeconfig flie 中的配置使用一致的权限。管理员可以按照自己认为合适的粒度来管理用户权限,下图可详细看出helm2到helm3的改变

 

2. helm 安装和使用

安装须知:

【1】 保证你的helm 和 k8s/k3s 在一台机器上,或helm 在机器或者容器能够直接调用kubectl命令

【2】安装k8sHelm与您的集群兼容

 

2.1.  使用二进制文件安装

#1.本人机器是mac m1, m1 

cd /home/

tar zxvf helm-v3.10.0-linux-arm64.tar.gz

cp linux-arm64/helm /usr/local/bin/helm

# 源配置,使用国内源

helm repo add aliyun

helm repo add stable 

helm repo update

root@master:~# helm repo list

NAME    URL                                                  

stable          

aliyun  

 

2.2  helm 常用使用命令

#查看环境信息

helm env

#查看版本信息

helm version

#查找软件

helm search repo nginx

helm search hub  nginx

#查看已有仓库列表

helm repo list

#更新仓库资源

helm repo update

#删除一个仓库

helm repo remove bitnami

#创建仓库索引

helm repo index /root/helm/repo

#部署chart

helm install  centos-nginx bitnami/nginx

#chart状态查看

helm status centos-nginx

#卸载chart

helm uninstall centos-nginx

#查看chart列表    -A 表所有namespace

helm list -A

#chart部署记录

helm history centos-nginx

#chart更新

helm upgrade --set image.tag=nginx.18 centos-nginx bitnami/nginx

#chart回滚

helm rollback centos-nginx 1

3. helm chart 包快速构建和调试

root@master:~/helm# tree -L 2 airflow

airflow

├── Chart.yaml

├── README.md

├── charts

│   ├── postgresql

│   └── redis

├── requirements.lock

├── requirements.yaml

├── templates

│   ├── NOTES.txt

│   ├── _helpers.tpl

│   ├── config

│   ├── extra-manifests.yaml

│   ├── flower

│   ├── pvc-logs.yaml

│   ├── pvc.yaml

│   ├── rbac

│   ├── scheduler

│   ├── webserver

│   └── worker

└── values.yaml

# ------------------------------------ #

 

# Chart.yaml:用于描述这个 Chart 的基本信息,包括名字、描述信息以及版本等。

# values.yaml:用于存储 templates 目录中模板文件中用到变量的值。

# Templates:目录里面存放所有 yaml 模板文件, 。

# charts:目录里存放这个 chart 依赖的所有子 chart。

# requirements.lock, requirements.yaml helm v2 将模块依赖注册在这里,V3 版本部署以来注册在Charts.yaml

# NOTES.txt:用于介绍 Chart 帮助信息,helm install 部署后展示给用户。例如:如何使用这个 Chart、列出缺省的设置等。

# _helpers.tpl:放置模板助手的地方,可以在整个 chart 中重复使用。

3.1 快速开始,hello world demo

  • 快速构建一个 简单实例

 

helm create mychart

rm -rf mychart/templates/*

 

 

创建一个名为 mychart/templates/configmap.yaml的文件开始,模板命令 {{ .Release.Name }} 将发布名称注入了模板。值作为一个 命名空间对象 传给了模板,用点(.)分隔每个命名空间的元素。

Release前面的点表示从作用域最顶层的命名空间开始(稍后会谈作用域)。这样.Release.Name就可解读为“通顶层命名空间开始查找 Release对象,然后在其中找Name对象.

  • Chart.yaml 定义

 

核心关注参数: 

  • version: chart 包版本,必需要参数
  • apiVersion: helm api server 调用的版本,必需要参数
  • name: 包名称, 必需要参数
  • appVersion: 应用版本,非必需参数

从开发维护角度来说,可添加如下参数:

  • maintainers: 开发和维护者信息
  • description: 包的用途和描述说明

 

  • Vayaml 定义

 

主要定义参数:

  • 副本集定义
  • 镜像 :仓库地址和版本tag 定义
  • service 定义
  • 服务探活: readiness, liveness
  • 资源限制:resouce
  • 机器标签: nodeSelector
  • 资源亲和:Affinity

3.2 chart 快速调试

  • 可以使用 helm install --debug --dry-run <helm-release-name>  <helm-chart-path>

 

 

  • 现在安装资源,可以立即看到模板命令的结果

 

4. helm + chart的最佳实践(gostack-api)

4.1  命名规范

类型

定义格式

示例

node label

region级别:

${svc_name}.ctyun.io/${region_group}: ${region_group}

AZ级别:

${svc_name}.ctyun.io/${az_group}: ${az_group}

region:

haproxy.ctyun.io/region-control: region-control

az:

gostack.ctyun.io/group-control: {{ .Release.Namespace }}-control-group

sevice label

io.kompose.service: ${service_name}

labels:

    io.kompose.service: gostack-api

  name: gostack-api

svc

region级别:

${svc_name}.default.svc.cluster.netaz级别:

${svc_name}.${az_namespace}.svc.cluster.net

 

 

4.2  chart 模版快速创建

  • 快速构建chart包模版

 

 

 

 

 

 

 

4.3  chart 编写

  • configmap 定义:对应模版文件  {{xx}}-configmap.yaml

 

  • service 定义:对应模版文件  {{xx}}-service.yaml

 

  • deployment定义:对应模版文件  {{xx}}-deployment.yaml

 

 

 

  • values定义:对应模版文件 yaml

 

  • chart 包调试(dryrun 模式)

 

调试结束后,可以下发真是的安装

0条评论
0 / 1000