helm安装_Helm 带你飞

news/2024/7/24 12:46:14 标签: helm安装

文章目录

[toc]

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

一、Helm 简介

Helm本质就是让 K8S的应用管理( DeploymentService等 ) 可配置,能动态生成。通过动态生成 K8S资源清单文件( deployment.yamlservice.yaml)。然后调用 Kubectl自动执行 K8S资源部署。

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

  • chart是创建一个应用的信息集合,包括各种 Kubernetes对象的配置模板、参数定义、依赖关系、文档说明等。 chart是应用部署的自包含逻辑单元。可以将 chart想象成 aptyum中的软件安装包
  • releasechart的运行实例,代表了一个正在运行的应用。当 chart被安装到 Kubernetes集群,就生成一个 releasechart能够多次安装到同一个集群,每次安装都是一个 release

Helm包含两个组件: Helm客户端和 Tiller服务器,如下图所示:

Helm客户端负责 chartrelease的创建和管理以及和 Tiller的交互。 Tiller服务器运行在 K8S集群中,它会处理 Helm客户端的请求,与 Kubernetes API Server交互

b459ddfb26134604c036cfea02d04579.png

二、Helm 部署

下载 helm客户端:

[root@master helm]

[root@master helm]

由于 api server开启了 RBAC访问控制,所以需要创建 tiller使用的 service account,并分配合适的角色给它,这样才能访问 api server,详细内容可以查看 helm文档中的 Role-based Access Control。这里简单起见直接分配 cluster- admin这个集群内置的 ClusterRole给它,创建 rbac-config.yaml文件:

[root@master helm]
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

[root@master helm]

[root@worker1 ~]

[root@master helm]

[root@master helm]
tiller-deploy-6d47785b7c-jbdv7   1/1     Running   0          1h

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

三、Helm 自定义模板

[root@master helm]

[root@master hello-world]
name: hello-world
version: 1.0.0

[root@master templates]

[root@master templates]
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: hello-world
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: hello-world
    spec:
      containers:
        - name: hello-world
          image: hub.hc.com/library/myapp:v1
          ports:
            - containerPort: 80
              protocol: TCP

[root@master templates]
apiVersion: v1
kind: Service
metadata:
  name: hello-world
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: hello-world

[root@master hello-world]

[root@master hello-world]
NAME             REVISION    UPDATED                     STATUS      CHART                APP VERSION    NAMESPACE
dunking-manta    2           Tue Aug 18 10:04:27 2020    DEPLOYED    hello-world-1.0.0                   default

[root@master templates]

[root@master templates]

[root@master templates]
NAME             REVISION    UPDATED                     STATUS     CHART                APP VERSION    NAMESPACE
dunking-manta    2           Tue Aug 18 10:04:27 2020    DELETED    hello-world-1.0.0                   default

[root@master templates]
REVISION    UPDATED                     STATUS        CHART             DESCRIPTION
1           Tue Aug 18 09:49:45 2020    SUPERSEDED    hello-world-1.0.0 Install complete
2           Tue Aug 18 10:04:27 2020    SUPERSEDED    hello-world-1.0.0 Deletion complete

[root@master templates]

[root@master templates]

动态切换版本:

[root@master hello-world]
image:
  repository: wangyanglinux/myapp
  tag: 'v2'

97806e24780cdff2ca448d93c95dd222.png
[root@master ~]
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

[root@master hello-world]

[root@master ~]
Hello MyApp | Version: v2 | <a href="hostname.html">Pod Name</a>

[root@master ~]

[root@master ~]
Hello MyApp | Version: v1 | <a href="hostname.html">Pod Name</a>

Debug

[root@master ~]

四、使用Helm部署dashboard

[root@worker1 ~]
fbdfe08b001c: Loading layer  122.3MB/122.3MB
Loaded image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.1

[root@master Dashboard]
[root@master Dashboard]
[root@master Dashboard]
[root@master Dashboard]
NAME      URL
local     http://127.0.0.1:8879/charts
stable    https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts

[root@master Dashboard]
[root@master Dashboard]
[root@master kubernetes-dashboard]
image:
  repository: k8s.gcr.io/kubernetes-dashboard-amd64
  tag: v1.10.1
