Kubernetes进阶实战读书笔记:Helm基础

一、Helm基础

1、Charts管理程序包使用优势

简单来说Helm就是Kubernetes的应用程序包管理器、它将一个应用的相关资源组织成为Charts,并通过Charts管理程序包其使用优势可简单总结为如下几个方面:

1
2
3
4
管理复杂应用:Charts能够描述哪怕是最复杂的程序结构、其提供了可重复使用的应用安装的定义
易于升级:使用就地升级和自定义钩子来解决更新的难题
简单分享:Charts易于通过公共或私有服务完成版本化、分享及主机构建
回滚:可使用"helm rollback" 命令轻松实现快速回滚

2、Helm的核心术语

  • Charts:即一个Helm程序包、包含了运行一个Kubernetes应用所需的镜像、依赖关系和资源定义等、必要时还会包含Service的定义;它类似于APT的dpkg文件或者yum的rpm文件
  • Repository:Charts仓库、用于集群中存储和分发Charts、类似于Perl的CPAN、或者Python的PyPI
  • Config:应用程序实例化安装运行时使用的配置信息
  • Release:应用程序实例化配置后运行于Kubernetes集群中的一个Charts实例;在同一个集群上、一个Charts可以使用不同的Config重复安装多次、每次安装都会创建一个新的Release

事实上、Charts更像是存储于Kubernetes集群之外的程序、它的每次安装是指在集群中使用专用配置运行一个示例、执行活成有点类似于在操作系统上基于程序启动一个进程

 二、Helm架构

Helm主要由Helm客户端、Tiller服务器和Charts仓库组成

1、Helm客户端

Helm客户端是命令行客户端工具、采用go语言编写、基于gRPC协议与 Tiller server交互、它主要完成如下任务

1、本地Charts开发
2、管理Charts仓库
3、与Tiller服务器交互:发送Charts以安装、查询Release的相关信息以及升级或卸载已有的Release

2、Tiller server

Tiller server运是托管运行于集群之中的容器化服务应用、它接受来自Helm客户端的请求、并在必要时与Kubernetes api server进行交互、它主要完成以下任务

1、监听来自于Helm客户端的请求
2、合并Charts和配置以构建一个Release
3、向Kubernetes集群安装Charts并对相应的Release进行跟踪
4、升级和卸载Charts

通常、用于helm客户端本地遵循其格式编写Charts文件、而后即可部署于Kubernetes集群之上运行为一个特定的Release仅在有分发需求时、才应该将同一应用的Charts文件
打包成归档压缩格式提交到特定的Charts仓库、仓库既可以运行为公共托管平台也可以是用户自建的服务器、仅供特定的组织或个人使用

三、 安装Helm Client

1、下载

 

 

 

 

 

 

2、安装

1
2
3
4
wget https://get.helm.sh/helm-v2.16.9-linux-amd64.tar.gz
tar xf helm-v2.16.9-linux-amd64.tar.gz
mv linux-amd64/helm  /usr/local/bin/
helm help

3、查看帮助

四、安装Tiller server

1、创建相关ServiceAccount

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@master chapter15]# cat tiller-rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: tiller
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: tiller
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: tiller
namespace: kube-system
 
/opt/pod/Kubernetes_Advanced_Practical/chapter15
 
 
[root@master chapter15]# kubectl apply -f tiller-rbac.yaml
serviceaccount/tiller created
clusterrolebinding.rbac.authorization.k8s.io/tiller created

2、初始化

而后使用如下命令进行Tiller server环境的初始化、完成Tiller server安装

1
2
3
4
[root@master chapter15]# helm init --service-account tiller --tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.6 --stable-repo-url https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
$HELM_HOME has been configured at /root/.helm.
Warning: Tiller is already installed in the cluster.
(Use --client-only to suppress this message, or --upgrade to upgrade Tiller to the current version.)

helm init命令进行初始化时、Kubernetes集群会到gcr.io/kubernetes-helm/上获取需要的镜像,镜像标签同HELM的版本号、请确保Kubernetes集群能够访问此镜像仓库

3、查看pod

1
2
3
[root@master chapter15]# kubectl get pods -n kube-system -l app=helm
NAME READY STATUS RESTARTS AGE
tiller-deploy-57d54b6d77-pqffr 1/1 Running 0 100s

4、查看helm客户端和服务版本

