Kubernetes-13 K8s中的Helm

Helm介绍

在没有使用helm之前,向Kubernetes部署应用,我们要一次部署deployment、svc等,步骤繁琐。并且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。

Helm的本质就是K8s的应用管理可以配置,能动态生成。通过动态生产K8s的资源清单文件。然后kubectl自动执行K8s资源部署。

  • 使用helm可以把这些YAML文件作为整体管理
  • 使用YAML文件高效复用
  • 使用helm应用级别的版本管理

Helm的组成及架构

Helm是官方提供的类似于YUM的包管理器,是部署环境的流程封装。Helm有两个重要的概念:chart和release

  • chart,应用描述,是创建一个应用的信息集合,包括各种Kubernetes对象的配置模板、定义参数、依赖关系、文档说明等。chart是应用部署的自包含逻辑单元。可以将chart比作apt、yum中的软件安装包
  • release是chart的运行实例,代表了一个正在运行的应用。一个chart被helm运行后将会生成对应的release,将在K8s中创建出真实的运行资源对象。也就是应用级别的版本管理
  • Repository:用于发布和存储chart的仓库

Helm采用CS架构,由一下组件组成:

  • Helm客户端,可以在本地执行,负责chart和release的创建和管理,以及和Tiller的交互。
  • Tiller服务器,在Kubernetes集群上运行,并管理Kunernetes应用程序。负责吹Helm客户端的请求,与Kubernetes APIServer交互。
  • Repository是chart仓库,Helm客户端通过HTTP协议来访问Chart索引文件和压缩包
    在这里插入图片描述

Helm v3变化
2019年11月13日,Helm发布了Helm v3的第一个稳定版本。主要变化如下:

  • Tiller的删除
  • release可以在不同名称空间重用

Helm部署

下载压缩包 .

  • 下载helm安装压缩文件,上传到Linux系统中
  • 解压helm压缩文件,把解压后的helm目录复制到/usr/bin目录下
  • 使用helm

为tiller创建Service Account

##我这里直接把cluster-admin绑定给了tiller
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

kubectl create -f rbac-config.yaml

helm init --service-account tiller --skip-refresh

kubectl get pod -n kube-system -l app=helm

使用以下命令就可以查看helm版本(安装成功会显示出来)

helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}

这里我在初始化的时候遇到了问题
在这里插入图片描述
解决方法:

helm init --output yaml > tiller.yaml
#增加selector字段
vim tiller.yaml
spec:
  replicas: 1
  strategy: {}
  selector:
    matchLabels:
      app: helm
      name: tiller
...

kubectl apply -f tiller.yaml

Helm自定义模板

创建文件夹

mkdir ./hello-world
cd /hello-world

创建自描述模板Chart.yaml

这个文件必须有name和version定义

cat <<'EOF' > ./Chart.yaml
name: hello-world
version: 1.0.0
EOF

创建模板文件,用于生成Kubernetes资源清单(manifests)

mkdir ./templates

cat <<'EOF' > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: nginx
          ports:
            - containerPort: 8080
              protocol: TCP
EOF

cat <<'EOF' > ./templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: hello-world
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 8080
    protocol: TCP
  selector:
    app: hello-world
EOF

使用命令helm install RELATIVE_PATH_TO_CHART 创建release

helm install .

配置体现在配置文件 values.yaml

cat <<'EOF' > ./values.yaml
image:
  repository: gcr.io/google-samples/node-hello
  tag: '1.0'
EOF
##这个文件中定义的值,在模板文件中可以通过.values对象访问到
cat <<'EOF' > ./templates/deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: {{ .Values.image.repository }}:{{ .Values.image.tag }}
          ports:
            - containerPort: 8080
              protocol: TCP
EOF

在values.yaml中的值可以被部署到release时用到的参数 --values YAML_FILE_PATH或者-- set key1=value1,key2-value2覆盖掉

helm install --set image.tag='latest'
查看仓库
helm repo list

添加仓库/移除仓库
helm repo add 仓库名 仓库地址
helm repo remove 仓库名

更新仓库
helm repo update

安装资源
helm install --name RELEASE_NAME 仓库名/资源

升级版本
helm upgrade RELEASE_NAME 仓库名/资源

列出已经部署的release
helm list
helm list --all
 
查询一个特定的release的状态
helm status RELEASE_NAME

移除所有与这个release相关的Kuberbetes资源
helm delete RELEASE_NAME

回滚
helm rollback RELEASE_NAME VRESION_NUMBER

移除所有指定release相关的Kubernetes资源和所有这个release的记录
helm delete --purge RELEASE_NAME

打印生册生成的清单文件内容而不执行
helm install . --dry-run --debug --set image.tag=latest

.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值