ingress:
  enabled: true
  hosts:
    - k8s.frognew.com
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
  tls:
    - secretName: frognew-com-tls-secret
      hosts:
      - k8s.frognew.com
rbac:
  clusterAdminRole: true

[root@master kubernetes-dashboard]
> -n kubernetes-dashboard 
> --namespace kube-system  
> -f k8s-dashboard.yaml

[root@master kubernetes-dashboard]
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kubernetes-dashboard   ClusterIP   10.105.124.175   <none>        443/TCP                  3m39s

[root@master kubernetes-dashboard]

[root@master kubernetes-dashboard]
NAME                   TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
kubernetes-dashboard   NodePort    10.105.124.175   <none>        443:30186/TCP            9m5s

五、使用dashboard部署应用

使用火狐浏览器访问 https://192.168.182.100:30186,选择令牌并输入下方查到的 token

1ece05887bc39985151dd526bba82029.png 查询
dashboard-token
[root@master kubernetes-dashboard]
kubernetes-dashboard-token-5lgp8                 kubernetes.io/service-account-token   3      27m

[root@master kubernetes-dashboard]

进入到 dashboard面板后,点击创建应用:

aba898540a996441e74f51cd2e85b4b0.png 创建应用的参数如下,点击部署

591b791a84fb1f630833214058677de5.png 容器部署成功:

9f0b99073a3956ec2aa8190f5275761d.png

微信搜一搜 : 全栈小刘 ,获取文章 pdf版


http://www.niftyadmin.cn/n/953011.html

相关文章

aws waf sql注入_您可以使用aws在纸上运行sql查询吗

aws waf sql注入Have you ever drawn some wonderful tabular data on a piece of paper and thought, “Wouldn’t it be nice if I could run an SQL query on this”?您是否曾经在纸上绘制过一些很棒的表格数据&#xff0c;并想过&#xff1a;“如果我可以对此进行SQL查询&…

枚举变量有什么用_C++自定义类型-包含不限作用域的枚举类型(学习笔记:第2章 10)...

自定义类型[1]类型别名&#xff1a;为已有类型另外命名用typedef起别名的格式&#xff1a;typedef 已有类型名 新类型名表例&#xff1a;typedef double Area, Volume; typedef int Natural; Natural i1,i2; Area a; Volume v;用using起别名的格式&#xff1a;using 新类型名 …

python安装pygal_如何在pygal python中创建直方图

python安装pygalScalable Vector Graphics (SVG) is an image format that defines vector-based graphics in XML format. In this tutorial, you’ll look at how to get started with Pygal, a Python SVG graph-plotting library. You’ll also learn how to draw histogra…

zap 自定义日志格式_每日一库之 logrus 日志使用教程

点击上方蓝色“Go语言中文网”关注&#xff0c;回复「电子书」领全套Go资料golang 日志库 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,但是在 g…

linux项目经验_我的Linux经验

linux项目经验During these pandemic days ,I haven’t had an idea of exploring Linux , in fact that made me productive! Yes Linux made me productive which I came to know from my friend said “just give a glance on it”. And yea! I thought anyway it’s going …

python文本特征提取_利用Python进行LDA特征提取

LDA(Latent Dirichlet Allocation)&#xff1a;潜在狄利克雷分布&#xff0c;是一种非监督机器学习技术。它认为一篇文档是有多个主题的&#xff0c;而每个主题又对应着不同的词。一篇文档的构造过程&#xff0c;首先是以一定的概率选择某个主题&#xff0c;然后再在这个主题下…

筑业和恒智天成哪个好_奇石好与不好只由价格决定?错!这3点才是核心所在!...

奇石如今的热度可能是超乎了大部分玩家的想象&#xff0c;一块不起眼的石头为何能有如此之大的潜力&#xff01;这可能是人们对于奇石最大的疑惑&#xff01;并且奇石居高不下的价格更是让无数玩家欣喜不已&#xff0c;那么一方好石头的标准只在于价格么&#xff1f;材质奇石这…

java一年工作经验编写_如何编写仍将在一年内使用的测试

java一年工作经验编写Have you ever worked on a project that had unit or integration tests, only to be told “yeah, don’t stress about the tests — we know that a bunch of them are failing.” At some point along the way, keeping the tests up to date with ch…