如何自动化Kubernetes配置?

如何自动化Kubernetes配置?,kubernetes,ansible,terraform,kubernetes-helm,Kubernetes,Ansible,Terraform,Kubernetes Helm,我想自动化我的Kubernetes配置,比如Ansible for VMs 一个示例场景: 创建名称空间港 通过舵部署港口 什么样的工具适合这样的场景?我也可以使用terraform吗?我完全同意@p Ekambaram的观点,即kubernetes automation可以通过ansible成功地实现,但同时我完全不同意他的观点。这种“声明性”代码实际上根本不是声明性的。它变成了命令集的包装器。除此之外,这样的剧本不是(让我们提醒一下,如果一次操作的结果与不进行任何干预的重复操作的结果完全相同

我想自动化我的Kubernetes配置,比如Ansible for VMs

一个示例场景:

  • 创建名称空间港
  • 通过舵部署港口
  • 什么样的工具适合这样的场景?我也可以使用terraform吗?

    我完全同意@p Ekambaram的观点,即kubernetes automation可以通过ansible成功地实现,但同时我完全不同意他的观点。这种“声明性”代码实际上根本不是声明性的。它变成了命令集的包装器。除此之外,这样的剧本不是(让我们提醒一下,如果一次操作的结果与不进行任何干预的重复操作的结果完全相同,那么一个操作就是幂等的)。这种方法与ansible中的一个关键概念相反

    shell
    command
    模块应在ansible中作为最后手段使用,前提是没有其他方式执行所需任务,例如专用模块不存在或缺少某些重要功能时

    当谈到使用ansible自动化kubernetes时,这种专用模块已经存在

    快速查看一下,您会发现可以通过更优雅、更清晰的方式实现所需的结果:

    名称空间创建:

    - name: Create a k8s namespace
      k8s:
        name: testing
        api_version: v1
        kind: Namespace
        state: present
    
    基于yaml定义文件创建服务

    - name: Create a Service object by reading the definition from a file
      k8s:
        state: present
        src: /testing/service.yml
    
    您刚才提到过您正在使用helm管理kubernetes应用程序吗?看一看。有什么例子吗?给你:

    - name: Install helm chart from a git repo
      helm:
        host: localhost
        chart:
          source:
            type: git
            location: https://github.com/user/helm-chart.git
        state: present
        name: my-example
        namespace: default
    
    更新: 为了能够在某台主机上运行大多数Ansible模块,您需要在其上安装两个组件:

    • python 2.7
    • ssh服务器
    虽然大多数模块都是这样,但其中一些模块有额外的要求,必须满足这些要求才能在此类主机上运行该模块

    当涉及到
    k8s
    模块时,正如我们在its中看到的:

    执行此操作的主机需要以下要求 模块

    python >= 2.7
    openshift >= 0.6
    PyYAML >= 3.11
    
    它需要openshift(不同的kubernetes实现)并不是真的。安装openshift来管理我们的kubernetes集群的工作负载没有多大意义。因此,让我们精确地避免传播任何潜在的误导信息:它需要并且需要安装在运行模块的主机上(即,在我们通常运行
    kubectl
    命令的主机上)

    OpenShift Python客户端封装了K8s Python客户端,提供 完全访问两个平台上可用的所有API和模型。 有关API版本的详细信息和其他信息,请访问

    重要!:您不必在kubernetes节点上安装任何其他模块。您只需要在管理kubernetes工作负载的计算机上使用它们

    如果我们的Ansible安装在配置了
    kubectl
    工具的同一台主机上,并且我们希望在该主机上直接运行剧本,而无需使用ssh或配置Ansible资源清册,我们只需在我们的ansible剧本中将其称为:

    hosts: localhost
    connection: local
    
    创建新k8s命名空间的整个剧本可能如下所示:

    ---
    - hosts: localhost
      connection: local
      tasks:
      - name: Create a k8s namespace
        k8s:
          name: testing
          api_version: v1
          kind: Namespace
          state: present
    
    我们可以通过执行以下命令来运行它:

    ansible-playbook playbook.yaml
    
    然而,在我们能够做到这一点之前,我们需要确保我们已经安装了所有必需的依赖项,这些依赖项实际上并不多,它们仅限于python 2.7上述两个库(在必需的版本中)

    在主机上安装了Python之后,安装其余所需依赖项的最简单方法是运行:

    pip install openshift
    

    您可能会遇到以下错误:

    "msg": "Failed to import the required Python library (openshift) on ***** Python /usr/bin/python. Please read module documentation and install in the appropriate location. If the required library is installed, but Ansible is using the wrong Python interpreter, please consult the documentation on ansible_python_interpreter"
    
    如果是,运行:

    pip install --upgrade requests
    
    应该修复它(至少在我的情况下它修复了它),然后我们的简单的ansible playbookkubernetes集群中创建了新的
    名称空间
    ,应该可以顺利运行。:)

    我完全同意@p Ekambaram的观点,即kubernetes automation可以通过ansible成功实现,但同时我完全不同意他的观点。这种“声明性”代码实际上根本不是声明性的。它变成了命令集的包装器。除此之外,这样的剧本不是(让我们提醒一下,如果一次操作的结果与不进行任何干预的重复操作的结果完全相同,那么一个操作就是幂等的)。这种方法与ansible中的一个关键概念相反

    shell
    command
    模块应在ansible中作为最后手段使用,前提是没有其他方式执行所需任务,例如专用模块不存在或缺少某些重要功能时

    当谈到使用ansible自动化kubernetes时,这种专用模块已经存在

    快速查看一下,您会发现可以通过更优雅、更清晰的方式实现所需的结果:

    名称空间创建:

    - name: Create a k8s namespace
      k8s:
        name: testing
        api_version: v1
        kind: Namespace
        state: present
    
    基于yaml定义文件创建服务

    - name: Create a Service object by reading the definition from a file
      k8s:
        state: present
        src: /testing/service.yml
    
    您刚才提到过您正在使用helm管理kubernetes应用程序吗?看一看。有什么例子吗?给你:

    - name: Install helm chart from a git repo
      helm:
        host: localhost
        chart:
          source:
            type: git
            location: https://github.com/user/helm-chart.git
        state: present
        name: my-example
        namespace: default
    
    更新: 为了能够在某台主机上运行大多数Ansible
    模块,您需要在其上安装两个组件:

    • python 2.7
    • ssh服务器
    而这对于大多数模块来说都是正确的