geerlingguy.k8s_manifests
Ansibleロール: K8sマニフェスト
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_type
(manifest.yml
ファイルに使用されるAnsibleルックアップタイプ)、オプションのnamespace
(manifest_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
モジュールのstate
をpresent
またはabsent
にするかどうか。absent
を使用する際は、マニフェストに定義されたすべてのKubernetesリソースが常に削除されるわけではありません。
k8s_force: false
これをtrue
に設定し、k8s_manifests_state
をpresent
にすると、既存のオブジェクトが置き換えられます。そうでない場合、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