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
31
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.1k
そりゃあ、BoFぞなもし
yusuke427
0
69
シェーダーもGoで書く! Ebitengineで作る リアルタイムGPUシェーダーエディタ
yusuke427
0
120
若手_学生エンジニアがテックカンファレンスに参加すべき5つの理由.pdf
yusuke427
0
49
10Gb ルータを作るための下準備
yusuke427
0
42
アウトプットの質を高めるために僕はLTをやめた
yusuke427
0
40
さくらのクラウド AppRun と GitHub Actions でお手軽サーバレス構築
yusuke427
2
140
塩漬けになったVM それ、Kubernetesで動かせますよ
yusuke427
2
250
KubeVirt の Live Migration をやってみる | Try KubeVirt's Live Migration on Nekko Cloud
yusuke427
2
760
Other Decks in Technology
See All in Technology
『自分で判断できるか』を基準に、プロダクトのハンズオン研修でAI利用の線を引いてみた / Where We Drew the Line on AI in Hands-on Training
honyanya
0
430
AI駆動開発はどこまで来たのか? ファインディの最新実態調査で読み解く現在地 Devin Con Tokyo
akiratom
4
1.9k
MCPを待つな、パスキーを拡げよう(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
350
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.2k
hookで自作する Claude Code の「実況ボード」
shinyasaita
2
230
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
1
880
AI時代のデータ基盤を考える問い
pacocat
0
740
Windows の互換機能 - 古いプログラムはなぜ動作できるのか
murachiakira
PRO
0
120
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
640
EUDIWの枠組みを出発点に民間エコシステムの在り方を考える(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
AI時代の「OAuth認証」にどう物申すか?(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
830
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
450
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
650
Utilizing Notion as your number one productivity tool
mfonobong
4
560
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
690
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
300
The Cult of Friendly URLs
andyhume
79
7k
RailsConf 2023
tenderlove
30
1.5k
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月予定