利用Helm简化Kubernetes应用部署(2)

目录

定义Charts 

使用Helm部署Demo 

Helm常用操作命令 

定义Charts

回到之前的“charts”目录,我们依次进行解读并进行简单的修改。

  • Chart.yaml

配置示例:

apiVersion: v1	
appVersion: "1.1"	
description: A demo Helm chart for Kubernetes	
name: k8sapp	
version: 0.1.1

如上述定义所示,Chart.yaml用于提供Charts相关的元数据定义,比如名称、版本,属于必备文件。主要字段如下所示:

字段

是否必填

说明

name

当前Chart名称

version

版本号

apiVersion

chart API 版本,一直为“v1”

description


Chart描述

keywords


关键字列表

home


项目主页URL

kubeVersion


依赖的Kubernetes版本

sources


源码地址列表

maintainers


维护者列表,由name、email、url组成

engine


模板引擎名称,默认为gotpl,即go模板

icon


图标地址

appVersion


应用程序版本

deprecated


是否已废弃

tillerVersion


依赖的Tiller版本,例如">2.0.0"

  • values.yaml和模板

values.yaml配置示例:

# 定义k8sapp的默认配置	
fullnameOverride: k8sapp	
replicaCount: 1 #副本数	
image: #镜像配置	repository: ccr.ccs.tencentyun.com/magicodes/k8sapp	tag: latest

 pullPolicy: Always #镜像拉取策略,Always表示总是拉取最新镜像,IfNotPresent表示如果本地存在则不拉取,Never则表示只使用本地镜像

service:   #Service配置	type: NodePort #NodePort服务类型,以便外部访问	port: 80	
secrets: {}	
ingress:	enabled: false    #不配置ingress	
#资源限制	
resources:	limits:	cpu: 1	memory: 228Mi	requests:	cpu: 100m	memory: 128Mi

如以上示例配置所示,我们在一个values.yaml配置了Deployment和Service的配置,整个配置简单干净,当然我们还能配置更多,比如ingress和secrets等等。那么我们的配置是怎么起作用的呢?这里的配置又是如何转换为对应的Deployment、Service等配置的呢?我们来打开“templates”目录下的deployment.yaml模板文件:

apiVersion: apps/v1beta2	
kind: Deployment	
metadata:	name: {{ template "k8sapp.fullname" . }}	labels:	app: {{ template "k8sapp.name" . }}	chart: {{ template "k8sapp.chart" . }}	draft: {{ default "draft-app" .Values.draft }}	release: {{ .Release.Name }}	heritage: {{ .Release.Service }}	
spec:	replicas: {{ .Values.replicaCount }}	selector:	matchLabels:	app: {{ template "k8sapp.name" . }}	release: {{ .Release.Name }}	template:	metadata:	labels:	app: {{ template "k8sapp.name" . }}	draft: {{ default "draft-app" .Values.draft }}	release: {{ .Release.Name }}	annotations:	buildID: {{ .Values.buildID }}	spec:	containers:	- name: {{ .Chart.Name }}	image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"	imagePullPolicy: {{ .Values.image.pullPolicy }}	ports:	- name: http	containerPort: 80	protocol: TCP	env:	{{- $root := . }}	{{- range $ref, $values := .Values.secrets }}	{{- range $key, $value := $values }}	- name: {{ $ref }}_{{ $key }}	valueFrom:	secretKeyRef:	name: {{ template "k8sapp.fullname" $root }}-{{ $ref | lower }}	key: {{ $key }}	{{- end }}	{{- end }}	resources:	
{{ toYaml .Values.resources | indent 12 }}	{{- with .Values.imagePullSecrets }}	imagePullSecrets:	
{{ toYaml . | indent 8 }}	{{- end }}

如上所示,这是一个使用Go模板的Deployment模板文件,它通过读取“Chart.yaml”和“values.yaml”中的配置进行转换。同样的,service.yaml、ingress.yaml也是如此,同时我们也可以基于其语法编写更多的模板。这些模板在执行“helm install”命令时进行转换。

值得注意的是,“.Values”对象可以访问values.yaml中的任何配置,如果使用自定义的值则会覆盖此值。“. Release”对象则为预定义的值,可用于任意模板,并且无法被覆盖。其中,常用的预定义值如下所示:

名称

说明

Release.Name

发布的资源实例名称

