helm搭建K8S系列三:Helm部署详细教程(含代码)

kubernetesk8s中包管理工具-----Helm详细解读 在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。 阅读详情

前言

也许在未来,应用研发人员只需要关注应用研发即可,底层的Docker、K8S技术并不需要应用研发人员去掌握,底层IT与研发平台将是完全隔离的。

比如我所知道的,新型的云原生研发工具StarOS,完全隔离底层IT,编程环境信手拈来,资源也无需申请,全SAAS化。

目前是迭代阶段,纯免费,有需要的朋友们,可以去体验一下。

也许未来的招聘要求,是研发人员需要掌握新型研发工具的使用。

 

接上一篇,继续来看Helm搭建K8S的详细教程。

helm搭建K8S步骤三、给 Tiller 授权

因为 Helm 的服务端 Tiller 是一个部署在 Kubernetes 中 Kube-System Namespace 下 的 Deployment,它会去连接 Kube-Api 在 Kubernetes 里创建和删除应用。

而从 Kubernetes 1.6 版本开始,API Server 启用了 RBAC 授权。目前的 Tiller 部署时默认没有定义授权的 ServiceAccount,这会导致访问 API Server 时被拒绝。所以我们需要明确为 Tiller 部署添加授权。

创建 Kubernetes 的服务帐号和绑定角色

$ kubectl create serviceaccount --namespace kube-system tiller

$ kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

为 Tiller 设置帐号

# 使用 kubectl patch 更新 API 对象

$ kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'

deployment.extensions "tiller-deploy" patched

查看是否授权成功

$ kubectl get deploy --namespace kube-system   tiller-deploy  --output yaml|grep  serviceAccount

serviceAccount: tiller

serviceAccountName: tiller

helm搭建K8S步骤四、验证 Tiller 是否安装成功

$ kubectl -n kube-system get pods|grep tiller

tiller-deploy-6d68f5c78f-nql2z          1/1       Running   0          5m

$ helm version

Client: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

Server: &version.Version{SemVer:"v2.9.1", GitCommit:"20adb27c7c5868466912eebdf6664e7390ebe710", GitTreeState:"clean"}

helm搭建K8S步骤五、卸载 Helm 服务器端 Tiller

如果你需要在 Kubernetes 中卸载已部署的 Tiller,可使用以下命令完成卸载。

$ helm reset 或

$helm reset --force

helm搭建K8S步骤六、Helm 使用

1)更换仓库:

若遇到Unable to get an update from the “stable” chart repository (https://kubernetes-charts.storage.googleapis.com) 错误

手动更换stable 存储库为阿里云的存储库

# 先移除原先的仓库

helm repo remove stable

# 添加新的仓库地址

helm repo add stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

# 更新仓库

helm repo update

2)查看在存储库中可用的所有 Helm charts:

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/aerospike                0.1.7           v3.14.1.2       A Helm chart for Aerospike in Kubernetes          

stable/anchore-engine           0.1.3           0.1.6           Anchore container analysis and policy evaluatio...

stable/artifactory              7.0.3           5.8.4           Universal Repository Manager supporting all maj...

stable/artifactory-ha           0.1.0           5.8.4           Universal Repository Manager supporting all maj...

stable/aws-cluster-autoscaler   0.3.2                           Scales worker nodes within autoscaling groups.

... ...

3)更新charts列表:

helm repo update

4)安装charts:

Monocular是一个开源软件,用于管理kubernetes上以Helm Charts形式创建的服务,可以通过它的web页面来安装helm Charts

安装Nginx Ingress controller,安装的k8s集群启用了RBAC,则一定要加rbac.create=true参数

helm install stable/nginx-ingress --set controller.hostNetwork=true,rbac.create=true

安装Monocular:

# 添加新的源

helm repo add monocular https://kubernetes-helm.github.io/monocular

# 安装

helm install monocular/monocular -f custom-repos.yaml

# custom-repos.yaml 内容

cat custom-repos.yaml

api:

  config:

    repos:

      - name: stable

        url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts

        source: https://github.com/kubernetes/charts/tree/master/stable

      - name: incubator

        url: https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator

        source: https://github.com/kubernetes/charts/tree/master/incubator

      - name: monocular

        url: https://kubernetes-helm.github.io/monocular

        source: https://github.com/kubernetes-helm/monocular/tree/master/charts

5)查看K8S中已安装的charts:

helm list