1
2
3
[root@master chapter15]# helm version
Client: &version.Version{SemVer:"v2.16.9", GitCommit:"8ad7037828e5a0fca1009dabe290130da6368e39", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.16.6", GitCommit:"dd2e5695da88625b190e6b22e9542550ab503a47", GitTreeState:"clean"}

如果希望在安装时自定义一些参数以设定其运行机制、例如Tiller的版本或者在kubernetes集群上的目标名称空间、则可以以类似如下方式使用命令

1
2
3
4
--canary-image #安装canary分治、即项目Master的分支
--tiller-image #安装指定版本的镜像、默认同HELM 版本
--tiller-image registry.cn-hangzhou.aliyuncs.com/google_containers/tiller:v2.16.6
--kube-context string Name of the kubeconfig context to use

安装至指定的kubernetes集群

1
--tiller-namespace string Namespace of Tiller (default "kube-system")

安装至指定的名称空间、默认为kube-system此外、tiller将数据存储与ConfigMap资源中、因此卸载后重新安装并不会导致数据丢失、必要时、管理员可以放心重新安装或升级

5、卸载tiller的方法常用的有两种方式

方法一:

1
2
[root@master chapter15]# kubectl delete deployment tiller-deploy -n kube-system
deployment.apps "tiller-deploy" deleted

方法二:

1
helm reset

五、helm快速入门

1、删除默认的源

1
2
[root@master chapter15]# helm repo remove stable
"stable" has been removed from your repositories

2、增加新的国内镜像源

1
2
[root@master chapter15]# helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
"stable" has been added to your repositories

3、查看helm源添加情况

1
2
3
4
[root@master chapter15]# helm repo list
NAME URL
local http://127.0.0.1:8879/charts
stable  https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

4、更新helm源仓库

1
2
3
4
5
[root@master chapter15]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Skip local chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.  

5、查找

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@master chapter15]# helm search
NAME CHART VERSION  APP VERSION DESCRIPTION
stable/acs-engine-autoscaler 2.1.3 2.1.1 Scales worker nodes within agent pools
......
stable/kubed 0.3.0 0.4.0 Kubed by AppsCode - Kubernetes daemon
 
stable/zetcd 0.1.6 0.0.3 CoreOS zetcd Helm chart for Kubernetes
 
[root@master chapter15]# helm search redis
NAME CHART VERSION  APP VERSION DESCRIPTION
stable/redis 1.1.15 4.0.8 Open source, advanced key-value store. It is often referr...
stable/redis-ha 2.0.1 Highly available Redis cluster with multiple sentinels an...
stable/sensu 0.2.0 Sensu monitoring framework backed by the Redis transport
 
[root@master chapter15]# helm search stable/redis
NAME CHART VERSION  APP VERSION DESCRIPTION
stable/redis 1.1.15 4.0.8 Open source, advanced key-value store. It is often referr...
stable/redis-ha 2.0.1 Highly available Redis cluster with multiple sentinels an...

官方可用的Chart列表:https://hub.kubeapps.com/

 

 

6、安装测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@master chapter15]# helm install stable/redis -n redis --dry-run   #先执行安装测试
[root@master chapter15]# helm install stable/redis -n redis
[root@master charts]# helm status redis
LAST DEPLOYED: Mon Jul 13 11:59:50 2020
NAMESPACE: default
STATUS: DEPLOYED
 
RESOURCES:
==> v1/ConfigMap
NAME DATA AGE
redis 3 3h11m
redis-health 6 3h11m
 
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
redis-master-0 0/1 Pending 0 3h11m
redis-master-0 0/1 Pending 0 3h11m
 
==> v1/Secret
NAME TYPE DATA AGE
redis Opaque 1 3h11m
 
==> v1/Service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-headless ClusterIP None <none> 6379/TCP 3h11m
redis-master ClusterIP 10.108.50.254 <none> 6379/TCP 3h11m
redis-slave ClusterIP 10.103.111.23 <none> 6379/TCP 3h11m
 
==> v1/StatefulSet
NAME READY AGE
redis-master 0/1 3h11m
redis-slave 0/2 3h11m

7、状态注释提示:

8、列出已经安装生成的Release

1
2
3
[root@master charts]# helm list
NAME REVISION   UPDATED STATUS CHART APP VERSION    NAMESPACE
redis   1 Mon Jul 13 11:59:50 2020  DEPLOYED    redis-10.5.7    5.0.7 default

9、删除Release

1
2
3
[root@master chapter15]# helm delete redis
[root@master charts]# helm delete redis #删除
release "redis" deleted

10、升级回滚

1
2
3
[root@master charts]# helm upgrade #升级应用
[root@master charts]# helm rollback #回滚应用
[root@master charts]# helm history #获取指定的release变更历史
posted @   活的潇洒80  阅读(700)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2019-07-24 Linux性能优化实战学习笔记:第二十八讲
2019-07-24 Linux性能优化实战学习笔记:第二十七讲
2017-07-24 Python基础【day03】:文件操作(六)
点击右上角即可分享
微信分享提示