Ansible Kubernetes Core モジュールを通じて Calico マニフェストを適用する

Ansible Kubernetes Core モジュールを通じて Calico マニフェストを適用する

既存のシングルノードKubernetesクラスタ(kubeadm経由でインストール)にcalicoをインストールしようとしています。2つのマニフェストは次のとおりです。tigera オペレーターそしてカスタムリソースこれを kubectl 経由で手動でインストールすると正常に動作します。

kubectl -f apply tigera-operator.yaml
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/apiservers.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/imagesets.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/installations.operator.tigera.io created
customresourcedefinition.apiextensions.k8s.io/tigerastatuses.operator.tigera.io created
namespace/tigera-operator created
Warning: policy/v1beta1 PodSecurityPolicy is deprecated in v1.21+, unavailable in v1.25+
podsecuritypolicy.policy/tigera-operator created
serviceaccount/tigera-operator created
clusterrole.rbac.authorization.k8s.io/tigera-operator created
clusterrolebinding.rbac.authorization.k8s.io/tigera-operator created
deployment.apps/tigera-operator created

インストールしようとするとAnsible Kubernetes モジュール(コアでもコミュニティでも同じ)、次のエラーが発生します。

fatal: [work-pve]: FAILED! => {"changed": false, "msg": "Failed to find exact match for operator.tigera.io/v1.Installation by [kind, name, singularName, shortNames]"}

マニフェストは、もちろんあらゆる種類のリソースが混在しており、5,000 行以上あります。この問題の解決方法がわかりませんが、ご提案をお待ちしています。この問題は他のマニフェストでも発生すると思われるため、これは calico 固有の問題ではないと思います。

Ansible タスクは次のとおりです。

- name: apply manifest tigera-operator manifest
  kubernetes.core.k8s:
    src: "/tmp/tigera-operator.yaml"
    state: present
    kubeconfig: /etc/kubernetes/admin.conf

ホストでは、ansible 4.4 (apple m1、brew 経由でインストール) を実行しています。
サーバーでは、Ubuntu 20.04.3 を実行しています。Pip
ライブラリ: openshift (0.12.1)、kubernetes (12.0.1)。

答え1

最終的にはかなり簡単に解決できました。applyタスクにディレクティブを追加する必要がありました。これで次のようになります (2 番目の関連タスクも追加しています)。

- name: apply manifest tigera-operator manifest
  kubernetes.core.k8s:
    src: "/tmp/tigera-operator.yaml"
    state: present
    apply: yes
    kubeconfig: /etc/kubernetes/admin.conf

- name: apply manifest Calico custom-resources
  kubernetes.core.k8s:
    src: "/tmp/custom-resources.yaml"
    state: present
    apply: yes
    kubeconfig: /etc/kubernetes/admin.conf

参照: https://docs.ansible.com/ansible/latest/collections/community/kubernetes/k8s_module.html

apply は、必要なリソース定義を以前に提供されたリソース定義と比較し、自動的に生成されたプロパティを無視します。apply は、'force=yes' よりもサービスでうまく機能します。

関連情報