k8s学习--chart包开发(创建chart包)

文章目录


chart包

本次将创建两种chart包分别是可配置和不可配置chart包

可配置chart包和不可配置chart包在特性和使用场景上有显著区别。以下是两者的特点:
可配置chart包

特点
高度灵活: 用户可以通过各种参数和选项来自定义图表的外观和行为,包括颜色、样式、标注、轴标签等。
丰富的功能: 通常提供广泛的图表类型和高级特性,如交互式图表、动态数据更新、多维数据展示等。
复杂的API: 由于功能丰富,这类包的API可能较为复杂,需要用户花时间学习和理解。
适应性强: 适用于需要精细控制和自定义的场景,特别是需要符合品牌或设计标准的项目。
示例
Matplotlib (Python): 提供极高的自定义能力,可以控制几乎所有图表元素。
D3.js (JavaScript): 非常灵活和强大,适用于创建复杂的交互式数据可视化。
Plotly (Python, JavaScript): 支持交互式图表,并提供丰富的配置选项。

不可配置chart包

特点
易于使用: API简单,通常提供默认的图表样式和设置,用户可以快速生成图表。
快速实现: 由于无需过多配置,生成图表的过程更快,适合快速展示数据。
有限的自定义: 提供的自定义选项较少,图表外观和行为更多依赖于包的默认设置。
适用性较窄: 适用于需要快速生成基本图表的场景,特别是无需复杂自定义的项目。
示例
Seaborn (Python): 在Matplotlib基础上封装了默认的样式和主题,适合快速生成统计图表。
Google Charts (JavaScript): 提供一系列易于使用的图表,适合简单的可视化需求。
Chart.js (JavaScript): 虽然提供了一些自定义选项,但相较于D3.js等,更注重易用性和快速实现。

选择指南

如果项目需要高水平的定制和控制,应选择可配置chart包。

如果项目时间紧张或需求较为简单,应选择不可配置chart包,以便快速实现。

应用

环境

虚拟机

Ip 主机名 cpu 内存 硬盘
192.168.10.11 master01 2cpu双核 4G 100G
192.168.10.12 worker01 2cpu双核 4G 100G
192.168.10.13 worker02 2cpu双核 4G 100G

版本 centos7.9

已部署k8s-1.27

一、安装helm客户端工具

具体命令解释请看,这里不再过多描述

链接: k8s学习--helm的详细解释及安装和常用命令

复制代码
wget https://get.helm.sh/helm-v3.13.2-linux-amd64.tar.gz
tar xf helm-v3.13.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
helm version
helm repo add stable http://mirror.azure.cn/kubernetes/charts/
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm repo list

二、chart包目录结构

首先了解一下包的目录结构

创建一个新的chart并查看目录结构

复制代码
helm create test
tree test

下载一个chart,并查看目录

复制代码
helm pull stable/mysql
tar xf mysql-1.6.9.tgz
ls mysql
复制代码
ls -l mysql/templates/

文件说明

文件 说明
Chart.yaml 用于描述Chart的基本信息;helm show chart stable/mysql命令查看的内容就是此文件内容
values.yaml Chart的默认配置文件;helm show values stable/mysql命令查看的内容就是此文件内容
README.md [可选]当前Chart的介绍
LICENS [可选] 协议
requirements.yaml [可选] 用于存放当前Chart依赖的其它Chart的说明文件
charts/ [可选]: 该目录中放置当前Chart依赖的其它Chart
templates/ [可选]:部署文件模版目录

三、创建不可配置的chart

1.创建目录和chart.yaml

chart.yaml用于描述基本信息

复制代码
mkdir -p /helm/nginx/templates
cd /helm/nginx/
vim Chart.yaml
\ 复制代码
name: helm-nginx
version; 1.0.0
apiVersion: v1
appVersion: "1.0"
description: A helm chart for kubernetes
2.创建deployment.yaml
复制代码
vim templates/deployment.yaml
\ 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helm-nginx
spec:
  replicas: 1                               
  selector:
    matchLabels:
      app: helm-nginx
  template:
    metadata:
      labels:
        app: helm-nginx
    spec:
      containers:
      - name: helm-nginx
        image: nginx:1.20
        imagePullPolicy: IfNotPresent
3.创建service.yaml
复制代码
apiVersion: v1
kind: Service
metadata:
  name: helm-nginx
spec:
  selector:
    app: helm-nginx
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
4.使用chart安装应用
复制代码
helm install /helm/nginx --generate-name
5.查看和验证
复制代码
helm ls
复制代码
kubectl get pods,service
复制代码
curl 10.106.176.236

