iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >helm实战之开发Chart
  • 205
分享到

helm实战之开发Chart

实战helmChart 2023-01-31 08:01:21 205人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

在kubernetes环境中使用Helm来管理应用颇为方便,今天一起来开发一个Chart,这样的实战可加深对Chart的理解,今后在使用第三方的Chart时,不论学习还是修改都会更加得心应手;环境信息实战环境的版本信息如下,请确保以下软件都

kubernetes环境中使用Helm来管理应用颇为方便,今天一起来开发一个Chart,这样的实战可加深对Chart的理解,今后在使用第三方的Chart时,不论学习还是修改都会更加得心应手;

环境信息

实战环境的版本信息如下,请确保以下软件都已运行正常:

操作系统Centos linux release 7.6.1810
Kubernetes:1.18.1
Helm:2.16.6

 

关于Helm安装,请参考文章:

https://www.cnblogs.com/xiao987334176/p/12752783.html

 

1. 执行命令helm create Tomcat,会创建一个tomcat目录,里面的内容如下:

# helm create tomcat
Creating tomcat
[root@k8s-master ~]# tree tomcat
tomcat
├── charts
├── Chart.yaml
├── templates
│   ├── deployment.yaml
│   ├── _helpers.tpl
│   ├── ingress.yaml
│   ├── NOTES.txt
│   ├── serviceaccount.yaml
│   ├── service.yaml
│   └── tests
│       └── test-connection.yaml
└── values.yaml
directories, 9 files

 

2. template目录中的deployment.yaml、service.yaml这些文件的内容,和我们平时创建pod和service时编写的yaml文件类似,不同之处在于很多配置的值并非固定,而是用变量代替了。

以deployment.yaml中的镜像名称为例,如下红色文字所示:

# cat tomcat/templates/deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
...
      containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.securityContext | nindent 12 }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
...

上面红色文字中的变量是在tomcat/values.yaml中定义的,如下图红框所示,只要我们修改了其中的内容,也就完成了depoloyment.yaml中镜像的设置

 

修改配置

1. 修改tomcat/values.yaml的内容,包括Pod镜像和版本、Service的类型

vi tomcat/values.yaml

修改image和service,如下面的两个红色文字中的内容:

...
image:
  repository: tomcat
  tag: 8.5.54-jdk8-openjdk
  pullPolicy: IfNotPresent

...
service:
  type: nodePort
  port: 8080
...

说明:

image 实际下载的镜像是 tomcat:8.5.54-jdk8-openjdk

service 采用Nodeport方式暴露

 

2. 此次实战并没有准备好存活探针和就绪探针,所以这两个配置也要去掉,否则会导致创建Kubernetes判定创建Pod失败,修改方法是将deployment.yaml中如下内容全部删除:

livenessProbe:
  HttpGet:
    path: /
    port: http
readinessProbe:
  httpGet:
    path: /
    port: http

 

3. 修改template/deployment.yaml中的内容

vi tomcat/templates/deployment.yaml

将端口从80改为8080,如下红色文字所示:

spec:
    {{- with .Values.imagePullSecrets }}
      imagePullSecrets:
        {{- toYaml . | nindent 8 }}
    {{- end }}
      serviceAccountName: {{ template "tomcat.serviceAccountName" . }}
      securityContext:
        {{- toYaml .Values.podSecurityContext | nindent 8 }}
      containers:
        - name: {{ .Chart.Name }}
          securityContext:
            {{- toYaml .Values.securityContext | nindent 12 }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}
          ports:
            - name: http
              containerPort: 8080
              protocol: tcp
          resources:
            {{- toYaml .Values.resources | nindent 12 }}

至此,修改完毕,接下来尝试部署到Kubernetes环境;

 

检查和部署

1. 在tomcat文件夹所在目录,输入以下命令,可以看到将values.yaml的值填写到deployment.yaml、service.yaml后的最终效果:

# helm install --dry-run --debug tomcat
[debug] Created tunnel using local port: '33793'

[debug] SERVER: "127.0.0.1:33793"

[debug] Original chart version: ""
[debug] CHART PATH: /root/tomcat
...

篇幅所限只展示了一部分输出,可见设置的值已经生效;

 

2. 执行命令helm install tomcat,即可部署当前的Chart到Kubernetes环境,控制台输出如下:

# helm install tomcat
NAME:   donating-indri
LAST DEPLOYED: Wed Apr 22 17:25:56 2020
NAMESPACE: default
STATUS: DEPLOYED

RESOURCES:
==> v1/Deployment
NAME                   READY  UP-TO-DATE  AVAILABLE  AGE
donating-indri-tomcat  0/1    1           0          0s

==> v1/Pod(related)
NAME                                    READY  STATUS             RESTARTS  AGE
donating-indri-tomcat-7bf85f5b9f-7hpxw  0/1    ContainerCreating  0         0s

