IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Helm使用手册 -> 正文阅读

[系统运维]Helm使用手册

# Helm使用手册

本文档基于的helm版本为:

    ?  ~ helm version
    version.BuildInfo{Version:"v3.7.1", GitCommit:"1d11fcb5d3f3bf00dbe6fe31b8412839a96b3dc4", GitTreeState:"clean", GoVersion:"go1.17.2"}

本文档面向OPS角色,用来说明,基于这个仓库的内容,helm是如何启动一整套云端环境的,但并非step by step启动某个区域云端的SOP文档。

## 什么是helm,与kubectl有哪些不同
helm相对于原生kubectl有如下区别:

helm需要安装helm和kubectl 
kubectl只需要安装kubectl

除了上面的这个区别之外,还有如下的思维观念上的区别:

### 编排维度

Helm是以应用为单位进行管理,一个应用是能够完整的提供一套服务的,它包含的内容是应用本身需要的配置描述、应用所占用的容器资源、内部暴露的端口、向其他服务提供end-point的方式等等,
所以在这个高层应用的维度上,helm引入了Chart和Release两个概念。

Chart用来表达一个应用需要的所有信息,它表现为一个具有特定目录结构的一系列文件,这一系列文件,可以由一个helm仓库(Helm Repository)来管理,也可以直接存储这一系列文件来管理。chart之于helm仓库,类似于jar包之于maven repo、package之于npm repo、go module source之于git repo

Release用来表达一个使用Chart启动的应用实例,Chart之于Release,就像一个Docker image之于Docker container. docker image启动时可以增加参数,Chart启动时也可以增加参数,但Chart管理的是应用,启动的配置往往比docker容器所需要的配置多很多,所以更常用的方式是,参数放在values文件中。
所以我们可以理解为:

    public Release install(Chart chart,Values values)

kubectl管理的仅仅只是k8s集群中的资源,粒度更细,维度更低:configmap是资源,pod是资源,ingress是资源,service也是资源,kubectl一次只能对一个资源进行操作,所以用它来操作应用时,就会需要多条命令,当应用本身包含了多个服务时,操作应用时命令之间的先后顺序、服务的启动顺序、命令本身的数量,都会大大增加操作的复杂程度。

### 资源文件的表达方式
helm关注应用,应用的Chart中,细节中的k8s资源文件仍然需要存在,但,是模版化的,使用{{ .Values.xxx }}作为模版变量,应用到Release时,将会取Values中的xxx替换到资源文件,再启动应用。
所以对于A、B区域的应用,helm需要两个值文件:A-values.yaml、B-values.yaml,他们共用一个相同的Chart。

而kubectl关注k8s中的资源,比如configmap,在A区域中,需要一个A-configmap,在B区域中,需要B-configmap,即使只有几个字段不同,也需要有不同的资源文件来表达。所以最终它 会有A区域的一套资源文件,B区域的一套资源文件,这在比对和管理上会较为复杂。


### 部署方式

helm是面向应用的部署,将复杂的逻辑托管给了helm,比如比对配置文件有哪些更新,需要更新pod/ingress吗,等等。
在细节操作和记录的层次上,helm会自动的进行configmap、pod、service、ingress的删除、创建、更新;记录应用的更新版本号、更新时间、记录应用名称等。
在应用的层次上,它还具有回滚、滚动更新等特性。

而kubectl是k8s资源层次的功能,它操作细节,暴露细节,所以应用的信息需要操作者记录。它的回滚和滚动更新,都也只是k8s资源层次的。

    ?  ~ helm list
    NAME                       NAMESPACE  REVISION   UPDATED                                STATUS     CHART                      APP VERSION
    cn-a                  default    1          2021-12-02 22:54:43.105032 +0800 CST   deployed   a-0.1.0               1.16.0
    cn-b                 default    1          2021-12-02 23:13:59.329862 +0800 CST   deployed   b-0.1.0              0.1.0
    c   default    2          2021-12-01 22:50:23.145235 +0800 CST   deployed   c-agent-0.1.0    1.0.0.10261

特殊地,面向应用的部署中我们再回来提到Helm概念中的两个版本号:Chart的版本号和应用的版本号。

我们刚才已经明白,Chart是模版,对于同一个应用,不同时间,需要的模版关注点也不一样,对模版的抽象可能也不一样。
比如应用没有到达功能稳定阶段,变化较大,我们可能对chart模版的抽象程度就低,暴露的内容更多,也许需要在values.yaml中写大量重复的信息;
当应用较为稳定时,我们可能对chart模版的抽象程度变高,模版变化较大,values也需要有相应的变化。
当产生了变动时,就是Chart的版本号变动逻辑。它表达的仅仅只是模版抽象的变化版本。

应用的版本号则跟随了服务的版本号,它表达的就是Chart所表达的应用本身,比如configmap有变化、pod有变化、资源有变化等情况,这属于应用本身的升级,这个版本号应跟随应用。

## 如何使用Chart和Values.yaml

在具体的操作上,这里提供了一些示例,用来表达具体的helm操作逻辑。
我们知道,当重启了priest的service之后,需要重新启动最前方的nginx代理(如果有且它的proxy_pass到了一个service上,这种情景下,service重启后,nginx无法转发到新的service了,需要重启nginx才可以),比如flagship_api,
当flagship_api是helm启动时,如何重启pod呢?这种可以有两种方式:

    -- https://github.com/helm/helm/issues/9041
    kubectl rollout restart deployment <deploymentname>
    kubectl delete pod <podname>

# Install Release
helm install xxxName chartOrChartSource -f value-which-renamed.yml
# Upgrade
helm upgrade xxxName chartOrChartSource -f value-which-renamed.yml
# Debug
helm install xxxName chartOrChartSource --dry-run -f value-which-renamed.yml --debug
# list All Release
helm list

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:48:55  更:2021-12-04 13:51:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:58:03-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码