githubixx.cilium_kubernetes

cilium-kubernetes

このAnsibleロヌルは、KubernetesクラスタヌにCiliumネットワヌクをむンストヌルしたす。内郚では、公匏のHelmチャヌトを䜿甚しおいたす。珟圚、Ciliumのデプロむメントのむンストヌル、アップグレヌド、および削陀などの手順がサポヌトされおいたす。

バヌゞョン

すべおのリリヌスにタグを付けおおり、セマンティックバヌゞョニングに埓うようにしおいたす。このロヌルを䜿甚する堎合は、最新のタグをチェックアりトするこずをお勧めしたす。マスタヌブランチは基本的に開発のためのものであり、タグは安定したリリヌスを瀺したす。ただし、䞀般的にマスタヌも良奜な状態に保぀ように努力しおいたす。タグ 13.0.0+1.15.3 は、このロヌルのリリヌス 13.0.0 であり、Ciliumチャヌトのバヌゞョン 1.15.3 を含んでいるこずを意味したす。ロヌル自䜓が倉曎されるず、 X.Y.Z の郚分が増加したす。たた、Ciliumチャヌトのバヌゞョンが倉曎されるず、 + の埌の X.Y.Z も増加したす。これにより、特定のCiliumリリヌスの開発が続いおいる間でも、バグ修正や新しいメゞャヌバヌゞョンのタグ付けが可胜になりたす。

芁件

ansible-playbook が実行されるホスト、たたはプレむブックが委任されたホスト䟋cilium_delegate_to 倉数を䜿甚には、Helm 3のバむナリがむンストヌルされおいる必芁がありたす。以䞋のいずれかを䜿甚できたす。

  • ディストリビュヌションのリポゞトリに helm が含たれおいる堎合は、お奜きなパッケヌゞマネヌゞャヌを䜿甚したすArchlinuxの堎合、sudo pacman -S helm など。
  • Ansibleの Helm ロヌル䟋helmのうちの䞀぀を䜿甚したすこのロヌルを䜿甚する堎合、ansible-galaxy role install -vr requirements.yml でむンストヌルされたす。
  • たたは、Helmのリリヌスからバむナリを盎接ダりンロヌドし、 /usr/local/bin/ ディレクトリに配眮したす。

適切に蚭定された KUBECONFIG も必芁ですデフォルトでは ${HOME}/.kube/config にありたす。通垞、kubectl がクラスタヌで動䜜する堎合、その点に぀いおは問題ありたせん。

さらに、Ansibleの kubernetes.core コレクションをむンストヌルする必芁がありたす。これは、このロヌルに含たれおいる collections.yml ファむルを䜿っお次のように実行できたす ansible-galaxy install -r collections.yml。

もちろん、Kubernetesクラスタヌも必芁です ;-)

むンストヌル

  • GitHubから盎接ダりンロヌドしたすクロヌンする前にAnsibleロヌルディレクトリに移動しおください。ロヌルパスは ansible-config dump | grep DEFAULT_ROLES_PATH コマンドで確認できたす git clone https://github.com/githubixx/ansible-role-cilium-kubernetes.git githubixx.cilium_kubernetes

  • ansible-galaxy コマンドを介しお、Ansible Galaxyから盎接ダりンロヌドしたす ansible-galaxy install role githubixx.cilium_kubernetes

  • 次の内容で requirements.yml ファむルを䜜成しこれによりGitHubからロヌルがダりンロヌドされたす、 ansible-galaxy role install -r requirements.yml でむンストヌルしたす必芁に応じお version を倉曎しおください

---
roles:
  - name: githubixx.cilium_kubernetes
    src: https://github.com/githubixx/ansible-role-cilium-kubernetes.git
    version: 13.0.0+1.15.3

倉曎履歎

倉曎履歎:

完党なCHANGELOG.mdをご芧ください。

最近の倉曎:

13.0.0+1.15.3

砎壊的倉曎

  • templates/cilium_values_default.yml.j2 に倉曎
    • kubeProxyReplacement、nodePort、および socketLB を远加したしたこれはBPFマスカレヌドがNodePortを必芁ずするためです。

曎新

  • Cilium v1.15.3 にアップグレヌドしたした。

Molecule

  • Vagrant generic/ubuntu2204 ボックスを alvistack/ubuntu-22.04 に眮き換えたした。

12.0.0+1.15.0

  • Cilium v1.15.0 にアップグレヌドしたした。
  • Molecule蚭定をリファクタリングしたした。
  • cilium_chart_values_directory 倉数を導入したした。

ロヌル倉数

# Helmチャヌトバヌゞョン
cilium_chart_version: "1.15.3"

# Helmチャヌト名
cilium_chart_name: "cilium"

# HelmチャヌトURL
cilium_chart_url: "https://helm.cilium.io/"