Release.Time

Chart最后发布时间

Release.Namespace

命名空间

Release.Service

发布服务名称,通常是“Tiller”

Release.IsUpgrade

当前操作是否升级

Release.IsInstall

当前操作是否为安装

Release.Revision

修订号,从1开始递增

Chart

对应“Chart.yaml”

Files

可以访问所有的非模板文件和非特殊文件

  • requirements.yaml

requirements.yaml用于管理依赖关系。例如:

dependencies:	- name: apache	version: 1.2.3	repository: http://example.com/charts	- name: mysql	version: 3.2.1	repository: http://another.example.com/charts

如上所示,常用的字段如下所示:

  • name表示Chart名称;

  • version表示Chart版本;

  • repository表示Chart存储库地址,注意,我们还必须使用“helm repo add”命令在本地添加该存储库地址;

  • alias表示别名;

  • tags用于指定仅装载匹配的Chart;

  • condition用于设置条件来装载匹配的Chart;

  • import-values则用于导入子Chart的多个值。

如果要对依赖关系进行更好的控制,我们可以手工将被依赖的Charts复制到应用的Charts目录下,以明确的表达这种依赖关系。例如WordPress依赖于Apache和MySQL,则其依赖关系以目录的形式体现如下所示:

640

使用Helm部署Demo

好了,唠嗑了这么多,也该来点实际的了。接下来我们基于以上的认知和Demo配置来进行部署,部署流程如下所示:

640?wx_fmt=png

如上图所示,我们来开始Helm的部署之旅。

1.准备Chart

Chart我们已经准备好了,具体看上一节的“values.yaml”示例。

2.推送Chart

接下来我们来推送到仓库。这里为了简单,我们直接使用腾讯云的Tencent Hub提供的免费的Helm仓库。Tencent Hub的操作比较简单,我们这里略过。接下来,我们将该仓库添加到本地:

helm repo add {mycharts} https://hub.tencentyun.com/charts/mycharts --username {myname} --password {mypassword}

“helm repo add”命令用于将仓库添加到本地仓库列表,以上命令中的变量说明如下所示:

  • mycharts 替换为自己仓库的命名空间 (用户名或组织名)

  • myname 替换为 Tencent Hub 账号用户名

  • mypassword 替换为 Tencent Hub 账号密码

添加完成后,我们可以使用命令“helm repo list”列出本地仓库列表:

640

接下来,我们需要将我们的Chart包推送到Tencent Hub的Helm仓库,在推送之前,我们还需要安装平台的推送插件:

yum install git #如果本地已经安装git,可以忽略此步骤

helm plugin install https://github.com/imroc/helm-push #安装Tencent Hub推送插件

插件安装完毕之后,我们就可以开始我们的操作了。首先,确保Chart文件在Helm客户端所在的机器上已经准备就绪,如下图中的“k8sapp”目录:

640

然后就可以执行推送命令了:

helm push ./k8sapp xinlai

如上所示,“helm push”用于推送Chart,“./k8sapp”是目录位置,“xinlai”是存储库的名称。执行以上脚本会自动将目标目录打包并推送:

640

接下来,我们可以在Tencent Hub管理界面上看到我们的包了:

640

不仅如此,我们还能查看详情:

640

  1. 拉取并执行部署

如果是在云端的k8s集群进行Helm应用部署,操作非常简单,云供应基本上都提供了封装:

640

创建完成后如下所示:

640

如上图所示,此Helm应用创建了Deployment资源和Service资源,其中Service的类型为NodePort,端口为“32160”,接下来我们可以通过节点端口访问:

640

如果是本地集群呢?我们可以通过以下脚本拉取Chart并执行部署:

helm repo update && helm fetch xinlai/k8sapp	
helm install xinlai/k8sapp

部署完成后如图所示:

640

注意:我们可以通过“--version”参数来部署指定版本的Helm应用:

640

如图所示,我们得到了Service的端口为“32705”,同样的通过本地节点端口访问如下所示:

640

至此,通过Helm我们部署了一个简单的“k8sapp”Demo应用。部署完成后,我们可以通过命令“helm list”来查看已部署的Release:

640

Helm常用操作命令

除了上面提到的一些Helm命令之外,一些常用的操作Demo如下所示:

  • 升级和更新

helm upgrade zeroed-rodent xinlai/k8sapp --version 0.1.6