NAME                REVISION    UPDATED                     STATUS      CHART               NAMESPACE

amber-seal          1           Mon Jul  2 17:29:25 2018    DEPLOYED    nginx-ingress-0.9.5 default  

my-release          1           Mon Jul  2 15:19:44 2018    DEPLOYED    spark-0.1.10        default  

nonplussed-panther  1           Mon Jul  2 17:27:41 2018    FAILED      nginx-ingress-0.9.5 default  

turbulent-tuatara   1           Mon Jul  2 17:31:33 2018    DEPLOYED    monocular-0.6.2     default

6)删除安装的charts:

# 删除:helm delete xxx

helm delete amber-seal

Helm Chart 结构

Chart 目录结构

examples/

  Chart.yaml          # Yaml文件,用于描述Chart的基本信息,包括名称版本等

  LICENSE             # [可选] 协议

  README.md           # [可选] 当前Chart的介绍

  values.yaml         # Chart的默认配置文件

  requirements.yaml   # [可选] 用于存放当前Chart依赖的其它Chart的说明文件

  charts/             # [可选]: 该目录中放置当前Chart依赖的其它Chart

  templates/          # [可选]: 部署文件模版目录,模版使用的值来自values.yaml和由Tiller提供的值

  templates/NOTES.txt # [可选]: 放置Chart的使用指南

Chart.yaml 文件

name: [必须] Chart的名称

version: [必须] Chart的版本号,版本号必须符合 SemVer 2:http://semver.org/

description: [可选] Chart的简要描述

keywords:

  -  [可选] 关键字列表

home: [可选] 项目地址

sources:

  - [可选] 当前Chart的下载地址列表

maintainers: # [可选]

  - name: [必须] 名字

    email: [可选] 邮箱

engine: gotpl # [可选] 模版引擎,默认值是gotpl

icon: [可选] 一个SVG或PNG格式的图片地址

requirements.yaml 和 charts目录

requirements.yaml 文件内容:

dependencies:

  - name: example

    version: 1.2.3

    repository: http://example.com/charts

  - name: Chart名称

    version: Chart版本

    repository: 该Chart所在的仓库地址

Chart支持两种方式表示依赖关系,可以使用requirements.yaml或者直接将依赖的Chart放置到charts目录中。

templates 目录

templates目录中存放了Kubernetes部署文件的模版。

例如:

# db.yaml

apiVersion: v1

kind: ReplicationController

metadata:

  name: deis-database

  namespace: deis

  labels:

    heritage: deis

spec:

  replicas: 1

  selector:

    app: deis-database

  template:

    metadata:

      labels:

        app: deis-database

    spec:

      serviceAccount: deis-database

      containers:

        - name: deis-database

          image: {{.Values.imageRegistry}}/postgres:{{.Values.dockerTag}}

          imagePullPolicy: {{.Values.pullPolicy}}

          ports:

            - containerPort: 5432

          env:

            - name: DATABASE_STORAGE

              value: {{default "minio" .Values.storage}}

模版语法扩展了 golang/text/template的语法:

# 这种方式定义的模版,会去除test模版尾部所有的空行

{{- define "test"}}

模版内容

{{- end}}

# 去除test模版头部的第一个空行

{{- template "test" }}

用于yaml文件前置空格的语法:

# 这种方式定义的模版,会去除test模版头部和尾部所有的空行

{{- define "test" -}}

模版内容

{{- end -}}

# 可以在test模版每一行的头部增加4个空格,用于yaml文件的对齐

{{ include "test" | indent 4}}

创建自己的chart

我们创建一个名为mongodb的chart,看一看chart的文件结构。

$ helm create mongodb

$ tree mongodb

mongodb

├── Chart.yaml #Chart本身的版本和配置信息

├── charts #依赖的chart

├── templates #配置模板目录

│   ├── NOTES.txt #helm提示信息

│   ├── _helpers.tpl #用于修改kubernetes objcet配置的模板

│   ├── deployment.yaml #kubernetes Deployment object

│   └── service.yaml #kubernetes Serivce

└── values.yaml #kubernetes object configuration

2 directories, 6 files

模板

Templates目录下是yaml文件的模板,遵循Go template语法。使用过Hugo的静态网站生成工具的人应该对此很熟悉。

我们查看下deployment.yaml文件的内容。

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

  name: {{ template "fullname" . }}

  labels:

    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"