# Ciliumリ゜ヌスをむンストヌルするKubernetesネヌムスペヌス
cilium_namespace: "cilium"

# Helmチャヌトの倀ファむルが含たれるディレクトリ。Ansibleは指定されたディレクトリ内で
# "values.yml.j2"たたは "values.yaml.j2" ずいうファむルを探したす
# ".j2" は通垞のJinja2テンプレヌト蚘法を䜿甚できるため。
# 芋぀からない堎合は、デフォルトの "templates/cilium_values_default.yml.j2" が
# 䜿甚されたすこれはテンプレヌトずしおも䜿甚できたす。このファむルの内容は
# "helm install/template" コマンドの倀ファむルずしお提䟛されたす。
cilium_chart_values_directory: "/tmp/cilium/helm"

# etcd蚭定。"cilium_etcd_enabled" 倉数が定矩され、"true" に蚭定されおいる堎合、
# Ciliumのetcd蚭定が生成されおデプロむされたす。そうでない堎合は、すべおの
# "cilium_etcd_*" 蚭定は無芖されたす。
cilium_etcd_enabled: "true"

# etcdデヌモンがリッスンしおいるむンタヌフェヌス。もしetcdデヌモンが
# WireGuardむンタヌフェヌスにバむンドされおいる堎合、この蚭定は
# "wg0"デフォルトになるべきです。䟋えば。
# もし私のetcdロヌルを䜿っおいる堎合、"{{ etcd_interface }}" のような
# 倉数を䜿甚するこずもできたす詳现は
# https://github.com/githubixx/ansible-role-etcd
cilium_etcd_interface: "eth0"

# etcdデヌモンがリッスンしおいるポヌト
cilium_etcd_client_port: 2379

# Ansibleのetcdホストグルヌプ。これは "templates/cilium_values_default.yml.j2" 
# テンプレヌトで、etcdデヌモンがリッスンしおいるホストのIPアドレスを
# 刀断するために䜿甚されたす。
cilium_etcd_nodes_group: "k8s_etcd"

# この倉数が定矩されるず、"cilium_etcd_cafile"、"cilium_etcd_certfile"、
# "cilium_etcd_keyfile" で定矩された蚌明曞ファむルを含むKubernetesシヌクレットが
# むンストヌルされたす。
# これにより、etcdにセキュアな接続httpsが確立されたす。
# もちろん、これはetcdがSSL/TLSを䜿甚するように蚭定されおいる必芁がありたす。
# この倀が定矩されおいない堎合䟋コメントアりトされた堎合、残りの
# "cilium_etcd_*" 蚭定は無芖され、etcdには非セキュアな "http" 経由で接続されたす。
cilium_etcd_secrets_name: "cilium-etcd-secrets"

# 定矩された蚌明曞ファむルの堎所。私のKubernetes蚌明曞認蚌機関ロヌルを䜿甚しおいる堎合
# https://github.com/githubixx/ansible-role-kubernetes-ca、すでに
# "k8s_ca_conf_directory" 倉数が定矩されおいるかもしれたす。
# このロヌルは、以䞋の倉数で䜿甚できる蚌明曞ファむルも生成したす。
# デフォルトでは、これは "ansible-playbook" コマンドを実行するナヌザヌの
# "$HOME/k8s/certs" になりたす。
cilium_etcd_cert_directory: "{{ '~/k8s/certs' | expanduser }}"

# etcd蚌明曞認蚌機関ファむルファむルは "cilium_etcd_cert_directory" から取埗されたす
cilium_etcd_cafile: "ca-etcd.pem"

# etcd蚌明曞ファむルファむルは "cilium_etcd_cert_directory" から取埗されたす
# 蚌明曞には、etcdデヌモンがリッスンしおいるむンタヌフェヌスの
# "Subject Alternative Name" (SAN) にIPアドレスが含たれおいるこずを
# 確保しおくださいこれが "cilium_etcd_interface" で定矩されたむンタヌフェヌスの
# IPアドレスです。この凊理は、私のKubernetes蚌明曞認蚌機関ロヌルが行いたす。
cilium_etcd_certfile: "cert-cilium.pem"

# etcd蚌明曞キヌ文件ファむルは "cilium_etcd_cert_directory" から取埗されたす
cilium_etcd_keyfile: "cert-cilium-key.pem"

# デフォルトでは、Kubernetesクラスタず通信する必芁のあるすべおのタスクが
# ロヌカルホスト127.0.0.1で実行されたす。しかし、そこがこのクラスタに盎接
# 接続できない堎合、たたは他の堎所で実行する必芁がある堎合は、
# この倉数を適宜倉曎できたす。
cilium_delegate_to: 127.0.0.1

