Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ちょっと大きめのOSSにコントリビュートしかけた話

世良泰明
September 17, 2023

 ちょっと大きめのOSSにコントリビュートしかけた話

2023/09/16
小江戸らぐ 9月のオフな集まり(第254回)
世良泰明

概要
kubesprayのバグを見つけ、プルリクエストを投げてみた話。

世良泰明

September 17, 2023
Tweet

More Decks by 世良泰明

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 名前: 世良 泰明 (せら やすあき) 職業: ひよっこインフラエンジニア (3年⽬) 名古屋の某SIer所属

    AWSでインフラ基盤の開発・運⽤ twitter: @y_sera15 ⾃宅K8sクラスター (intel nuc 3台) ESXi Master node1 Worker node1 ESXi Master node2 Worker node2 ESXi Master node3 Worker node3 Master 3台, worker 3台のHA構成 CNI: Ciliumを利⽤
  2. 今⽇の話 kubesprayというkubernetesクラスタ構築ツールでバグを踏んだため、 修正プルリクエストを投げてみました ⽬次 1. きっかけ 2. Kubesprayとは 3. Ciliumとは

    4. やろうとしたこと 5. ハマったバグ 6. バグ修正 7. コントリビュートまでの準備 8. プルリクエスト 9. 結果 10.まとめ
  3. やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 diff --git a/mycluster/group_vars/k8s_cluster/k8s-cluster.yml b/mycluster/group_vars/k8s_cluster/k8s-cluster.yml index 211a350..a4ae5e1 100644

    --- a/mycluster/group_vars/k8s_cluster/k8s-cluster.yml +++ b/mycluster/group_vars/k8s_cluster/k8s-cluster.yml @@ -67,7 +67,7 @@ credentials_dir: "{{ inventory_dir }}/credentials" # Choose network plugin (cilium, calico, kube-ovn, weave or flannel. Use cni for generic cni plugin) # Can also be set to 'cloud', which lets the cloud provider setup appropriate routing -kube_network_plugin: calico +kube_network_plugin: cilium Ciliumの有効化
  4. やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 diff --git a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml index a170484..96a493e 100644

    --- a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml +++ b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml @@ -52,7 +52,7 @@ # Only effective when monitor aggregation is set to "medium" or higher. # cilium_monitor_aggregation_flags: "all" # Kube Proxy Replacement mode (strict/partial) -# cilium_kube_proxy_replacement: partial +cilium_kube_proxy_replacement: strict # If upgrading from Cilium < 1.5, you may want to override some of these options # to prevent service disruptions. See also: @@ -117,7 +117,7 @@ # IP Masquerade Agent # https://docs.cilium.io/en/stable/concepts/networking/masquerading/ # By default, all packets from a pod destined to an IP address outside of the cilium_native_routing_cidr range are masqueraded -# cilium_ip_masq_agent_enable: false +cilium_ip_masq_agent_enable: true ### A packet sent from a pod to a destination which belongs to any CIDR from the nonMasqueradeCIDRs is not going to be masqueraded # cilium_non_masquerade_cidrs: CiliumでeBPFの有効化(1/2)
  5. やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 @@ -224,13 +224,13 @@ # cilium_enable_ipv6_masquerade: true

    # -- Enable native IP masquerade support in eBPF -# cilium_enable_bpf_masquerade: false +cilium_enable_bpf_masquerade: true # -- Configure whether direct routing mode should route traffic via # host stack (true) or directly and more efficiently out of BPF (false) if # the kernel supports it. The latter has the implication that it will also # bypass netfilter in the host namespace. -# cilium_enable_host_legacy_routing: true +cilium_enable_host_legacy_routing: false CiliumでeBPFの有効化(2/2)
  6. やろうとしたこと Kubesprayでciliumをインストール, hubbleを有効化 diff --git a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml index 96a493e..cc6dcd7 100644

    --- a/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml +++ b/mycluster/group_vars/k8s_cluster/k8s-net-cilium.yml @@ -140,21 +140,22 @@ cilium_ip_masq_agent_enable: true # Hubble ### Enable Hubble without install -# cilium_enable_hubble: false +cilium_enable_hubble: true ### Enable Hubble Metrics -# cilium_enable_hubble_metrics: false +cilium_enable_hubble_metrics: true ### if cilium_enable_hubble_metrics: true ### Enable Hubble install -# cilium_hubble_install: false +cilium_hubble_install: true ### Enable auto generate certs if cilium_hubble_install: true -# cilium_hubble_tls_generate: false +cilium_hubble_tls_generate: true +#cilium_hubble_tls_generate: false # IP address management mode for v1.9+. # https://docs.cilium.io/en/v1.9/concepts/networking/ipam/ Hubbleの有効化
  7. ハマったバグ(もうちょい具体的に) Ciliumのインストールまではできたものの、hubbleを有効化するとエラーになる 原因: パラメータの条件分岐に伴うテンプレートファイルのインデントのズレ Kubespray/roles/network_plugin/cilium/templates/hubble/deploy.yml.j2 cilium_hubble_tls_generateパラメータの条件分岐でインデントがずれる 59 {% if cilium_hubble_tls_generate

    -%} 60 - mountPath: /var/lib/hubble-relay/tls 61 name: tls 62 readOnly: true 63 {% endif -%} 64 restartPolicy: Always 65 serviceAccount: hubble-relay 58 readOnly: true 59 - mountPath: /var/lib/hubble-relay/tls 60 name: tls 61 readOnly: true 62 restartPolicy: Always 63 serviceAccount: hubble-relay cilium_hubble_tls_generate:trueの場合 条件分岐の次の⾏のインデントがずれる…
  8. バグ修正 Jinja2テンプレートのインデントがずれないように修正 {% if something %} Aaa {% endif %}

    White space controlで制御する https://jinja.palletsprojects.com/en/3.1.x/templates/ {% if something -%} Aaa {% endif -%} {%- if something -%} Aaa {%- endif -%} {% if something +%} Aaa {% endif +%} {%- if something +%} Aaa {%- endif +%} などなど {% %}の前後に”-”もしくは”+”を記述することで前後の空⽩を制御 → 挙動がよくわからないので総当たりで調査 ⇨ 解決!!
  9. プルリクエスト作成 作業の流れ 1. ⾃分のアカウントでkubesprayリポジトリをfork 2. ⾃分のローカルでブランチ作成/コミット 3. ⾃分のリモートリポジトリへpush 4. Githubからプルリクエスト作成

    - プルリクエスト作成⽤のコメントはテンプレートが⽤意されているので、 それをいい感じに加⼯ - プルリクエスト作成すると、⾃動でCIテストが⾛る - CIテスト後, 2⼈以上のレビュアーから承認を受ければマージできるらしい
  10. まとめ Kubernetesクラスター構築ツールのkubesprayにバグ修正プルリクエストを投げてみた - Kubernetes-sigs配下のプロジェクトはプルリクエスト前にCLAの署名が必要 - 割としょうもないバグも埋もれてたりする - 作ったプルリクエストは最後まで責任を持つ(放置すると他のプルリクが採⽤されるかも) 所感 -

    意外としょーもないバグが混⼊してたりする - リリースバージョンではなく、直接マスターブランチの内容を使ってたから遭遇したのかも。。。 今後 他にもドキュメントでもう少し説明が欲しいところがあったので、 気が向いたら再度プルリクチャレンジしてみる