spec:

  replicas: {{ .Values.replicaCount }}

  template:

    metadata:

      labels:

        app: {{ template "fullname" . }}

    spec:

      containers:

      - name: {{ .Chart.Name }}

        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"

        imagePullPolicy: {{ .Values.image.pullPolicy }}

        ports:

        - containerPort: {{ .Values.service.internalPort }}

        livenessProbe:

          httpGet:

            path: /

            port: {{ .Values.service.internalPort }}

        readinessProbe:

          httpGet:

            path: /

            port: {{ .Values.service.internalPort }}

        resources:

{{ toyaml .Values.resources | indent 12 }}

这是该应用的Deployment的yaml配置文件,其中的双大括号包扩起来的部分是Go template,其中的Values是在values.yaml文件中定义的:

# Default values for mychart.

# This is a yaml-formatted file.

# Declare variables to be passed into your templates.

replicaCount: 1

image:

  repository: nginx

  tag: stable

  pullPolicy: IfNotPresent

service:

  name: nginx

  type: ClusterIP

  externalPort: 80

  internalPort: 80

resources:

  limits:

    cpu: 100m

    memory: 128Mi

  requests:

    cpu: 100m

    memory: 128Mi

比如在Deployment.yaml中定义的容器镜像image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"其中的:

.Values.image.repository就是nginx

.Values.image.tag就是stable

以上两个变量值是在create chart的时候自动生成的默认值。

我们将默认的镜像地址和tag改成我们自己的镜像harbor-001.jimmysong.io/library/nginx:1.9。

检查配置和模板是否有效

当使用kubernetes部署应用的时候实际上讲templates渲染成最终的kubernetes能够识别的yaml格式。

使用helm install --dry-run --debug <chart_dir>命令来验证chart配置。该输出中包含了模板的变量配置与最终渲染的yaml文件。

$ helm install --dry-run --debug mychart

Created tunnel using local port: '58406'

SERVER: "localhost:58406"

CHART PATH: /Users/jimmy/Workspace/github/bitnami/charts/incubator/mean/charts/mychart

NAME:   filled-seahorse

REVISION: 1

RELEASED: Tue Oct 24 18:57:13 2017

CHART: mychart-0.1.0

USER-SUPPLIED VALUES:

{}

COMPUTED VALUES:

image:

  pullPolicy: IfNotPresent

  repository: harbor-001.jimmysong.io/library/nginx

  tag: 1.9

replicaCount: 1

resources:

  limits:

    cpu: 100m

    memory: 128Mi

  requests:

    cpu: 100m

    memory: 128Mi

service:

  externalPort: 80

  internalPort: 80

  name: nginx

  type: ClusterIP

HOOKS:

MANIFEST:

---

# Source: mychart/templates/service.yaml

apiVersion: v1

kind: Service

metadata:

  name: filled-seahorse-mychart

  labels:

    chart: "mychart-0.1.0"

spec:

  type: ClusterIP

  ports:

  - port: 80

    targetPort: 80

    protocol: TCP

    name: nginx

  selector:

    app: filled-seahorse-mychart

---

# Source: mychart/templates/deployment.yaml

apiVersion: extensions/v1beta1

kind: Deployment

metadata:

  name: filled-seahorse-mychart

  labels:

    chart: "mychart-0.1.0"

spec:

  replicas: 1

  template:

    metadata:

      labels:

        app: filled-seahorse-mychart

    spec:

      containers:

      - name: mychart

        image: "harbor-001.jimmysong.io/library/nginx:1.9"

        imagePullPolicy: IfNotPresent

        ports:

        - containerPort: 80

        livenessProbe:

          httpGet:

            path: /

            port: 80

        readinessProbe:

          httpGet:

            path: /

            port: 80

        resources:

            limits:

              cpu: 100m

              memory: 128Mi

            requests:

              cpu: 100m

              memory: 128Mi

我们可以看到Deployment和Service的名字前半截由两个随机的单词组成,最后才是我们在values.yaml中配置的值。

教程未完,请查看下一篇文章~~

纯干货文章教程,记得收藏,以免后期找不到>>

 

结束

随着开发工具的不断发展,未来的研发平台、IT平台一定会像云计算一样,使得研发环境、资源像自来水一样取用便利,所有工具集成在一体,这些底层的Docker、K8S技术并不需要应用研发人员去掌握,底层IT与研发平台将是完全隔离的。

别说小编没告诉你,现在就有这样的平台。

