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
23
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
そりゃあ、BoFぞなもし
yusuke427
0
41
シェーダーもGoで書く! Ebitengineで作る リアルタイムGPUシェーダーエディタ
yusuke427
0
110
若手_学生エンジニアがテックカンファレンスに参加すべき5つの理由.pdf
yusuke427
0
38
10Gb ルータを作るための下準備
yusuke427
0
33
アウトプットの質を高めるために僕はLTをやめた
yusuke427
0
33
さくらのクラウド AppRun と GitHub Actions でお手軽サーバレス構築
yusuke427
2
140
塩漬けになったVM それ、Kubernetesで動かせますよ
yusuke427
2
240
KubeVirt の Live Migration をやってみる | Try KubeVirt's Live Migration on Nekko Cloud
yusuke427
2
740
学生プライベートクラウドはKubeVirt の夢を見るか?
yusuke427
1
200
Other Decks in Technology
See All in Technology
第3回しろおびセキュリティスポンサーセッション
log0417
0
160
Goでデータパイプラインを作ろう
sansantech
PRO
0
360
20260801_スクフェス大阪
kgnkhkr
2
1.2k
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
120
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
Data Hubグループ 紹介資料
sansan33
PRO
0
3.1k
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
650
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
1.6k
[ChatGPT Work LT]事務作業が苦手な人のための バックオフィスの「半」自動化
chimaki_iot
0
250
Redmine 7.0 新機能・機能強化解説(OSC2026京都ダイジェスト版)
vividtone
1
210
GitHub CopilotのFinOps- AI CreditのObservabilityと価値を生むためのエージェント設計
yuriemori
0
140
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
420
Featured
See All Featured
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
400
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
56k
Building AI with AI
inesmontani
PRO
1
1.1k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
620
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
30 Presentation Tips
portentint
PRO
1
360
Six Lessons from altMBA
skipperchong
29
4.4k
Between Models and Reality
mayunak
4
390
Un-Boring Meetings
codingconduct
0
380
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
200
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月予定