Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
年末なのでオンプレ Kubernetes クラスタをアップグレードしよう
Search
cyokozai
April 01, 2026
Technology
32
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
年末なのでオンプレ Kubernetes クラスタをアップグレードしよう
cyokozai
April 01, 2026
More Decks by cyokozai
See All by cyokozai
英語が話せなくてもKubeConスタッフに参加した話
yusuke427
2
1.2k
そりゃあ、BoFぞなもし
yusuke427
0
72
シェーダーもGoで書く! Ebitengineで作る リアルタイムGPUシェーダーエディタ
yusuke427
0
120
若手_学生エンジニアがテックカンファレンスに参加すべき5つの理由.pdf
yusuke427
0
52
10Gb ルータを作るための下準備
yusuke427
0
43
アウトプットの質を高めるために僕はLTをやめた
yusuke427
0
41
さくらのクラウド AppRun と GitHub Actions でお手軽サーバレス構築
yusuke427
2
140
塩漬けになったVM それ、Kubernetesで動かせますよ
yusuke427
2
250
KubeVirt の Live Migration をやってみる | Try KubeVirt's Live Migration on Nekko Cloud
yusuke427
2
770
Other Decks in Technology
See All in Technology
ブラウザアプリの継続的パフォーマンスモニタリング (序) / Continuous Browser Application Performance Monitoring; Act 1
moznion
0
110
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.6k
本番に近いテストをもっと手軽に - Postmanで広がるAPIテストの世界 / Expanding the World of API Testing with Postman
yokawasa
1
250
プロダクトエンジニアに必要な「いい感じ」に作る能力 〜たくさん作れる時代に、どこまで作るかの決め方〜
jnishime_dresscode
2
1.3k
Jetpack Compose で挑む新聞紙面UI ─ 複合ジェスチャー・ポリゴン記事領域・適応的ページ構成という3つの壁/droidkaigi2026
nikkei_engineer_recruiting
0
190
データエンジニアの困りごとをDevinと一緒に解消する
10xinc
2
810
書籍『生成AIの安全性入門』の入門
wataoka
0
210
AI時代に、プロダクトの数だけ積み上がる所有コストをどうエンジニアリングするか / Engineering the Cost of Ownership
kzkmaeda
0
990
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
3
1.4k
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
770
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
180
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
390
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.3k
ラッコキーワード サービス紹介資料
rakko
1
4.7M
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Exploring anti-patterns in Rails
aemeredith
3
490
A Tale of Four Properties
chriscoyier
163
24k
GraphQLとの向き合い方2022年版
quramy
50
15k
KATA
mclloyd
PRO
35
15k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Done Done
chrislema
186
16k
Automating Front-end Workflow
addyosmani
1369
210k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Transcript
@cyokozai 【第05回】Funabashi.dev supported by KIKKAKE CREATION 12.06.2025 in Chiba.Funabashi 年末なので
オンプレ Kubernetes クラスタを アップグレードしよう
井上 裕介 a.k.a cyokozai 千葉工業大学大学院 情報科学研究科 情報工学専攻 修士1年 ❏ ネットワークコンテンツ研究会
Nekko Cloud Team ❏ 株式会社スリーシェイク sreake事業部 学生インターン ❏ CloudNative Days実行委員 グエ^〜研究やばいンゴ...
目次 • Nekko Cloud Gen.1とNKEについて • Kubespray • k8sクラスタのアップグレード •
今後について ちょっとだけ宣伝
Nekko Cloud Gen.1とNKEについて
ネットワークコンテンツ研究会 ボーカロイドのファンメイドライブ活動 マルチリージョンプライベートクラウド開発運用
「メンバーの自宅サーバーを VPN で繋いで プライベートクラウドを作ろう!」というチーム
ネッコ研が誇る逸般の誤家庭たち @logica
ネッコ研が誇る逸般の誤家庭たち 浦和 @logica
ネッコ研が誇る逸般の誤家庭たち 津田沼 @logica
ネッコ研が誇る逸般の誤家庭たち 幕張 @logica
これらの”リージョン”を… 浦和 津田沼 幕張 @logica
VPNで繋げてしまえ! 浦和 津田沼 幕張 @logica
None
None
Nekko Cloud上で運用するk8sクラスタ (開発版) Nekko Cloud Kubernetes Engine (NKE)
学祭のサイトはCICDで外部公開
学祭のサイトはCICDで外部公開
Kubespray
kubespray • Ansibleによるk8sクラスタ自動構築ツール • SSH経由でkubeadmを自動実行してくれる • 自動更新、スケールイン/アウトにも対応
Ansible • インフラの構築作業を自動化するツール • IaCによる冪等性の担保が可能 • 複数同時に同じ内容の処理実行 • YAMLをいっぱい書けるよ🙌
kubeadm • Kubernetesクラスタを構築するツール • シンプルにセキュアにスケーラブルに • 真心込めて手作業で構築できる🖐
kubesprayは何をしているのか? Playbookを元にクラスタを構築 • Node • Control Plane • Worker Node
• etcd • アドオンの追加 • SSH接続の設定 etc….
kubesprayは何をしているのか? • 各ノードへSSH接続
kubesprayは何をしているのか? • 各ノード毎にkubeadmコマンド を実行し、順番にk8sクラスタ を構築していく
kubesprayは何をしているのか? • k8sクラスタへ接続するための クレデンシャルなどを逐次発行
k8sクラスタのアップグレード
実行環境 • ローカル ◦ Macbook Air (arm) ◦ DevContainer •
IaaSクラスタ ◦ Nodes ▪ vm-01 (Ubuntu22.04) ▪ vm-02 (Ubuntu22.04) ▪ vm-03 (Ubuntu22.04)
k8sクラスタはStep by Stepで更新しろ! kube_version: v1.30.4 kube_version: v1.33.5
k8sクラスタはStep by Stepで更新しろ! kube_version: v1.30.4 kube_version: v1.31.4 kube_version: v1.32.5 kube_version:
v1.33.5
変更前の状態 2025.12.05時点 nke-kubespray-inventory $ kubectl get nodes NAME STATUS ROLES
AGE VERSION vm-01 Ready control-plane 386d v1.30.4 vm-02 Ready control-plane 386d v1.30.4 vm-03 Ready control-plane 386d v1.30.4
nke-kubespray-inventory $ kubectl get nodes NAME STATUS ROLES AGE VERSION
vm-01 Ready control-plane 386d v1.30.4 vm-02 Ready control-plane 386d v1.30.4 vm-03 Ready control-plane 386d v1.30.4 変更前の状態 2025.12.05時点 全部コントロールプレーン!? 1年稼働中 EOL….
k8sクラスタは無事か確認 sudo ETCDCTL_API=3 etcdctl \ --endpoints=https://127.0.0.1:2379 \ --cacert=/etc/ssl/etcd/ssl/ca.pem \ --cert=/etc/ssl/etcd/ssl/node-$(hostname).pem
\ --key=/etc/ssl/etcd/ssl/node-$(hostname)-key.pem \ endpoint health --write-out=table
k8sクラスタは一旦無事でした (ほっ....) vm-01 +------------------------+--------+-------------+-------+ | ENDPOINT | HEALTH | TOOK
| ERROR | +------------------------+--------+-------------+-------+ | https://127.0.0.1:2379 | true | 32.384996ms | | +------------------------+--------+-------------+-------+ vm-02 +------------------------+--------+-------------+-------+ | ENDPOINT | HEALTH | TOOK | ERROR | +------------------------+--------+-------------+-------+ | https://127.0.0.1:2379 | true | 13.916231ms | | +------------------------+--------+-------------+-------+ vm-03 +------------------------+--------+-------------+-------+ | ENDPOINT | HEALTH | TOOK | ERROR | +------------------------+--------+-------------+-------+ | https://127.0.0.1:2379 | true | 12.934121ms | | +------------------------+--------+-------------+-------+
kubesprayでk8sを更新する手順 1. 各ノードを一つずつバックアップを取る 2. DevContainerを起動 3. Python3 pipをインストール 4. upgrade-cluster.yamlのk8sバージョン情報を書き換える
5. k8sバージョンに対応するkubesprayリポジトリをクローン 6. pip install → Ansibleなどインストール 7. Ansible Playbookを実行 8. 発行されたadmin.confをKUBECONFIGに設定
簡単でしょ?
バックアップで行う作業 1. drain/cordon 2. etcd スナップショット→ダウンロード 3. 電源OFF 4. スナップショット
5. 電源ON 6. uncordon
バックアップで大事なこと クラスタの各ノードの電源は必ず一つずつ落とすこと → 最悪クラスタが崩壊する 詳しくはetcdと分散合意アルゴリズムRaftをAIに聞いてくれ
DevContainerを起動 • ぶっちゃけ動作環境はVMでもコンテナでもなんでもいい • 聖域 (ローカル環境) を汚さない精神 { "name": "Ubuntu",
// Or use a Dockerfile or Docker Compose file. "image": "mcr.microsoft.com/devcontainers/base:noble"
稼働中のインフラの設定repoをクローン . ├── local │ ├── group_vars -> ../sample/group_vars │
└── hosts.ini ├── nke-cluster │ ├── artifacts │ │ ├── admin.conf │ │ ├── kubectl │ │ └── kubectl.sh │ ├── credentials │ │ └── kubeadm_certificate_key.creds │ ├── group_vars │ │ ├── all │ │ │ ├── all.yml │ │ │ ├── aws.yml │ │ │ ├── azure.yml │ │ │ ├── containerd.yml │ │ │ ├── coreos.yml
Python3インストール • Ansibleの体はPythonでできている • venvを起動してpipを動かす準備 sudo apt-get update sudo apt-get
upgrade -y sudo apt-get install -y python3-pip
現在稼働中のインフラ - inventory.ini (変更なし) [all] node1 ansible_host=10.x.128.x ansible_user=ncadmin ip=10.x.128.x etcd_member_name=etcd1
node2 ansible_host=10.x.128.x ansible_user=ncadmin ip=10.x.128.x etcd_member_name=etcd2 node3 ansible_host=10.x.128.x ansible_user=ncadmin ip=10.x.128.x etcd_member_name=etcd3 [kube_control_plane] node1 node2 node3 [etcd] node1 node2 node3 [kube_node] node1 node2 node3 [calico_rr] [k8s_cluster:children] kube_control_plane kube_node calico_rr
upgrade-cluster.yaml (k8s versionを指定) kube_version: v1.30.4 kube_version: v1.31.4
kubespray repoをクローン pip installでAnsibleなど必要なツールをインストール git clone https://github.com/kubernetes-sigs/kubespray.git cd kubespray git
branch -a git switch remotes/origin/release-2.21 --detach pip install -r requirements.txt
Ansibleを実行してクラスタを更新 ansible-playbook \ -i inventory/test-cluster/inventory.ini \ --private-key inventory/nke-cluster/nke \ --become
\ --become-user=root \ upgrade-cluster.yml
実行完了🙌 PLAY RECAP *************************************************************************************************************************************** vm-01 : ok=937 changed=78 unreachable=0 failed=0
skipped=1587 rescued=0 ignored=1 vm-02 : ok=849 changed=67 unreachable=0 failed=0 skipped=1356 rescued=0 ignored=2 vm-03 : ok=851 changed=67 unreachable=0 failed=0 skipped=1354 rescued=0 ignored=2 Saturday 06 December 2025 00:01:20 +0000 (0:00:00.058) 0:32:14.991 ***** =============================================================================== kubernetes/control-plane : Kubeadm | Upgrade first control plane node ------------------------------------------------------------------- 123.56s kubernetes/control-plane : Kubeadm | Upgrade other control plane nodes ------------------------------------------------------------------ 123.52s kubernetes/control-plane : Kubeadm | Upgrade other control plane nodes ------------------------------------------------------------------ 108.19s network_plugin/cilium : Cilium | Wait for pods to run ------------------------------------------------------------------------------------ 54.03s upgrade/system-upgrade : Reboot after APT Dist-Upgrade ----------------------------------------------------------------------------------- 40.92s upgrade/system-upgrade : Reboot after APT Dist-Upgrade ----------------------------------------------------------------------------------- 40.59s upgrade/system-upgrade : Reboot after APT Dist-Upgrade ----------------------------------------------------------------------------------- 40.15s upgrade/post-upgrade : Wait for cilium --------------------------------------------------------------------------------------------------- 21.52s download : Prep_download | Register docker images info ----------------------------------------------------------------------------------- 20.98s kubernetes/client : Copy kubectl binary to ansible host ---------------------------------------------------------------------------------- 20.61s etcd : Gen_certs | Write etcd member/admin and kube_control_plane client certs to other etcd nodes --------------------------------------- 18.83s kubernetes/control-plane : Kubeadm | Check api is up ------------------------------------------------------------------------------------- 17.70s upgrade/pre-upgrade : Drain node --------------------------------------------------------------------------------------------------------- 17.60s container-engine/containerd : Containerd | Unpack containerd archive --------------------------------------------------------------------- 14.95s kubernetes-apps/argocd : Kubernetes Apps | Install ArgoCD -------------------------------------------------------------------------------- 12.75s container-engine/validate-container-engine : Populate service facts ---------------------------------------------------------------------- 12.67s kubernetes-apps/argocd : Kubernetes Apps | Install ArgoCD -------------------------------------------------------------------------------- 12.53s kubernetes/control-plane : Kubeadm | Check api is up ------------------------------------------------------------------------------------- 11.74s network_plugin/cni : CNI | Copy cni plugins ---------------------------------------------------------------------------------------------- 11.62s network_plugin/cilium : Cilium | Create Cilium node manifests ---------------------------------------------------------------------------- 11.25s
KUBECONFIGを設定 export KUBECONFIG="/Users/yusuke/.kube/hogehoge.conf"
なんか出てる....? nke-kubespray-inventory $ kubectl get nodes NAME STATUS ROLES AGE
VERSION vm-01 Ready,SchedulingDisabled control-plane 386d v1.31.4 vm-02 Ready control-plane 386d v1.31.4 vm-03 Ready control-plane 386d v1.31.4
uncordonを忘れずに nke-kubespray-inventory $ kubectl uncordon vm-01 nke-kubespray-inventory $ kubectl get
nodes NAME STATUS ROLES AGE VERSION vm-01 Ready, control-plane 386d v1.31.4 vm-02 Ready control-plane 386d v1.31.4 vm-03 Ready control-plane 386d v1.31.4 SchedulingDisabled: ノードが cordon 済み (Pod のスケジューリング停止状態)
今後について
1. クレデンシャルと秘密鍵の管理 • GitHubに平文でPushしようとしてChatGPTに怒られた😇 • k8sクラスタは複数人で使う前提 → KVS (Vault) や暗号化で代替
→ NKEの操作専用の共用VM建てる → RBACで利用者ごとにクレデンシャルを発行
2. 顕著な属人化 • 現在Kubernetesを操作可能な人間 …. 4,5人? (実は割と多いんじゃね?) • 管理者の若返りが必要 ◦
後輩が頑張ってDocker/Kubernetes勉強中💪 • ドキュメント整理の必要性 ◦ 知識の共有と認識の共通化
3. Kubernetesクラスタの運用方針 • 検証用のクラスタにWebサイトをデプロイしている → k8sクラスタをどのように開発・運用していくか Dockerで十分なんじゃない?
ちょっとだけ宣伝
None
東京を超える、過去最大のカンファレンス CloudNative Days × Platform Engineering Kaigi × SRE Kaigi
国内最前線の3大カンファレンスが、名古屋に集結。 2026年 5月14日(木)・15日(金) 中日ホール&カンファレンス 来週スポンサー受付開始! CfPは1月予定