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