第七章 自定义Chart并部署一个应用

简介: 第七章 自定义Chart并部署一个应用

1.创建自定义模板 helm create <模板名称>

helm create mychart 是一个用于创建一个新的 Helm chart 的命令。Helm 是 Kubernetes 的包管理器,用于定义、安装和升级 Kubernetes 应用。

当你运行 helm create mychart 命令时,Helm 会创建一个新的目录结构,其中包含一个基本的 Helm chart。这个 chart 是一个用于定义 Kubernetes 应用的模板,它包含许多有用的文件和文件夹,如 Chart.yaml(描述 chart 的元数据),values.yaml(用于存储默认值和提示用户输入的提示)和 templates/(定义 Kubernetes 资源对象的模板)。

使用命令创建了 chart,可以使用 helm package 命令将其打包为 .tgz 文件,使用 helm install 或 helm upgrade 命令将安装到 Kubernetes 集群中。

# 使用命令创建自定义 chart 包
[root@master01 hpro]# helm create mychart
Creating mychart
[root@master01 hpro]#
[root@master01 hpro]#
 
# 可以看到已经创建了
[root@master01 hpro]# ls
mychart
 
# 文件包跟以前拉取的包没有什么区别
# 文件作用前面已经讲过
[root@master01 hpro]# cd mychart/
[root@master01 mychart]# ls
charts  Chart.yaml  templates  values.yaml
 
### 文件中
#  Chart.yaml 存放chrat属性信息
# templates 编写yaml文件
# yaml 文件可以使用全局变量
# templates 把这个文件清空使用k8s快速创建
 
 

2.清空 templates 文件夹使用 k8s命令导出YAML

# 清空 templates 文件夹
 
[root@master01 mychart]# cd templates/
[root@master01 templates]# ls
deployment.yaml  _helpers.tpl  hpa.yaml  ingress.yaml  NOTES.txt  serviceaccount.yaml  service.yaml  tests
 
# 可以看到已经清空
[root@master01 templates]# rm -rf *
[root@master01 templates]# ls

3.接着我们用命令创建YAML

# 前提是同学们有k8s基础啊
 
kubectl create deploy web-test --image=nginx --dry-run -o yaml > web-deploy.yaml
 

这条命令是在 Kubernetes 集群中创建一个新的部署(Deployment)对象,创建一个名为 web-test ,并使用 nginx 镜像作为容器的基础。命令解释如下:

  • kubectl: 这个就不多说了。
  • create: 用于创建新的资源对象。
  • deploy: 表示创建的是一个 Deployment 对象,即一种在集群中自动扩展和管理的应用程序容器化实例的资源。
  • web-test: 自定义的 Deployment 的名称。
  • --image=nginx: 指定容器镜像为 nginx
  • --dry-run: 模拟执行命令,而不会真正地创建资源。可以在不实际创建对象的情况下查看输出结果。
  • -o yaml: 这将输出格式设置为 YAML,用于配置文件和数据序列化。
  • > web-deploy.yaml: 这将输出重定向到名为 web-deploy.yaml 的文件中。如果该文件已存在,它将被覆盖;如果不存在,它将被创建。

4. 快速创建svc

kubectl expose deployment web-test --port=80 --target-port=80 --type=NodePort --dry-run -o yaml > servics.yaml

这条命令用于在 Kubernetes 集群中暴露一个已存在的 Deployment(在本例中为 web-test),并获取其服务定义。命令解释如下:

  • kubectl: 这个就不多说了。
  • expose: 用于将一个或多个 Pod 暴露为 Kubernetes 服务。
  • deployment web-test: 表示资源名为 web-test 的 Deployment。
  • --port=80: 指定要暴露的端口号为 80。
  • --target-port=80: 指定目标端口号也为 80,通常用于匹配容器内运行的服务的端口。
  • --type=NodePort: 指定要创建的服务类型为 NodePort。
  • --dry-run: 模拟执行命令,而不会真正地创建资源。可以在不实际创建对象的情况下查看输出结果。
  • -o yaml: 这将输出格式设置为 YAML,这是一个人类可读的格式,常用于配置文件和数据序列化。
  • > servics.yaml: 重定向到名为 servics.yaml 的文件中。如果该文件已存在,将被覆盖;如果不存在,它将被创建。

5.这是我使用 k8s快速创建命令创建的,在(templates)文件夹下

[root@master01 templates]# ls
servics.yaml  web-deploy.yaml

6.使用helm创建自定义的模板 helm install <自定义名字> <文件夹>

# 使用Helm创建
[root@master01 hpro]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:10:06 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
 
 
# 可以看到创建的 pod和svc 
[root@node1 test]# kubectl get svc -A
NAMESPACE     NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default       kubernetes            ClusterIP   10.96.0.1        <none>        443/TCP                  203d
default       web-test              NodePort    10.103.178.251   <none>        80:30187/TCP             39s
[root@node1 test]# kubectl get pod -A
NAMESPACE     NAME                                 READY   STATUS              RESTARTS   AGE
default       nginx-dep1-cf6cfcf66-2sh46           0/1     Completed           0          37d
default       web-test-5f547489c6-rm5c8            0/1     ContainerCreating   0          63s

6.通过helm卸载 helm uninstall  <应用名称>

# 通过helm卸载
[root@node1 test]# helm uninstall web1
release "web1" uninstalled

7.版本记录 helm upgrade <自定义名字> <文件夹>

[root@master01 hpro]# helm install web1 mychart/
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:14:16 2024
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
 
# 如果helm中yaml修改了要升级使用-可以看到 REVISION: 2 是2了
[root@master01 hpro]# helm upgrade web1 mychart/
Release "web1" has been upgraded. Happy Helming!
NAME: web1
LAST DEPLOYED: Sun Jan 14 01:14:23 2024
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
第八章 Helm 模板高效互用动态参数生成
第八章 Helm 模板高效互用动态参数生成
104 1
|
7月前
|
Kubernetes NoSQL Redis
第五章 使用Helm部署一个应用
第五章 使用Helm部署一个应用
157 2
|
Kubernetes 安全 Linux
开源Chart包安全分析发布,阿里云视角容器安全基线的重要性
云原生环境下,容器成为了软件开发过程中打包与分发的标准。
316 0
开源Chart包安全分析发布,阿里云视角容器安全基线的重要性
|
定位技术 数据安全/隐私保护
MIKE 21 教程 1.3 网格搭建界面介绍之网格生成 (Mesh Generator 工具)
MIKE 21 教程 1.3 网格搭建界面介绍之网格生成 (Mesh Generator 工具)
|
Kubernetes 搜索推荐 应用服务中间件
【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板
chart:代表helm包,包含在 Kubernetes 集群内部运行应用程序,工具或服务所需的所有资源定义。 Repository(仓库):用来存放和共享 charts 的地方。 Release :运行在 Kubernetes 集群中的 chart 的实例,一个 chart 通常可以在同一个集群中安装多次,每一次安装都会创建一个新的 release。
521 1
【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板
MIKE 21 教程 1.2 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具)
MIKE 21 教程 1.2 网格搭建界面介绍之点线面要素的高阶处理 (Mesh Generator 工具)
|
消息中间件 域名解析 Kubernetes
Kubernetes ExternalName的使用场景例子及配置步骤
Kubernetes 的 ExternalName 是一种用于将 Kubernetes 集群中的服务映射到集群外部服务的机制。它通常用于将集群内的服务与集群外部的服务进行互联,比如连接到外部数据库、消息队列或者其他无法直接暴露在集群中的服务。 以下是一个使用场景的例子:假设你的应用程序需要连接到一个名为 "external-service.example.com" 的外部服务,该服务可能是在 Kubernetes 集群之外运行的数据库或其他类型的服务。你可以使用 ExternalName 来将该外部服务暴露给 Kubernetes 集群内的其他服务。 下面是配置步骤: 1. 创建一个 `
1476 0
|
定位技术 数据安全/隐私保护
MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 (Mesh Generator 工具)
MIKE 21 教程 1.1 网格搭建界面介绍之点线面的创建 (Mesh Generator 工具)
|
JSON 测试技术 数据格式
2022/9/5开始第三版接口自动化(yaml用例)测试框架(记录搭建过程)(这个废弃了)
2022/9/5开始第三版接口自动化(yaml用例)测试框架(记录搭建过程)(这个废弃了)
|
Kubernetes Cloud Native Linux
Helm Chart 多环境、多集群交付实践,透视资源拓扑和差异
在本文中,我们将介绍如何通过 KubeVela解决多集群环境下 Helm Chart 的部署问题。如果你手里没有多集群也不要紧,我们将介绍一种仅依赖于 Docker 或者 Linux 系统的轻量级部署方式,可以让你轻松的体验多集群功能。当然,KubeVela 也完全具备单集群的 Helm Chart 交付能力。
3801 12
Helm Chart 多环境、多集群交付实践,透视资源拓扑和差异

热门文章

最新文章

相关实验场景

更多