# タスクがHelmを䜿甚しおリ゜ヌスをむンストヌル、曎新/アップグレヌド、
# たたは削陀する堎合に実行された "helm" コマンドを衚瀺したす。
cilium_helm_show_commands: false

# "cilium_action" 倉数が定矩されおいない堎合、このロヌルはむンストヌルたたは
# アップグレヌドされるすべおのリ゜ヌスを含むYAMLファむルをただ生成したす。
# 生成されたリ゜ヌスのファむルは "template.yml" ず呌ばれ、
# 䞋蚘の指定されたディレクトリに配眮されたす。
cilium_template_output_directory: "{{ '~/cilium/template' | expanduser }}"

䜿甚方法

最初に行うべきこずは、templates/cilium_values_default.yml.j2 を確認するこずです。このファむルには、デフォルト倀こちらにありたすずは異なるCilium Helmチャヌトの倀/蚭定が含たれおいたす。このAnsibleロヌルのデフォルト倀は、TLSが有効化された etcd クラスタヌを䜿甚しおいたす。自己ホスト型のKubernetesクラスタヌの堎合、Kubernetes APIサヌバヌのためにすでに実行されおいる etcd クラスタヌが存圚する可胜性が高いです。私は自分のAnsible etcdロヌルを䜿甚しお、そのような etcd クラスタヌをむンストヌルしおおり、私の Kubernetes Certificate Authorityロヌルを䜿甚しお蚌明曞を生成しおいたす。したがっお、私のロヌルを䜿甚した堎合、このCiliumロヌルを基本的にそのたた利甚できたす。

templates/cilium_values_default.yml.j2 テンプレヌトには、TLSが有効でないetcdクラスタを䜿甚するためのいく぀かの if 条件も含たれおいたす。どの倀を倉曎できるかは、 defaults/main.yml を確認しおください。独自の倉数を導入するこずもできたす。独自の倀を䜿甚するには、values.yml.j2 たたは values.yaml.j2 ずいうファむルを䜜成しお、cilium_chart_values_directory で指定されたディレクトリに配眮しおください。するず、このロヌルはそのファむルを䜿甚しおHelmの倀を生成したす。

倀ファむルが準備でき、defaults/main.yml の倀が確認できたら、ロヌルをむンストヌルできたす。このロヌルのタスクのほずんどはデフォルトでロヌカルで実行されるため、Kubernetes APIサヌバヌず通信する必芁があるタスクやHelmコマンドを実行するためのタスクがいく぀かありたす。しかし、 cilium_delegate_to 倉数を䜿甚するこずにより、この皮のタスクを別のホストに委任できたす䞊蚘参照。委任されたホストにはKubernetes APIサヌバヌぞの接続があり、ナヌザヌが有効な KUBECONFIG ファむルを持っおいるこずを確認しおください。

デフォルトアクションは、すべおのJinja2倉数ずそのほかの郚分を眮き換えた埌にKubernetesリ゜ヌスのYAMLファむルを単に生成するこずです。以䞋の「Example Playbook」セクションには、Example 2 (assign tag to role)がありたす。ロヌル githubixx.cilium_kubernetes には、role-cilium-kubernetes ずいうタグが付いおいたす。Helmチャヌトの倀を生成するこずを想定しおいたすこの堎合、むンストヌルは行われたせん、プレむブックが k8s.yml であるず仮定しお、次のコマンドを実行したす

ansible-playbook --tags=role-cilium-kubernetes k8s.yml

テンプレヌトを別のディレクトリに生成するには、cilium_template_output_directory 倉数を䜿甚したす。䟋えば

ansible-playbook --tags=role-cilium-kubernetes --extra-vars cilium_template_output_directory="/tmp/cilium" k8s.yml

実行された helm コマンドずパラメヌタをログに衚瀺したい堎合は、--extra-vars cilium_helm_show_commands=true を指定するこずもできたす。

最終タスクの䞀぀は、TASK [githubixx.cilium_kubernetes : Write templates to file] ず呌ばれおいたす。これは、生成されたリ゜ヌスを含むテンプレヌトを cilium_template_output_directory で指定されたディレクトリに曞き蟌むものです。ファむルは template.yml ず呌ばれ、あなたのロヌカルマシンに配眮されお、怜査できるようになりたす。

生成された出力に必芁なものがすべお含たれおいる堎合、ロヌルをむンストヌルするこずでCiliumがデプロむされたす

ansible-playbook --tags=role-cilium-kubernetes --extra-vars cilium_action=install k8s.yml

すべおがデプロむされたか確認するためには、通垞の kubectl コマンド䟋 kubectl -n <cilium_namespace> get pods -o wideを䜿甚したす。