为大家推荐一款新型的云原生研发工具StarOS:包含云原生应用架构设计、在线协同编码开发、基于云原生的API管理和接口测试、多云交付和应用调度、灰度发布、流水线、应用运维、服务治理、多容器集群管理、云边一体化业务交付等能力。目标是提升应用架构敏捷度,大大加快软件开发迭代速度,提高IT资源的弹性和利用率——StarOS,纯免费SAAS应用产品。

新兴云原生开发工具,新兴的研发场景,快去体验别落伍啦……

k8s的应用包管理工具helm部署和使用 Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/course/detail/35475 1、概述 我们一般是在k8s里面部署一些简单的应用,比如用deployment,daemonset,statefuleset的方式来部署应用,但是如果要部署一些复杂的应用,那么整个配置的编写、部署的过程就会变的更加的复杂,那么helm这个工具就可以来帮助解决这个复杂应用的部署 阅读详情

相关推荐

K8s--Helm(配置、使用、部署Helm Chart的构建)

文章目录一、Helm介绍二、Helm安装与初始配置1.安装2.添加第方Chart库Helm 部署nginx应用1.harbor仓库相关配置2.拉取nginx Chart包并做相关配置3.安装webserver(为了测试nginx部署效果)4.升级与回滚四、构建Helm Chart1.创建一个Helm Chart2.上传打包好的chart包到harbor仓库中五、部署mychart应用到k8s集群1.部署2.创建新版本Chart包并上传3.更新、回滚与卸载 一、Helm介绍 Helm是Kubernet

小螺号的博客 9103

持续集成部署-k8s-部署利器-Helm

Helm 是一个用于 Kubernetes 应用程序部署和管理的开源工具。它可以帮助简化 Kubernetes 应用程序的打包、发布、配置和升级过程。Helm 使用称为 "chart" 的预定义模板来定义应用程序的结构和配置,并提供了命令行工具来管理这些 charts。

种一棵树最好的时间是十年前,其次是现在。 1014

helm搭建K8S系列二:Helm部署详细教程代码

Helm搭建K8S系列教程二:Helm部署详细教程。 每天学习一点点,每天进步一点点! 一、Helm 客户端安装 Helm 的安装方式很多,这里采用二进制的方式安装。更多安装方法可以参考 Helm 的官方帮助文档。 方式一:使用官方提供的脚本一键安装 curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh $ chmod 700 get_helm.sh $ ./get_helm.

StarOS_Test的博客 1065

Kubernetes精讲之包管理Helm工具

HelmKubernetes 应用的包管理工具,主要用来管理 Charts,类似Linux系统的yum。Helm Chart是用来封装Kubernetes原生应用程序的一系列YAML文件。可以在你部署应用的时候自定义应用程序的一些 Metadata,以便于应用程序的分发。对于应用发布者而言通过Helm打包应用、管理应用依赖关系、管理应用版本并发布应用到软件仓库。对于使用者而言使用Helm后可以以简单的方式在Kubernetes上查找、安装、升级、回滚、卸载应用程序#拉取项目。

m2282475145的博客 1510

K8S部署Helm

目前基本的K8s部署方式需要创建yaml文件,文件内容包括deployment、Service、Ingress等;这种方式只适用于单一或者多个创建,再多就不适用了(多个yaml文件就会造成管理困难)。helm通过打包的方式,支持发布的版本管理和控制,很大程度上简化了Kubernetes应用的部署和管理。需要安装 Helm 3.0 以上版本,因为 3.0 版本以后,Helm 不再需要在集群里安装 tiller 服务端,可以直接将安装历史记录在 ConfigMap 资源中。

lishuyc的博客 3005

Kubernetes详细教程,一篇文章帮助你从零开始学习k8s,从入门到实战

10w+的Kubernetes详细教程,涵盖k8s中常用的所有概念以及面试的高频问点(pod的深入理解),帮助你从零开始学习k8s搭建k8s集群,从入门到实战,希望对大家学习k8s有所帮助

一弓虽的博客 5万+

云原生Kubernetes】一文掌握 k8s 包管理工具 Helm

Kubernetes 核心技术之包管理工具 Helm 概念以及用法详细介绍,包详细实操演示。

商务合作 | 共同学习 | 携手共进 5万+

Kubernetes部署应用利器Helm详解

Kubernetes部署应用利器Helm详解【helm安装使用,chart模版、函数使用、harbor仓库管理chart】

qq_44930876的博客 5217

