我的编程空间,编程开发者的网络收藏夹
学习永远不晚

helm实战之开发Chart

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

helm实战之开发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


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

helm实战之开发Chart

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

下载Word文档

猜你喜欢

helm实战之开发Chart

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

Kotlin开发实战之hello world

工欲善其事必先利其器,工具的安装基于Android studio 2.2.3Kotlin下载安装(这边我已经安装了就不卸载重新装了,搜索到后直接点击install按钮安装,然后重启就Ok了)Kotlin插件的支持在自己引用的build_gr
2023-05-31

Android之使用Android-query框架开发实战(一)

开发Android使用Android-query框架能够快速的,比传统开发android所要编写的代码要少得很多,容易阅读等优势。 下载文档及其例子和包的地址:http://code.google.com/p/android-query/
2022-06-06

Android之使用Android-query框架开发实战(二)

在上篇文章跟大家介绍了Android之使用Android-query框架开发实战(一),本文继续跟大家介绍有关Android-query框架。具体内容请看下文。 异步网络:1. 添加权限:
2022-06-06

《Python高效开发实战》实战演练——

在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能。1)首先在djangosite/app/views.py中建立一个路由响应函数:from django.
2023-01-31

Android开发实战之漂亮的ViewPager引导页

目前很多软件安装时都会出现引导页面,用户体验很好。 下面就来DIY下: 因为视频上传很麻烦,所以截图了。 首先看看效果图:点击小点可自由切换,滑动也可以自由切换,最后一个导航页添加了点击跳转。 开始实现引导页: 一、采集需要的图片放入dra
2022-06-06

Python开发之城堡保卫战游戏的实现

这篇文章主要为大家详细介绍了如何利用Python编写一个简单的城堡保卫战游戏,本文用到了os文件读写,pygame模块以及面向对象思想,感兴趣的可以了解一下
2023-01-14

CSS开发实战之道:项目经验带你成为顶尖开发者

CSS开发实战之道:项目经验带你成为顶尖开发者近年来,互联网技术的快速发展使得网站开发领域变得愈发热门。作为前端开发的一部分,CSS(层叠样式表)在网站的设计和布局中扮演了重要角色。在CSS的世界中,成为一名顶尖的开发者需要不断学习和实践,
CSS开发实战之道:项目经验带你成为顶尖开发者
2023-11-02

Python开发游戏之井字游戏的实战步骤

最近正在学习Python,所以最近做了一个关于Python的实例,下面这篇文章主要给大家介绍了关于Python开发游戏之井字游戏的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2023-02-04

Android开发VR实战之播放360度全景视频

VR即Virtual Reality虚拟现实。虚拟现实技术是一种可以创建和体验虚拟世界的计算机仿真系统它利用计算机生成一种模拟环境是一种多源信息融合的交互式的三维动态视景和实体行为的系统仿真使用户沉浸到该环境中。 那么,如何在Androi
2022-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录