geerlingguy.k8s_manifests

Ansibleロール: K8sマニフェスト

CI

KubernetesクラスターにKubernetesマニフェスト(テンプレート化されたものまたは直接のもの)を適用するためのAnsibleロールです。

要件

  • Pipパッケージ: openshift
  • ローカルホストで実行する場合(例: connection: local)、ロールが正しく動作するようにansible_python_interpreter: "{{ ansible_playbook_python }}"を設定する必要があります。

ロール変数

使用可能な変数は以下に示されており、デフォルト値も記載されています(defaults/main.ymlを参照):

k8s_manifests:
  # `k8s_manifests_base_dir`内のパスを指定できます。
  - monitoring/prometheus

  # マニフェストファイルをテンプレート化したくない場合は`file`ルックアップを使用します。
  - dir: monitoring/grafana-configmap
    lookup_type: 'file'

  # 各マニフェストごとにネームスペースを設定できます(`manifest_namespace`にテンプレート化)。
  - dir: docker-registry
    namespace: registry

Kubernetesクラスターに適用するKubernetesマニフェストディレクトリのリスト。このリストは、単純なディレクトリパスやフォルダ名、またはdir(ディレクトリパス/フォルダ名)、オプションのlookup_typemanifest.ymlファイルに使用されるAnsibleルックアップタイプ)、オプションのnamespacemanifest_namespaceにテンプレート化)を含む辞書です。

このロールは指定された各マニフェストのディレクトリ内を探し、Ansibleのk8sモジュールを使用してmanifest.ymlファイル(およびそのすべての内容)を適用します。

ファイルをテンプレート化する必要がある場合、デフォルトではこのロールはmanifest.ymlファイルをテンプレート化します(manifest.ymlファイルと共にvars.ymlファイル内の変数を自動的に追加します)。ただし、テンプレート化を無効にして直接マニフェストを適用することもできます。その場合、lookup_type: fileを設定します。

k8s_manifests_base_dir: '' # 末尾に / を含めます。例: 'base_dir/'

この文字列が設定されている場合、k8s_manifestsで指定された各マニフェストのdir/パスの前に追加されます。Ansibleプレイブックディレクトリの外にすべてのKubernetesマニフェストを保存している場合に便利です。この設定により、各k8s_manifestsリスト項目で完全なパスを含める必要がなくなります。

k8s_manifests_state: present

k8sモジュールのstatepresentまたはabsentにするかどうか。absentを使用する際は、マニフェストに定義されたすべてのKubernetesリソースが常に削除されるわけではありません。

k8s_force: false

これをtrueに設定し、k8s_manifests_statepresentにすると、既存のオブジェクトが置き換えられます。そうでない場合、Ansibleのk8sモジュールおよびKubernetes自体のデフォルトの動作(例: applyを使用する場合)はリソースを_パッチ_します。

k8s_kubeconfig: ~/.kube/config

Kubernetesクラスターに接続するために使用するkubeconfigファイルのパス。

k8s_resource_namespace: ''
k8s_manage_namespace: true

デフォルトでは、このロールは特定のネームスペースにリソースをデプロイすることを想定しています。したがって、k8s_resource_namespaceを操作するネームスペースに設定すると、マニフェストを適用する前にそのネームスペースが存在することを確認します。このロールのネームスペース管理を無効にすることもできます(例: 適用するマニフェストがネームスペースなしであるべき場合、またはマニフェストごとにネームスペースを適用する場合).k8s_manage_namespace: falseを設定します。

k8s_no_log: true

各マニフェストの適用の詳細をAnsibleの出力に記録するかどうか。シークレットやその他の機密データがマニフェストの一部になる可能性があるため、デフォルトでは安全のために設定されています。デバッグ目的でfalseに設定します。

依存関係

なし。

例プレイブック

簡単な例 - ローカルホストで実行

---
- hosts: localhost
  connection: local
  gather_facts: no

  vars:
    ansible_python_interpreter: "{{ ansible_playbook_python }}"
    k8s_kubeconfig: ~/.kube/config-my-cluster
    k8s_manifests_base_dir: k8s-manifests/
    k8s_manifests:
      - storageclass

  roles:
    - role: geerlingguy.k8s_manifests

例として、k8s-manifestsディレクトリとそのREADMEを参照してください。そこにはvarsファイルが定義されたテンプレート化されたマニフェストレイアウトがあります。

大規模なプレイの一部として実行

---
- hosts: k8s_cluster
  become: true

  vars:
    ansible_python_interpreter: python
    k8s_manage_namespace: false
    k8s_no_log: false
    k8s_manifests_base_dir: k8s-manifests/
    k8s_manifests:
      - storageclass
      - dir: docker-registry
        namespace: registry

  tasks:
    - name: 適切にPythonインタプリタを設定します。
      set_fact:
        ansible_python_interpreter: "{{ ansible_playbook_python }}"

    - import_role:
        name: geerlingguy.k8s_manifests
      tags: ['kubernetes', 'nfs', 'drupal', 'registry']
      delegate_to: localhost
      become: false
      run_once: true

ライセンス

MIT / BSD

著者情報

このロールは2018年にJeff Geerlingによって作成され、 Ansible for DevOpsの著者です。

プロジェクトについて

Kubernetes manifest management role.

インストール
ansible-galaxy install geerlingguy.k8s_manifests
ライセンス
mit
ダウンロード
15.2k
所有者
Father, author, developer, maker. Sometimes called "an inflammatory enigma". #stl #drupal #ansible #k8s #raspberrypi #crohns