zoukankan      html  css  js  c++  java
  • 11-4 部署前奏-Helm&Operator

    部署方案选择

    • 手动部署
    • Helm        类似centos yum,k8s的管理包工具
    • Prometheus operator        开源的,更深去的prometheus部署管理工作。  crd+控制器管理机制。
    • helm + Prometheus operator         非常优雅

    Helm

    Helm简介

    helm的作用:像centos7中的yum命令一样,管理软件包,只不过helm这儿管理的是在k8s上安装的各种容器。

    tiller的作用:像centos7的软件仓库一样,简单说类似于/etc/yum.repos.d目录下的xxx.repo。

    一包一Chart(一个目录)

    Helm用途

    做为 Kubernetes 的⼀个包管理工具, Helm 具有如下功能:

    • 创建新的 chart
    • chart 打包成 tgz 格式
    • 上传 chart 到 chart 仓库或从仓库中下载 chart
    • 在 Kubernetes 集群中安装或卸载 chart
    • 管理用 Helm 安装的 chart 的发布周期

    Helm Client 是⽤户命令行工具,其主要负责如下:

    • 本地 chart 开发;
    • 仓库管理;
    • 与 Tiller sever 交互;
    • 发送预安装的 chart;
    • 查询 release 信息;
    • 要求升级或卸载已存在的 release。

    Tiller Server 是⼀个部署在 Kubernetes 集群内部的 server,其与 Helm client、Kubernetes API server 进⾏交互。Tiller server 主要负责如下:

    • 监听来⾃ Helm client 的请求;
    • 通过 chart 及其配置构建⼀次发布;
    • 安装 chart 到 Kubernetes 集群,并跟踪随后的发布;
    • 通过与 Kubernetes 交互升级或卸载 chart;
    • 简单的说,client 管理 charts,而 server 管理发布 release。

    Helm Architecture  组件架构

    helm3 的安装

    Helm是一个二进制文件,我们直接到github的release去下载就可以,地址如下: https://github.com/helm/helm/releases

    # 解压
    $ tar -zxvf helm-v3.5.4-linux-amd64.tar.gz
    $ mv linux-amd64/helm /usr/local/bin/
    # 验证
    $ helm version

    kubectl 工具能够正常访问kubernetes 集群的 apiserver。 然后我们需要先执行 helm init 来进行初始化。Helm3的初始化就简单了很多,不再需要给集群中部署 Tiller 了。

    还用helm3前提安装好 kubectl 集群配置。

    helm3使用   创建nginx实例测试

    helm create hello-helm  #创建项目

    我们通过查看 templates 目录下⾯的 deployment.yaml 文件可以看出默认创建的 Chart 是⼀个 nginx 服务,具体的每个文件是干什么用的,我们可以前往 Helm 官方文档进行查看,当然后面我们也会详细讲解的。比如这里我们来安装 1.7.9 这个版本的 nginx。我们直接更改 value.yaml 文件下面的 image tag 即可,将默认的 stable 更改为 1.7.9,为了测试方便可以直接访问,我们把 Service 的类型也改成 NodePort:

    image:
      repository: nginx
      pullPolicy: IfNotPresent
      # Overrides the image tag whose default is the chart appVersion.
      tag: "1.7.9"
    
    service:
      type: NodePort    # ClusterIP
      port: 80

    现在我们来尝试安装一下这个 Chart 。在 Helm 2 中,如果没有指定 release 的名称,则会自动随机生成一个名称。但是在 Helm 3 中,则必须主动指定名称,或者增加 –generate-name 的参数。比如:

    helm install ./hello-helm --generate-name    #  安装
       # 查看详细信息
    kubectl get svc# 查看服务 暴露的端口

    浏览器中 打开 http://192.168.1.131:31427。 根据创建的 Service 的 NodePort 来访问该服务了, 就可以正常的访问我们刚刚部署的 nginx 应用了

    通过命令操作

    #查看Release
    helm list   
    # 注:我们可以将打包的 tgz ⽂件分发到任意的服务器上,通过 helm fetch 就可以获取到该 Chart了。
    helm package hello-helm  # 打包Chart
    # 删除Release
    helm delete hello-helm-1584972412

    更多关于 Helm 的使用命令,我们可以前往官方文档

    Helm2和Helm3的区别

    移除Tiller(前面已经讲解过了、这里不再重复);

    Release 名称可在不同 ns 间重用;

    必须指定Release名称;

    支持将 Chart 推送至 Docker 镜像仓库中;

    移除 helm serve。

     

    Operator实现原理

    自定义资源类型(CRD) + 自定义控制器

    k8s1.7 以后支持自定义资源类型。

    apiVersion: "etcd.database.coreos.com/v1beta2"
    kind: "EtcdCluster"
    metadata:
      name: "example-etcd-cluster"
    spec:
      size: 3
      version: "2.3.15"

     CRD 网上资源学习。

    end...

  • 相关阅读:
    hdu 2586(最近公共祖先LCA)
    hdu 3394(点双连通)
    hdu 4005(边双连通)
    hdu 2460(tarjan求边双连通分量+LCA)
    【转载】8天学通MongoDB——第四天 索引操作
    【转载】8天学通MongoDB——第三天 细说高级操作
    [转载]MongoDB开发学习 经典入门
    【原创】jQuery 仿百度输入标签插件
    ★《唐琅探案》后记【2】
    ★《唐琅探案》后记【1】
  • 原文地址:https://www.cnblogs.com/edeny/p/14701433.html
Copyright © 2011-2022 走看看