Helm3入门教程系列,26小时轻松掌握Helm

很多人都使用过Ubuntu下的ap-get或者CentOS下的yum, 这两者都是Linux系统下的包管理工具。采用apt-get/yum,应用开发者可以管理应用包之间的依赖关系,发布应用;用户则可以以简单的方式查找、安装、升级、卸载应用程序。我们可以将Helm看作Kubernetes下的apt-get/yum。Helm是Deis (https://deis.com/) 开发的一个用于kubernetes的包管理器。每个包称为一个Chart,一个Chart是一个目录(一般情况下会将目录进行打包压缩,形成na

孔子说 4813

k8sHelm详细讲解

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。==Helm 本质就是让 K8s 的应用管理(Deployment、Service 等)可配置,可以通过类似于传递环境变量的方式能动态生成。

hehe228的博客 1529

Kubernetes K8SHelm部署、使用与示例

Kubernetes K8SHelm部署、使用、常见操作与示例

踏歌行的专栏 6864

K8shelm部署clickhouse

这个可以帮助我们看部署得对不对。完整部署才可以使用。以上步骤走下来,一般是可以成功的,但如果没成功,有可能是helm部署时有些部署不完整,重新卸载之后再部署就可以。

m782186713的博客 2429

K8S部署Helm

K8S中的包管理工具 1. 客户端Helm(Helm)  通过脚本安装:curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > helm.sh,赋权运行: chmod +x helm.sh ./helm.sh # 输出 Downloading https://kubernetes-helm.storag...

jacksonary的博客 2254

K8s】什么是helmhelm的常用指令

什么是helm?helem常用指令使用K8s部署一个应用,涉及到很种K8s资源的协作,如Deployment 用于部署应用控制pod、Service 提供服务发现、Secret 配置存储用户名和密码,可能还需要 pv 和 pvc 来持久化数据。这么多资源,且过于分散,使用kubectl来进行维护和创建,体验极差。如何统一管理、配置和更新这些分散的 k8s 的应用资源文件如何分发和复用一套应用模板如何将应用的一系列资源当做一个软件包来管理基于以上,helm出现。HelmKubernetes 的包管理器。

llg___的博客 2784

K8s——Helm

在没使用 helm 之前,向 kubernetes 部署应用,我们要依次部署 deployment、svc 等,步骤较繁琐。况且随着很多项目微服务化,复杂的应用在容器中部署以及管理显得较为复杂,helm 通过打包的方式,支持发布的版本管理和控制, 很大程度上简化了 Kubernetes 应用的部署和管理。charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署k8s。●NOTES.txt:chart 的“帮助文本”,在用户运行 helm install 时显示给用户。

rmh0713的博客 1817

Kubernetesk8shelm包管理与应用详细说明与操作【helm安装、heml仓库管理和搭建私有仓库】

文章目录helm 的架构环境准备 helm 的架构 前面我们在使用wordpress+MySQL 部署博客应用的时候,需要做许多的工作,需要每个pod创建pv 和pvc,然后分别创建每个应用的pod 及svc,整个过程非常的麻烦。 如果搭建博客所有步骤作为一个整体,放在一个文件夹里(叫做chart),以后我们直接使用这个chart 就可以把所有的操作一次性做完,这样很容易实现了一个博客应用(chart 的一个实例,叫做release),就非常的方便了。这个就类似于我们用虚拟机模板去克隆出来一台台的虚拟机,

崔崇鑫的博客,你linux/云运维工作中的百科全书。 1万+

k8sHelm

Helm Chart 是 Helm 用来部署 Kubernetes 应用的包。一个 Chart 包系列Kubernetes 资源定义文件(YAML 格式),以及一个描述 Chart 的 Chart.yaml 文件和一个用于配置的 values.yaml 文件。自定义 Helm Chart 允许根据具体需求来创建和部署 Kubernetes 应用。charts 除了可以在 repo 中下载,还可以自己自定义,创建完成后通过 helm 部署k8s安装如上,查看列表。

YCyjs的博客 3121

K8S中使用helm部署项目——HelloWorld为例

K8S中使用helm部署项目——HelloWorld为例;涉及到docker镜像的构建及部署

qq_45732597的博客 2887
上一篇: helm搭建K8S系列二:Helm部署详细教程(含代码)
下一篇: 低代码——不应该只是玩具
Methodot
博客等级 码龄5年 100粉丝 36原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值