簡體   English   中英

如何自動化 Kubernetes 配置?

[英]How to automate Kubernetes configuration?

我想自動化我的 Kubernetes 配置,比如用於 VM 的 Ansible。

示例場景:

  1. 創建命名空間港口
  2. 通過 Helm https://github.com/goharbor/harbor-helm部署 Harbor

什么樣的工具適合這樣的場景? 我也可以使用 terraform 嗎?

我完全@P Ekambaram同意kubernetes自動化可以ansible但在同一時間,我完全不同意他當它涉及到它應該做的方式做成功。 這種“聲明性”代碼實際上根本不是聲明性的。 它變成了一組命令式命令的簡單包裝。 除此之外,這樣的劇本不是冪等的(讓我們提醒一下,如果一個操作執行一次的結果與重復執行它而沒有任何干預動作的結果完全相同。)。 這種方法與ansible 中存在的關鍵概念之一相反。

shellcommand模塊應該在ansible 中作為最后的模塊使用,只有在沒有其他方式執行所需任務的情況下,例如當專用模塊不存在或缺少一些重要功能時。

當談到使用ansible 自動化 kubernetes 時,這樣的專用模塊已經存在。

快速瀏覽一下k8s - 用於管理 kubernetes 對象的 ansible 模塊,您會發現可以以更優雅、更清晰的方式實現所需的結果:

命名空間創建:

- 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應用程序嗎? 查看helm 模塊文檔 有什么例子嗎? 這個給你:

- 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模塊,您需要在其上安裝兩件事:

  • 蟒蛇 2.7
  • SSH服務器

雖然大多數模塊都是如此,但其中一些模塊有額外的要求,必須滿足這些要求才能在此類主機上運行該模塊。

當談到k8s模塊時,我們可以在其文檔中閱讀:

執行此模塊的主機需要滿足以下要求。

 python >= 2.7 openshift >= 0.6 PyYAML >= 3.11

它不需要openshift (不同的 kubernetes 實現)是不正確的。 安裝openshift來管理我們的kubernetes 集群的工作負載沒有多大意義。 因此,讓我們准確地避免傳播任何潛在的誤導性信息:它需要OpenShift python 客戶端庫,並且需要將其安裝在運行模塊的主機上(即,在我們通常運行kubectl命令的主機上)。

OpenShift Python 客戶端封裝了 K8s Python 客戶端,提供對兩個平台上可用的所有 APIS 和模型的完全訪問。 有關 API 版本詳細信息和其他信息,請訪問https://github.com/openshift/openshift-restclient-python

重要提示!:您不必在 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 后,安裝其余所需依賴項的最簡單方法是 runnig:

pip install openshift

pip install PyYAML

您可能會遇到以下錯誤:

"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

應該修復它(至少在我的情況下它修復了它),然后我們在kubernetes 集群中創建新namespace簡單ansible playbook應該可以順利運行。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM