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
21
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
シェーダーもGoで書く! Ebitengineで作る リアルタイムGPUシェーダーエディタ
yusuke427
0
100
若手_学生エンジニアがテックカンファレンスに参加すべき5つの理由.pdf
yusuke427
0
33
10Gb ルータを作るための下準備
yusuke427
0
28
アウトプットの質を高めるために僕はLTをやめた
yusuke427
0
30
さくらのクラウド AppRun と GitHub Actions でお手軽サーバレス構築
yusuke427
2
130
塩漬けになったVM それ、Kubernetesで動かせますよ
yusuke427
2
240
KubeVirt の Live Migration をやってみる | Try KubeVirt's Live Migration on Nekko Cloud
yusuke427
2
720
学生プライベートクラウドはKubeVirt の夢を見るか?
yusuke427
1
190
SREについて学ぶスリーシェイクのインターン
yusuke427
1
330
Other Decks in Technology
See All in Technology
DatabricksにおけるMCPソリューション
taka_aki
1
270
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.4k
壊して学ぶAWS CDK: そのcdk deployで消えるもの、残るもの
k_adachi_01
1
400
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
3
4.2k
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
320
SRE Next 2026 何でも屋からの脱却
bto
0
940
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
0
190
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
270
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
280
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
320
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
670
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
410
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
Bash Introduction
62gerente
615
220k
Un-Boring Meetings
codingconduct
0
350
The Cost Of JavaScript in 2023
addyosmani
55
10k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
220
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.7k
Color Theory Basics | Prateek | Gurzu
gurzu
0
390
Automating Front-end Workflow
addyosmani
1370
210k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
220
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月予定