可以看到网页内容

四、创建可配置的Chart

1.官方的预定义变量

Release 相关变量

Release.Name:Release 的名称。

Release.Time:Release 创建的时间。

Release.Namespace:Release 安装的命名空间。

Release.Service:Release 所使用的 Helm 服务(一般是 Helm)。

Release.IsUpgrade:布尔值,表示是否是一次升级操作。

Release.IsInstall:布尔值,表示是否是一次安装操作。
Chart 相关变量

Chart.Name:Chart 的名称。

Chart.Version:Chart 的版本。

Chart.AppVersion:Chart 应用程序的版本。

Chart.Description:Chart 的描述信息。
Values 相关变量

Values:包含用户提供的所有值的对象,可以通过 Values. 访问特定的值。
Files 相关变量

Files:访问 Chart 文件的方法,支持如下操作:

Files.Get:获取特定文件的内容。

Files.GetBytes:以字节数组形式获取文件内容。
Capabilities 相关变量

Capabilities.KubeVersion:Kubernetes 集群的版本信息。

Capabilities.HelmVersion:Helm 的版本信息。

Capabilities.APIVersions:支持的 API 版本集合。
Template 相关变量

Template.Name:当前模板的名称。

2.新增values.yaml文件

为了避免影响,先删除上个chart

注:不要删除文件

复制代码
helm ls
helm uninstall nginx-1718691772

然后确定位置

复制代码
pwd
复制代码
vim values.yaml
\ 复制代码
image:
  repository: nginx
  tag: '1.20'
replicas: 2
3.配置deploy引用values的值
复制代码
vim templates/deployment.yaml

更改为

\ 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helm-nginx
spec:
  replicas: {{ .Values.replicas }}
  selector:
    matchLabels:
      app: helm-nginx
  template:
    metadata:
      labels:
        app: helm-nginx
    spec:
      containers:
      - name: helm-nginx
        image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
        imagePullPolicy: IfNotPresent
4.测试

(1)直接应用测试

deployment.yaml将直接使用values.yaml中的配置

复制代码
helm install helm-nginx-new /helm/nginx
复制代码
kubectl get pods

(2)通过命令行设置变量后干运行测试

通过在命令行设置变量为deployment.yaml赋值,使用--set选项,使用--dry-run选项来打印出生成的清单文件内容,而不执行部署

复制代码
helm uninstall helm-nginx-new
helm install helm-nginx --set replicas=3 /helm/nginx/ --dry-run

可以看到传参成功了

replicas

image 处

复制代码
helm install helm-nginx --set replicas=3 /helm/nginx
复制代码
helm ls
复制代码
kubectl get all
5.将Chart包进行打包

将chart打包成一个压缩文件,便于存储与分享。

复制代码
helm package .
ls

打包出mychart-0.1.0.tgz文件

6.使用Chart安装

删除之前的helm-nginx实例

复制代码
helm ls
helm uninstall helm-nginx

安装

复制代码
helm install helm-nginx2 helm-nginx-1.0.0.tgz 
复制代码
kubectl get all

总结

创建 Helm Chart 包的过程涉及到理解 Helm 的基本概念、目录结构、模板语法和一些常见的 Helm 操作命令。通过以上步骤和示例,你应该能够创建和管理自己的 Helm Chart,以便在 Kubernetes 中管理应用程序。

相关推荐
小猿姐1 小时前
闲谈KubeBlocks For MongoDB设计实现
mongodb·云原生·kubernetes
thinktik3 小时前
AWS EKS 集成Load Balancer Controller 对外暴露互联网可访问API [AWS 中国宁夏区]
后端·kubernetes·aws
tryCbest3 小时前
Linux使用Docker部署项目后期更新
linux·运维·docker
Main. 243 小时前
从0到1学习Qt -- 创建第一个Hello World项目
学习
壹号用户3 小时前
python学习之生成器&三者关系
学习
new coder3 小时前
[c++语法学习]Day10:c++引用
开发语言·c++·学习
星域智链4 小时前
宠物智能用品:当毛孩子遇上 AI,是便利还是过度?
人工智能·科技·学习·宠物
忧郁的橙子.4 小时前
十六、kubernetes 1.29 之 集群安全机制
安全·容器·kubernetes
呱呱巨基4 小时前
vim编辑器
linux·笔记·学习·编辑器·vim
"菠萝"4 小时前
C#知识学习-017(修饰符_6)
学习·c#