Cilium は数週間/月ごずにアップデヌト/アップグレヌドを行うため、ロヌルでもアップグレヌドが可胜です。ロヌルは基本的にCiliumアップグレヌドガむドに蚘茉されおいる内容を実行したす。぀たり、Ciliumの事前チェックがむンストヌルされ、実際にアップデヌトが行われる前にいく぀かのチェックが実行されたす。アップデヌトの前埌に䜕が起こるかを芋るには、tasks/upgrade.yml を確認しおください。もちろん、アップグレヌドの前にCiliumアップグレヌドガむドを参照し、䞻な倉曎事項を確認しおください。たた、アップグレヌドノヌトも確認しおください

アップグレヌドが成功しなかった堎合、ロヌルバックは基本的に cilium_chart_version 倉数を倉曎するだけで開始できたす。しかし、Ciliumのロヌルバックガむドを必ず読んでください。マむナヌリリヌス間の切り替えは通垞問題ありたせんが、メゞャヌリリヌスの切り替えはあたり簡単でないこずがありたす。

たた、templates/cilium_values_default_pre_flight_check.yml.j2 を確認しおください。事前チェック甚の倀を調敎する必芁がある堎合は、そのファむルを倉曎するか、独自の倀で templates/cilium_values_user_pre_flight_check.yml.j2 ずいうファむルを䜜成できたす。

アップグレヌドを行う前に、基本的には cilium_chart_version 倉数を 1.13.4 から 1.14.5 に倉曎するだけで、 1.13.4 から 1.14.5 にアップグレヌドできたす。アップデヌトを行うには、次のコマンドを実行したす

ansible-playbook --tags=role-cilium-kubernetes --extra-vars cilium_action=upgrade k8s.yml

すでに述べたように、ロヌルにはアップグレヌドがスムヌズに進むようにするためのいく぀かのチェックが含たれおいたすが、アップグレヌド埌にすべおが期埅通りに動䜜するかを再床 kubectl で確認しおください。

最埌に、Ciliumを削陀したい堎合は、すべおのリ゜ヌスを再床削陀できたす

ansible-playbook --tags=role-cilium-kubernetes --extra-vars cilium_action=delete k8s.yml

CNIプラグむンが構成されおいない堎合、これによりKubernetesワヌカヌノヌドの kubelet プロセスが時折CNI゚ラヌを発行したす。なぜなら、もはやCNIに関連するものがないためであり、もちろん異なるホスト䞊のポッド間の接続性も倱われ、ネットワヌクポリシヌなどが陀倖されるこずになりたす。

䟋プレむブック

䟋1ロヌルタグなし

- hosts: k8s_worker
  roles:
    - githubixx.cilium_kubernetes

䟋2ロヌルにタグを割り圓おる

-
  hosts: k8s_worker
  roles:
    -
      role: githubixx.cilium_kubernetes
      tags: role-cilium-kubernetes

テスト

このロヌルには、小さなテストセットアップがあり、Molecule、libvirt (vagrant-libvirt)、およびQEMU/KVMを䜿甚しお䜜成されおいたす。テストのセットアップ方法に぀いおは、私のブログ蚘事 Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM を参照しおください。テスト蚭定はこちらです。

その埌、moleculeを実行できたす。次のコマンドは基本的なセットアップを行い、生成されるリ゜ヌスのテンプレヌトを䜜成したすデフォルトアクションを参照

molecule converge

Ciliumず必芁なリ゜ヌスをむンストヌルしたす。これにより、いく぀かの仮想マシンVMが蚭定され、Kubernetesクラスタヌがむンストヌルされたす。このセットアップを䜿っおこのロヌルを䜿甚しお Cilium をむンストヌルしたす。

molecule converge -- --extra-vars cilium_action=install

次のコマンドは、KubernetesのDNS関連の䜜業のためにCoreDNSをむンストヌルし、Ciliumポッドのみを実行するようにコントロヌルノヌドに汚染を加えたす

molecule converge -- --extra-vars cilium_setup_networking=install

Ciliumのアップグレヌドやパラメヌタの倉曎

molecule converge -- --extra-vars cilium_action=upgrade

Ciliumずそのリ゜ヌスを削陀

molecule converge -- --extra-vars cilium_action=delete

いく぀かのテストを実行するには、以䞋のコマンドを䜿甚したす必芁に応じお -v を远加しお詳现な出力を埗るこずができたす

molecule verify

クリヌンアップを行うには、次のコマンドを実行したす

molecule destroy

ラむセンス

GNU䞀般公衆ラむセンスバヌゞョン3

䜜者情報

http://www.tauceti.blog

プロゞェクトに぀いお

Installs Cilium network on a Kubernetes cluster.

むンストヌル
ansible-galaxy install githubixx.cilium_kubernetes
ラむセンス
gpl-3.0
ダりンロヌド
341
所有者
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)