#“zeroed-rodent”为Release名称,“xinlai/k8sapp”为Chart地址。

helm upgrade --set imageTag=20190731075922 zeroed-rodent xinlai/k8sapp

#更新镜像

  • 查看版本历史

helm history zeroed-rodent

#查看Release历史

  • 回滚

helm rollback zeroed-rodent 1

#回滚到版本1

  • 删除

helm delete zeroed-rodent

#删除Release

  • 下载Chart

helm fetch xinlai/k8sapp

#下载Chart

  • 基于本地Chart目录部署

helm install ./k8sapp

#基于目录“k8sapp”部署

  • 打包

helm package ./k8sapp

#会打包压缩生成类似于“/k8sapp-0.1.5.tgz”的文件

  • 搜索

helm search k8sapp

#在所有仓库里搜索Chart“k8sapp”

  • 启动本地仓储服务

helm serve

#默认地址为“127.0.0.1:8879”,可以使用“--address”参数绑定其他地址和端口

往期内容

Docker+ Kubernetes已成为云计算的主流(二十六)

容器化之后如何节省云端成本?(二十七)

了解Kubernetes主体架构(二十八)

使用Minikube部署本地Kubernetes集群(二十九)

使用kubectl管理k8s集群(三十)

使用Kubeadm创建k8s集群之部署规划(三十一)

使用Kubeadm创建k8s集群之节点部署(三十二)

集群故障处理之处理思路以及健康状态检查(三十三)

集群故障处理之处理思路以及听诊三板斧(三十四)

使用WebDeploy部署远程IIS网站

使用Kubectl部署应用

通过Service访问应用 (1)

通过Service访问应用 (2)

使用Ingress来负载分发微服务

利用Helm简化Kubernetes应用部署(1)

640?wx_fmt=png
转载是一种动力 分享是一种美德

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/313634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux查看磁盘空间命令

Linux 查看磁盘空间可以使用 df 和 du 命令。 df df 以磁盘分区为单位查看文件系统,可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。 例如,我们使用df -h命令来查看磁盘信息, -h 选项为根据大小适当显示: …

Visual Studio 2019 16.3 正式发布,支持 .NET Core 3.0

微软正式发布了 Visual Studio 2019 16.3 版本,主要更新内容如下:.NET Core 3.0Visual Studio 版本 16.3 包括对 .NET Core 3.0 的支持。注意:如果使用的是 .NET Core 3.0,则需要使用 Visual Studio 16.3 或更高版本。.NET Core 桌…

【干货】规模化敏捷DevOps四大实践之持续探索CE(中英对照版)

本文翻译来自SAFe DevOps社群帅哥网友贾磊:高级质量经理&敏捷教练 曾就职于外企、国企、大型上市企业等,担任过测试工程师、测试经理、项目经理、敏捷教练、质量总监、高级质量经理等岗位。是一名敏捷变革的爱好者和践行者。爱好网球、羽毛球。正文原…

Spring Cloud——Eureka——架构体系