==> v1/Service
NAME                   TYPE      CLUSTER-IP  EXTERNAL-IP  PORT(S)         AGE
donating-indri-tomcat  NodePort  10.1.70.1   <none>       8080:31059/TCP  0s

==> v1/ServiceAccount
NAME                   SECRETS  AGE
donating-indri-tomcat  1        0s


NOTES:
1. Get the application URL by running these commands:
  export NODE_PORT=$(kubectl get --namespace default -o JSONpath="{.spec.ports[0].nodePort}" services donating-indri-tomcat)
  export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
  echo http://$NODE_IP:$NODE_PORT

 

3. 根据控制台的提示,我们输入以下命令,即可获取到外部访问此服务的地址:

# export NODE_PORT=$(kubectl get --namespace default -o jsonpath="{.spec.ports[0].nodePort}" services donating-indri-tomcat)P:$NODE_PORT
# export NODE_IP=$(kubectl get nodes --namespace default -o jsonpath="{.items[0].status.addresses[0].address}")
# echo http://$NODE_IP:$NODE_PORT
http://192.168.128.130:31059

我这里得到的地址是:http://192.168.128.130:31059

 

4. 在浏览器输入上述地址,如下图:

1.png

 

 为啥会出现404呢?

因为容器中的 /usr/local/tomcat/WEBapps目录是空的,但是webapps.dist目录时有文件的。

解决办法就是将webapps.dist里面的文件,复制到webapps。

 

 

查看pod

# kubectl get podsNAME                                        READY   STATUS        RESTARTS   AGE
alternating-shark-tomcat-55fb7596d5-wpdkj   1/1     Running       0          82m

复制文件

# kubectl exec -it alternating-shark-tomcat-55fb7596d5-wpdkj /bin/sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl kubectl exec [POD] -- [COMMAND] instead.
# cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps

再次刷新页面

1.png

 

 

5. 自定义Chart开发和验证都完成了,执行命令helm package tomcat即可将整个Chart的配置文件打包,方便在其他环境安装部署;

至此helm开发Chart实战就全部完成了,经历了此番实战,今后学习中如遇到公共仓库有不错的Chart,可用helm fetch xxx
将Chart包下载到本地来研究学习源码和配置,也可自己修改后再在本地install;

如果需要删掉运行中的Chart,需要执行2个步骤

查看当前运行的chart

# helm list
NAME                 REVISION    UPDATED                     STATUS      CHART           APP VERSION    NAMESPACE
alternating-shark    1           Wed Apr 22 17:36:54 2020    DEPLOYED    tomcat-0.1.0    1.0            default

删除

# helm delete alternating-shark
release "alternating-shark" deleted

 

本文参考链接:

https://blog.csdn.net/boling_cavalry/article/details/88759724

https://blog.csdn.net/qq_40891009/article/details/103898876


--结束END--

本文标题: helm实战之开发Chart

