Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
小江戸らぐ kubernetesクラスターを再構築した話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
世良泰明
January 14, 2023
Technology
250
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
小江戸らぐ kubernetesクラスターを再構築した話
2023/1/14
小江戸らぐ1月のオフな集まり(第246回)
世良泰明
January 14, 2023
More Decks by 世良泰明
See All by 世良泰明
ホームラボ紹介
y_sera15
0
290
Serendie Design Systemを使ってWebアプリケーションを開発してみた
y_sera15
0
160
Kubernetesの公式ドキュメントを翻訳してみた
y_sera15
0
82
ラズパイ奮闘記 その1
y_sera15
0
82
metrics-serverをセキュアなTLSでデプロイしてみた
y_sera15
0
720
EKS勉強会
y_sera15
1
190
自宅k8s構築日記 冬休み編
y_sera15
0
330
自宅k8sクラスター構築日記
y_sera15
0
270
EKSを動かしてみた話
y_sera15
0
130
Other Decks in Technology
See All in Technology
【ゲームメーカーズスクランブル2026】『Shadowverse: Worlds Beyond』UIとアニメーションで実現する最高のユーザー体験を叶えるプロトタイピング
cygames
PRO
1
700
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
280
地方移住と都心キャリアの両立は「金・時間・人」のリソースをフル活用すれば実現できる!〜Snowflake女子会 vol.8
snowwmn0824
0
140
Mastering Agentic Development: Harness Engineering for Effective Coding Agents
konippi
3
660
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
6
1.6k
GitHub Agentic Workflows を触ってみる
htkym
2
880
Lambda MicroVMsが分からなすぎたので使い所を1から考えてみた
tsukuboshi
1
260
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
130
ボードゲームの遊び相手をFoundation Modelsで作る / iOSDC Japan 2026
genda
0
240
Meet AgentCore Identity Consent Portal
hironobuiga
2
140
なぜAI任せのゲームは面白くならないのか?
hirohasuyoutube
0
340
CI/CDではもう遅い - 人とAIが迂回しないDevSecOps Verify基盤の再設計 -
kintotechdev
1
480
Featured
See All Featured
Test your architecture with Archunit
thirion
2
2.4k
Agile that works and the tools we love
rasmusluckow
331
22k
Unsuck your backbone
ammeep
672
58k
From π to Pie charts
rasagy
1
380
The SEO Collaboration Effect
kristinabergwall1
1
580
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
310
HDC tutorial
michielstock
2
930
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Crafting Experiences
bethany
1
360
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
380
Embracing the Ebb and Flow
colly
88
5.2k
Building AI with AI
inesmontani
PRO
1
1.3k
Transcript
kubernetesクラスターを再構築した話 2023/1/14 小江戸らぐ 1月のオフな集まり(第246回) 世良泰明
自己紹介 名前: 世良 泰明 (せら やすあき) 職業: ひよっこインフラエンジニア (2年目) 名古屋の某SIer所属
AWS上でインフラ構築・運用 趣味: 囲碁, サイクリング, 散歩, etc… twitter: @y_sera15 自宅K8sクラスター
今日の話 おうちで育てている放置しているkubernetesクラスター ネットワーク関係のプラグインを入れようとして壊してしまい、 クラスターごと再構築した
構成 物理マシン3台の上に仮想マシンを立てた(Ubuntu22.04) ・control plane node 3台 ・worker node 3台 ・ロードバランサー(haproxy+
keepalive) 2台 NUC1 ESXi control plane 1 worker1 haproxy1 NUC2 ESXi control plane 2 worker2 haproxy2 NUC3 ESXi control plane 3 worker3
worker3 きっかけ control plane 1 haproxy1 control plane 2 worker2
haproxy2 control plane 3 APIへのアクセス デスクトップ 端末 6443/tcp kubectl kube-apiserver Load Balancer kubernetesの クラスターを制御 するノード 6443/tcp コンテナを動かす ノード worker1 kubernetes上で動かすコンテナにアクセスしたい
worker3 きっかけ kubernetes上で動かすコンテナにアクセスしたい control plane 1 worker1 haproxy1 control plane
2 worker2 haproxy2 control plane 3 APIへのアクセス デスクトップ 端末 6443/tcp kubectl kube-apiserver Load Balancer kubernetesの クラスターを制御 するノード 6443/tcp コンテナを動かす ノード コンテナのアプリ にアクセスできる ようにしたい http:80
当時の構成の前に 前提知識 ・kubernetesのネットワーク ・コンテナへのアクセス方法
kubernetesのネットワーク ・各ノードのネットワーク 192.168.100.0/24 ・コンテナの世界のネットワーク 10.0.0.0/8 worker3 worker1 worker2 192.168.100.0/24 192.168.100.34
192.168.100.66 192.168.100.98 kubernetesは2つの層のネットワークがある 10.0.0.0/8 ノード間でコンテナの世界のネットワークを繋げる機能 ⇒ CNIというプラグインにより提供
CNI選定 CNI(Container Network Interface)とは ・kubernetesで異なるNode上のPod間ネットワークを構築するソフトウェア Flannel, Calico等、さまざまなCNIが存在する 流行り廃り、ネットワーク構成で選ぶ 図の引用 https://www.netstars.co.jp/kubestarblog/k8s-3/
ノード間のやり取りの仕組み ・L2トンネリング ・BGP
コンテナへのアクセス方法 方法としては(ざっくり)3つ 1.ノードのポートと紐づける ⇒ノード依存する, ポート被りを意識しないといけないから嫌 2.外部のロードバランサーを利用する ⇒ 管理対象物が増えるのは面倒 3.k8s上でロードバランサーとして機能するアプリを利用する(metallb) ⇒
これを使いたい worker worker worker 8080:80 デスクトップ 端末 8080 デスクトップ 端末 Loadbarancer worker worker デスクトップ 端末 Loadbarancer
metallb ベアメタルなkubernetesクラスター上に外部からアクセス可能なロードバランサーを構築する https://metallb.universe.tf/
当時の構成 CNI: Calicoを利用(L2トンネリング?) Metallbを利用しても, L2トンネリングではnodeの ポートを内部的に紐づける形になってしまう ノードに紐づく形になり, ロードバランシングはして くれない https://blog.framinal.life/entry/2020/04/16/022042
→ BGPを使用したい BGPだとCalicoプラグインは一部既知の不具合あり… ⇒ BGP利用可能な別のCNIを検討へ https://www.tigera.io/project-calico/ metallbのCNI対応表
CNI選定 ・Flannel → L2トンネリングしか提供が無いので不採用 ・Cilium BGP対応, ポッド間通信のオーバーヘッドも少ないとのことで採用 (他のCNIは目に入らず) https://www.tigera.io/project-calico/ metallbのCNI対応表
eBPF(拡張バークレーパケットフィルター)という機能を利用しており, kernel内でパケット処理をすることができる https://cilium.io/blog/2020/11/10/ebpf-future-of-networking/
やったこと CalicoからCiliumに乗り換えようとしたところ、失敗。 切り戻しもできずPod間通信不可に。 ⇒ ゼロからクラスター再構築. ・kubernetesクラスター削除 ・CNI用のポート穴あけ ・CNI用カーネルパラメータ変更 ・kubernetes再インストール ・Ciliumインストール
kubernetesクラスター削除 # クラスター削除 sudo kubeadm reset # CNI情報のリセット sudo rm
–rf /etc/cni/net.d
カーネルパラメータ変更 #カーネルパラメータの変更 # https://docs.cilium.io/en/v1.12/operations/system_requirements/#linux-kernel sudo vi /etc/sysctl.d/cilium.conf sudo sysctl --system
# eBPFを利用する場合の最低限 ``` CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_NET_CLS_BPF=y CONFIG_BPF_JIT=y CONFIG_NET_CLS_ACT=y CONFIG_NET_SCH_INGRESS=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CGROUPS=y CONFIG_CGROUP_BPF=y ```
カーネルパラメータ変更 #他にも色々あるのでとりあえず全部のせ CONFIG_BPF=y CONFIG_BPF_SYSCALL=y CONFIG_NET_CLS_BPF=y CONFIG_BPF_JIT=y CONFIG_NET_CLS_ACT=y CONFIG_NET_SCH_INGRESS=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_USER_API_HASH=y
CONFIG_CGROUPS=y CONFIG_CGROUP_BPF=y CONFIG_NETFILTER_XT_SET=m CONFIG_IP_SET=m CONFIG_IP_SET_HASH_IP=m CONFIG_NETFILTER_XT_TARGET_TPROXY=m CONFIG_NETFILTER_XT_TARGET_CT=m CONFIG_NETFILTER_XT_MATCH_MARK=m CONFIG_NETFILTER_XT_MATCH_SOCKET=m CONFIG_XFRM=y CONFIG_XFRM_OFFLOAD=y CONFIG_XFRM_STATISTICS=y CONFIG_XFRM_ALGO=m CONFIG_XFRM_USER=m CONFIG_INET{,6}_ESP=m CONFIG_INET{,6}_IPCOMP=m CONFIG_INET{,6}_XFRM_TUNNEL=m CONFIG_INET{,6}_TUNNEL=m CONFIG_INET_XFRM_MODE_TUNNEL=m CONFIG_CRYPTO_AEAD=m CONFIG_CRYPTO_AEAD2=m CONFIG_CRYPTO_GCM=m CONFIG_CRYPTO_SEQIV=m CONFIG_CRYPTO_CBC=m CONFIG_CRYPTO_HMAC=m CONFIG_CRYPTO_SHA256=m CONFIG_CRYPTO_AES=m CONFIG_NET_SCH_FQ=m
ポート開放 #firewallの設定変更 sudo ufw allow 8472/udp sudo ufw allow 4240/tcp
sudo ufw allow icmp sudo ufw allow 4244/tcp sudo ufw allow 4245/tcp sudo ufw allow 6060/tcp sudo ufw allow 6061/tcp sudo ufw allow 6062/tcp sudo ufw allow 9879/tcp sudo ufw allow 9890/tcp sudo ufw allow 9891/tcp sudo ufw allow 9892/tcp sudo ufw allow 9893/tcp sudo ufw allow 9962/tcp sudo ufw allow 9963/tcp sudo ufw allow 9964/tcp sudo ufw allow 51871/tcp sudo ufw reload
クラスター構築 #1台目構築 # https://docs.cilium.io/en/stable/gettingstarted/kubeproxy-free/#kubeproxy-free sudo kubeadm init --control-plane-endpoint "192.168.100.4:6443" --upload-certs
-- skip-phases=addon/kube-proxy # 2台目以降構築(コントロールプレーンノード) kubeadm join 192.168.100.4:6443 --token wzwlie.hdrvl4awhtrl8rex ¥ --discovery-token-ca-cert-hash sha256:6bfe2d8d0802e3e58fad51efaf8b671cd8af06bc10e2bd5f3d949c90ae82b6a3 ¥ --control-plane --certificate-key 106b45bc222e698a78390236f7e1730c258134d7573d1c5c23eea8d114e72746 # ワーカーノード構築 kubeadm join 192.168.100.4:6443 --token wzwlie.hdrvl4awhtrl8rex ¥ --discovery-token-ca-cert-hash sha256:6bfe2d8d0802e3e58fad51efaf8b671cd8af06bc10e2bd5f3d949c90ae82b6a3
ciliumインストール # BGP設定をkubectl apply ``` apiVersion: v1 kind: ConfigMap metadata:
name: bgp-config namespace: kube-system data: config.yaml: | peers: - peer-address: 10.0.0.1 peer-asn: 64512 my-asn: 64512 address-pools: - name: default protocol: bgp addresses: - 192.168.100.0/24 ```
ciliumインストール # helm経由でインストール # https://docs.cilium.io/en/stable/gettingstarted/bgp/#bgp helm repo add cilium https://helm.cilium.io/
helm update # BGPを有効化してインストール API_SERVER_IP="192.168.100.4" API_SERVER_PORT="6443" helm install cilium cilium/cilium --version 1.12.5 ¥ --namespace kube-system ¥ --set bgp.enabled=true ¥ --set bgp.announce.loadbalancerIP=true ¥ --set bgp.announce.podCIDR=true ¥ --set kubeProxyReplacement=strict ¥ --set k8sServiceHost=${API_SERVER_IP} ¥ --set k8sServicePort=${API_SERVER_PORT}
まとめ&現状/今後 まとめ&現状 metallbをBGPを利用して動作させるため, CNIを入れ替えてkubernetesクラスターを再構 築した. ただ, BGPモードで動いているのか怪しい (BGPモードはBGPルータが必要だが, ルータのBGPが無効なのにPod間通信ができている) 今後やること
・ルータ(Yamaha RTX1220)のBGPを有効化して再検証(躓いてる) ・metallbの導入方法調べる(ciliumに内包されてる?) https://docs.cilium.io/en/stable/gettingstarted/bgp/#bgp ドキュメントが英語なのと、何が分からないか分からないので難しい…