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
Sony-DroidKaigi2026
sony
1
320
Kiro Crewしか勝たん!?
miu_crescent
PRO
0
180
JAWS-UG初心者支部#88わいわい初心塾(夏休みの宿題やったかGit編)
otsuki
0
130
AI時代のAPI品質を支えるガードレール / API Guardrails for API quality in the AI era
yokawasa
1
120
コスト最適化の「めんどくさい」を AWS FinOps Agent でチョット楽にする
classmethod_kaz
0
200
Self Healing Rollouts: Automating Production Fixes with Agentic AI
kdubois
0
150
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
460
Azure Cost Management の FOCUS コストデータを迷わず読むための“3つの軸”
tetsuyaooooo
0
140
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
150
IoTハンズオンの舞台裏
shirouz
2
140
Benchmarking Vector Databases: pgvector vs. LanceDB
tsho
0
140
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
510
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
30 Presentation Tips
portentint
PRO
1
390
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
260
New Earth Scene 8
popppiees
3
2.5k
The Spectacular Lies of Maps
axbom
PRO
1
970
Bash Introduction
62gerente
615
220k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
260
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
Amusing Abliteration
ianozsvald
1
290
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
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月予定