本文链接: https://www.lsjlt.com/news/193685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • helm实战之开发Chart
    在Kubernetes环境中使用Helm来管理应用颇为方便,今天一起来开发一个Chart,这样的实战可加深对Chart的理解,今后在使用第三方的Chart时,不论学习还是修改都会更加得心应手;环境信息实战环境的版本信息如下,请确保以下软件都...
    99+
    2023-01-31
    实战 helm Chart
  • Kotlin开发实战之hello world
    工欲善其事必先利其器,工具的安装基于Android studio 2.2.3Kotlin下载安装(这边我已经安装了就不卸载重新装了,搜索到后直接点击install按钮安装,然后重启就Ok了)Kotlin插件的支持在自己引用的build_gr...
    99+
    2023-05-31
    kotlin hello world
  • SpringBoot开发实战之自动配置
    在介绍SpringBoot的自动配置之前,先了解下注解@Import的使用,SpringBoot的@Enable*开头的注解底层依赖于@Import注解导入一些类,使用@Import...
    99+
    2024-04-02
  • SpringBoot开发实战系列之定时器
    前言 定时器功能在项目里面往往会用到,比如定时发送邮件、定时释放数据库资源;这里记录一下springboot对定时器的支持的简单实例 cron表达式 开始之前要先介绍一下cron表...
    99+
    2024-04-02
  • 《Python高效开发实战》实战演练——
    在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能。1)首先在djangosite/app/views.py中建立一个路由响应函数:from django....
    99+
    2023-01-31
    实战 高效 Python
  • SpringBoot开发实战系列之动态定时任务
    目录前言代码编写效果演示  启动修改停止后记前言 定时器是我们项目中经常会用到的,SpringBoot使用@Scheduled注解可以快速启用一个简单的定时器(详情请看我们之前的博客...
    99+
    2024-04-02
  • Python开发之城堡保卫战游戏的实现
    目录实现功能用到的编程知识代码如下部分运行截图实现功能 1:敌人的绵绵不断的前进,拿着各种各样的武器(叉子,斧头,宝剑),挥动武器攻击我方城堡,对我方城堡造成伤害! 2:我方城堡发现...
    99+
    2023-01-14
    Python城堡保卫战游戏 Python城堡保卫战 Python游戏
  • CSS开发实战之道:项目经验带你成为顶尖开发者
    CSS开发实战之道:项目经验带你成为顶尖开发者近年来,互联网技术的快速发展使得网站开发领域变得愈发热门。作为前端开发的一部分,CSS(层叠样式表)在网站的设计和布局中扮演了重要角色。在CSS的世界中,成为一名顶尖的开发者需要不断学习和实践,...
    99+
    2023-11-02
    CSS开发+项目经验+开发者
  • Python开发游戏之井字游戏的实战步骤
    目录前言什么是井字游戏?Python 井字游戏——项目详情先决条件构建 Python 井字游戏的步骤1.初始化游戏组件2.初始化Pygame窗口3.加载和转换...
    99+
    2023-02-04
    python井字棋游戏 python井字棋 python井字棋图形界面
  • Sails.js 实战技巧:Node.js 后端开发的进阶之法
    使用缓存(如 Redis)来存储经常访问的数据。 优化数据库查询,使用索引和适当的联接。 利用 Sails.js 的水线 ORM 来执行高效的查询。 压缩和 minify 前端资产以减少加载时间。 提升安全性 使用 Cross-Si...
    99+
    2024-04-02
  • C#多线程开发实战记录之线程基础
    目录前言线程基础 1、创建线程2、暂停线程3、线程等待4、线程终止C#中的lock关键字总结前言 最近由于工作的需要,一直在使用C#的多线程进行开发,其中也遇到了很多问题,但也都解决...
    99+
    2024-04-02
  • Java实战之用Spring开发条形码和验证码
    一、条形码 代码如下: import javax.swing.*; import java.awt.*; import java.awt.image.BufferedImage;...
    99+
    2024-04-02
  • Pygame游戏开发之太空射击实战入门篇
    目录视频入门游戏循环1. 处理输入(或事件)2. 更新游戏3. 渲染(或绘制)时钟构建 Pygame 模板渲染/绘制部分输入/事件部分控制屏幕刷新频率结束语本部分代码视频 观看视频 ...
    99+
    2024-04-02
  • Pygame游戏开发之太空射击实战盾牌篇
    目录视频添加盾牌伤害玩家盾牌标尺视频 本课程的视频 添加盾牌 现在,我们的玩家被一颗流星击中就摧毁。这不是很有趣,所以我们要向Player类添加一个shield属性,它是0 - 10...
    99+
    2024-04-02
  • JavaWeb实战之开发网上购物系统(超详细)
    目录一、项目描述二、项目演示三、部分代码一、项目描述 基于B/S三层架构设计的购物系统,可以更好地符合"高内聚,低耦合"的设计思想。表现层(UI)通过JSP在浏览器上实现界面展示,通...
    99+
    2024-04-02
  • 利用Python开发App实战
    Python语言虽然很万能,但用它来开发app还是显得有点不对路,因此用Python开发的app应当是作为编码练习、或者自娱自乐所用,加上目前这方面的模块还不是特别成熟,bug比较多,总而言之,劝君莫轻入。准备工作利用Python开发app...
    99+
    2023-05-14
    Python App
  • Vue3+SpringFramework框架开发实战
    目录引言一、环境搭建二、创建Vue3组件三、创建Spring控制器四、配置Spring项目五、使用Vue3组件和Spring控制器六、结论引言 Vue3是最新版的Vue框架,它与Sp...
    99+
    2023-05-15
    Vue3 Spring Framework框架 Spring Framework
  • Android开发实战闹钟项目
    本文实例为大家分享了Android实战闹钟项目的具体代码,供大家参考,具体内容如下 一、闹钟功能的介绍以及界面的展示 该闹钟是根据我们手机闹钟设计的一个简单的闹钟APP,其中包含时钟...
    99+
    2024-04-02
  • Springboot插件开发实战分享
    目录一 背景二 监控日志插件开发1 新建aop切面执行类MonitorLogInterceptor三 总结一 背景 项目新增监控系统,对各个系统进行监控接口调用情况,初期的时候是在各...
    99+
    2024-04-02
  • Java开发实现飞机大战
    目录一、飞机大战1 封装所有飞行物公共属性和功能的父类2 封装英雄机属性和功能类3 封装敌机属性和功能的类4 封装大飞机属性和功能的类5 子弹类6 飞机大战射击的主方法二、测试结果本...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作