zoukankan      html  css  js  c++  java
  • Helm 带你飞

    文章目录

    在没使用 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交互

    二、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'
    
    

    [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

    查询 dashboard-token

    [root@master kubernetes-dashboard]
    kubernetes-dashboard-token-5lgp8                 kubernetes.io/service-account-token   3      27m
    
    [root@master kubernetes-dashboard]
    

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

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

    容器部署成功:

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

  • 相关阅读:
    Datesheet 参数手册
    2017.10.23 Arduino Atmel EFM32低功耗监测
    New Concept English three(21)
    The disadvantage for manager has a part-time job as a trainer
    New Concept English three(20)
    Python+Qt学习随笔:PyQt中常用的事件处理函数
    Python+Qt学习随笔:PyQt图形界面应用的事件处理流程
    PyQt学习遇到的问题:重写notify发送的消息为什么首先给了一个QWindow对象?
    PyQt学习随笔:PyQt中捕获键盘事件后获取具体按键值的方法
    PyQt学习随笔:重写组件的event方法捕获组件的事件
  • 原文地址:https://www.cnblogs.com/spiritmark/p/13862101.html
Copyright © 2011-2022 走看看