1、概述 Eureka包括两个端: Eureka Server:注册中心服务端,用于维护和管理注册服务列表。Eureka Client:注册中心客户端,向注册中心注册服务的应用都可以叫做Eureka Client(包括Eureka Server本身&#x…

推荐.neter常用优秀开源项目系列之二

.net社区有很多优秀的开源项目,我们今天再推荐12个开源项目;1. Domain-Driven-Design-ExampleDDD 示例 挺不错的。github https://github.com/zkavtaskin/Domain-Driven-Design-Example2.SmartStoreNET开源的电商项目github https://github.com/smartsto…

Zookeeper: Zookeeper架构及FastLeaderElection机制

本文转发自技术世界,原文链接 http://www.jasongj.com/zookeeper/fastleaderelection/ 一、Zookeeper是什么 Zookeeper是一个分布式协调服务,可用于服务发现,分布式锁,分布式领导选举,配置管理等。 这一切的基础&am…

与时俱进 | 博客现已运行在 .NET Core 3.0 及 Azure 上

点击上方蓝字关注“汪宇杰博客”导语9月23日,微软正式发布了 .NET Core 3.0,这个版本具有大量新功能和改进。我也在第一时间将自己的博客网站更新到了 .NET Core 3.0,并且仍然跑在微软智慧云 Azure 国际版的应用服务上。本文总结了我在博客迁…

Zookeeper:基于Zookeeper的分布式锁与领导选举

本文转发自技术世界,原文链接 http://www.jasongj.com/zookeeper/distributedlock/ 1、Zookeeper特点 1.1 Zookeeper节点类型 如上文《Zookeeper架构及FastLeaderElection机制》所述,Zookeeper 提供了一个类似于 Linux 文件系统的树形结构。该树形结构…

Asp.Net Core Mvc Razor之RazorPage

在AspNetCore.Mvc.Razor命名空间中的RazorPage继承RazorPageBase,并定义的属性为:HttpContext Context 表示当前请求执行的HttpContextRazorPageBase定义为抽象类,并继承了接口:IRazorPageIRazorPage接口定义属性如下:…

Spring Cloud——Consul——架构体系

我们知道,Eureka 2.X因遇到问题,已停止研发。Spring Cloud官方建议迁移到Consul或者Zookeeper等其他服务发现中间件。 下面是 Spring Cloud 支持的服务发现软件以及特性对比: 一、Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具&…

ASP.NET Core 3.0 gRPC 双向流

目录ASP.NET Core 3.0 使用gRPCASP.NET Core 3.0 gRPC 双向流ASP.NET Core 3.0 gRPC 认证授权一.前言在前一文 《二. 什么是 gRPC 流gRPC 有四种服务类型,分别是:简单 RPC(Unary RPC)、服务端流式 RPC (Server streami…

开源公司被云厂商“寄生”,咋整?

上周 OSS Capital 召集一些开源公司,组织了一场关于如何面对“云厂商给开源带来的危害”的会议。OSS Capital 是一家风险投资公司,该公司只投开源,其董事会合伙人之一是开源运动的先驱人物 Bruce Perens。网上有一个十分有名的“开源商业化独…

Spring Cloud Config——原理解析

springCloud config项目,用来为分布式的微服务系统中提供集成式外部配置支持,分为客户端和服务端 可以让你把配置放到远程服务器,目前支持本地存储、Git以及Subversion。 spring官方如下介绍: 简而言之: 通过配置服务(Config Server)来为所有的环境和应用提供外部配…

AWS加入.NET Foundation企业赞助商计划

.NET 走向开源,MIT许可协议。 微软为了推动.NET开源社区的发展,2014年联合社区成立了.NET基金会。.NET基金会是一个独立的组织,支持.NET社区和开源,旨在拓宽和加强.NET生态系统和社区。这可以通过多种方式完成,包括项目…

Spring cloud——Hystrix 原理解析

1、背景 分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可…

【B】替换 Quartz.net 默认使用的 MySql.Data 为 Mysqlconnector 的学习过程

文章转载授权级别:B无论是 Quartz.net 还是 MySql.Data 都是我们比较熟悉的库了,Quartz.net 如果配置为使用 MySql 数据库做持久化时,默认是硬编码了使用 MySql.Data 来操作 MySql 数据库的。下面是我的一些个人诉求和实践,和大家…

APM(应用性能管理)与Dapper原理介绍

一、APM(应用性能管理) 1.1 什么是APM? APM (Application Performance Management) 即应用性能管理(应用性能监控) APM主要是针对企业 关键业务的IT应用性能和用户体验的监测、优化,提高企业IT应用的可靠…

asp.netcore3.0 使用 DbProviderFactories 连接数据库

在.netstandard2.0时 System.Data.Common 这个包里并没有加入DbProviderFactoriesDbProviderFactories类在.netframework中是非常重要的存在,依靠他可以适配各种数据库客户端(sqlserver、mysql、sqllite等)创建数据库连接。现在可以像.netframework中一样…

MIT 6.824 Lab 1 MapReduce

MapReduce 目标 根据论文所说明的,有MASTER和WORKER两类工作节点,以下实现大都按照论文所说的实现,但是在对MASTER的实现上有所改动: MASTER向WORKER发送心跳检测,这里改为了对分配出去的任务进行超时监控。 MASTER…

大家在寻找的高级程序员到底是什么样子的?

你好,我是Z哥。这篇文章主题很简单,就是一个很常见的话题“什么是高级程序员?”。文章稍微长了些,但是很容易阅读。我们的中国文化,对“面子”看的特别重,所以你会发现身边到处都是高级XXX,听着…