Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ Talos 側は **`KubeFlannelCNIConfig` を `$patch: delete` で消して `KubePro
**作業中は何も見せない(2026-09-08 に決めた)。** Cloudflare 側でメンテナンス画面を出す案は、
止まっている数時間のために配線を 1 つ増やすことになるのでやめた。見に来るのは自分だけ。
- [ ] 最終バックアップを取り、`restic check` を通す。
- [ ] Talos を実機にインストール(`talos/README.md` の手順、schematic `32820716…`)。
- [ ] Talos を実機にインストール(`talos/README.md` の手順、schematic `96371c8f…`)。
- [ ] **service の IPv6 CIDR を `fd43::/108` に変える**(Talos は `/64` を受け付けない)。ClusterIP が振り直しになる。
設定は入っていて、VM で出ることも確かめた(2026-09-08。`kube-dns` が `["10.43.0.10","fd43::a"]`)。
当日は「振り直された ClusterIP で困るものが無いか」を見るだけ。
Expand All @@ -38,7 +38,8 @@ Talos 側は **`KubeFlannelCNIConfig` を `$patch: delete` で消して `KubePro
(中身は [apps/k8up/README.md](apps/k8up/README.md)「戻し方」。**順番と、`Succeeded` が
「戻った」の意味ではないこと**が要点。2026-09-08 に実際に流して確認済み)。
- [ ] Infisical → operator → 各アプリの順で疎通確認。DNS(cloudflare-ddns)、netbird、AdGuard の公開リゾルバを確認。
- [ ] **PT3**: 上流 PR が間に合わなければ KubeVirt にパススルーして tuner-agent だけ VM で動かす
- [ ] **PT3**: 上流 PR は v1.15.0-alpha.1 に入った。schematic に `dvb-pt3` を入れ、`earth-pt3` を読ませてある。
実機で `/dev/dvb/adapter*` が出るのを確かめ、tuner-agent に `/dev/dvb` を hostPath で渡す
([docs/decisions.md](docs/decisions.md)「PT3 チューナー」)。

### 用意が済んだもの
Expand Down
10 changes: 8 additions & 2 deletions docs/decisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -646,7 +646,13 @@ Infisical から作って `imagePullSecrets` で参照していた(tamasagashi

実機には Earthsoft PT3(`earth_pt3`、Altera 1172:4c15)が刺さっていて、Talos のカーネルは `CONFIG_DVB_PT3` を
有効にしておらず、公式 extension にも無い。denpa の tuner-agent はこの箱の `/dev/dvb` と B-CAS リーダーに依存している。
**余っている箱は無い**(2026-09-06 本人談)ので、次の 2 本立てで進めている。
**余っている箱は無い**(2026-09-06 本人談)ので、次の 2 本立てで進めていた。

**結論(2026-10-13): 1 が通った。** pkgs#1682 は v1.15.0-alpha.1 に入り、`siderolabs/dvb-pt3` が Image Factory の
公式 extension に出た。本番の schematic を `96371c8f…`(dvb-pt3 + intel-ucode + IOMMU の引数)に作り直し、
Talos を v1.15.0-alpha.1 に上げた(`talos/versions.yaml`)。extension は `earth_pt3` を blacklist して配るので、
`talos/patches/main.yaml` の `machine.kernel.modules` で読ませる。2 の vfio は PT3 をホストのドライバと取り合うので外した。
alpha をノード 1 台の本番に乗せることになるが、1.15.0 の正式版を待つより PT3 を先に取った。

1. **上流に PR 済み(本命)**: [siderolabs/pkgs#1682](https://github.com/siderolabs/pkgs/pull/1682)
(`CONFIG_DVB_PT3=m` の 1 行。依存する tc90522 / qm1d1c0042 / mxl301rf は既に `m`)と
Expand All @@ -656,7 +662,7 @@ Infisical から作って `imagePullSecrets` で参照していた(tamasagashi
extension の `compatibility.talos.version` は `>= v1.15.0` と当て推量。
2. **入らなかった場合の保険: KubeVirt の VM にパススルー。** 実機で確認済み — VT-d 有効(IOMMU グループ 66 個)、
PT3(05:00.0)は**グループ 36 に単独**、B-CAS は USB(Gemalto GemPC Twin 08e6:3437)。Talos のカーネルは
`vfio-pci` / `vfio_iommu_type1` / KVM を持っている(`talos/patches/main.yaml` で `intel_iommu=on` と vfio を指定済み)。
`vfio-pci` / `vfio_iommu_type1` / KVM を持っている(`intel_iommu=on` は schematic に残してある。vfio は 2026-10-13 に `talos/patches/main.yaml` から外したので、この道に戻るなら足し直す)。
tuner-agent だけ VM(Ubuntu)で動かせば Talos 本体は素のまま、アップグレードも Image Factory のままでいける。

自前 extension を `imager` で焼く案は、Image Factory から外れてアップグレードのたびに自前ビルドになるので採らない。
Expand Down
4 changes: 2 additions & 2 deletions docs/migration-day.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,13 @@ sudo systemctl start k3s-backup.service # ホストのぶん
そのまま書けばよい。Windows なら Rufus の **DD イメージモード**。

```shell
curl -LO https://factory.talos.dev/image/32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302/v1.14.0/metal-amd64.iso
curl -LO https://factory.talos.dev/image/96371c8f956f7f5f9d09925bb49fe096c0cad05c5cf5bdb464790982c0b067ca/v1.15.0-alpha.1/metal-amd64.iso
sudo dd if=metal-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync
```

**焼いた ISO の schematic は気にしなくてよい。** ISO が決めるのは maintenance mode の
カーネルだけで、**ディスクに書かれるのは machine config の `--install-image`**
(`factory.talos.dev/installer/32820716…:v1.14.0`。[render.sh](../talos/render.sh))。
(`factory.talos.dev/installer/96371c8f…:v1.15.0-alpha.1`。[render.sh](../talos/render.sh))。
ドリル用の `2d61dd07…` で起動しても、入るのは本番用の schematic。

- [ ] **Secure Boot が Disabled** であること(RBSU は POST 中に F9 →
Expand Down
27 changes: 19 additions & 8 deletions docs/talos.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,29 @@
# Talos Linux — メディア作成と machine config

対象: HP ProLiant DL360 Gen9(UEFI、iLO は 10.0.0.3、Xeon E5-2696 v4、NIC は BCM5719 ×4、ディスクは SAS の SSD 447 GB)。
検証用に Hyper-V でも同じ ISO を使う。2026-09-06 時点の最新は Talos v1.14.0(v1.13.10 も可)。
検証用に Hyper-V でも同じ ISO を使う。VM ブートドリルは 2026-09-06 に v1.14.0 でやった。
いま使う版は [talos/versions.yaml](../talos/versions.yaml) が正(2026-10-13 時点で v1.15.0-alpha.1)。下の URL の版もそれに合わせる。

## 1. Image Factory で ISO を作る

Talos は「素の ISO」ではなく、必要な system extension を焼き込んだ ISO を https://factory.talos.dev で作る。
組み合わせは **schematic** という YAML で表し、その内容のハッシュが schematic ID になる(同じ YAML なら誰が作っても同じ ID)。

この箱に要る extension は intel-ucode だけ(BCM5719 の tg3、bonding、AHCI は Talos のカーネルに入っている)。
この箱に要る extension は intel-ucode と dvb-pt3(BCM5719 の tg3、bonding、AHCI は Talos のカーネルに入っている)。
dvb-pt3 は PT3 チューナーのドライバで、**v1.15.0-alpha.1 から**ある([decisions.md](decisions.md)「PT3 チューナー」)。
PT3 のために本番を alpha に乗せている。
**カーネル引数もここに入れる。** v1.14 では `machine.install` が `UnattendedInstallConfig` と衝突して machine config 側に
書けないため、IOMMU の引数は schematic に持たせる。

```yaml
# schematic.yaml (本番用)
customization:
extraKernelArgs:
- intel_iommu=on # PT3 を KubeVirt に渡すため
- intel_iommu=on # 元は PT3 を KubeVirt に渡すため。dvb-pt3 が入ったいまは要らないが、パススルーの道として残す
- iommu=pt
systemExtensions:
officialExtensions:
- siderolabs/dvb-pt3
- siderolabs/intel-ucode
```

Expand All @@ -28,20 +32,27 @@ curl -X POST --data-binary @schematic.yaml https://factory.talos.dev/schematics
# => {"id":"2d61dd07b20062062ea671b4d01873506103b67c0f7a4c3fb6cf4ee85585dcb8"}
```

実際に発行した ID は 2 つある。
実際に発行した ID は 3 つある。

| 用途 | schematic ID |
| --- | --- |
| **本番**(intel-ucode + IOMMU の引数) | `32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302` |
| **本番**(dvb-pt3 + intel-ucode + IOMMU の引数。2026-10-13 から) | `96371c8f956f7f5f9d09925bb49fe096c0cad05c5cf5bdb464790982c0b067ca` |
| 旧本番(intel-ucode + IOMMU の引数。PT3 なし) | `32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302` |
| 検証用(intel-ucode のみ) | `2d61dd07b20062062ea671b4d01873506103b67c0f7a4c3fb6cf4ee85585dcb8` |

Web UI(factory.talos.dev → Bare-metal Machine → amd64 → version → extensions)でも同じ ID が出る。

| 用途 | URL |
| --- | --- |
| ISO(通常、Secure Boot オフ) | `https://factory.talos.dev/image/32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302/v1.14.0/metal-amd64.iso` |
| ISO(通常、Secure Boot オフ) | `https://factory.talos.dev/image/96371c8f956f7f5f9d09925bb49fe096c0cad05c5cf5bdb464790982c0b067ca/v1.15.0-alpha.1/metal-amd64.iso` |
| ISO(Secure Boot 用、Sidero の鍵で署名。UEFI に鍵登録が要るので今回は使わない) | 同じ URL で `metal-amd64-secureboot.iso` |
| `--install-image` と `talosctl upgrade --image` | `factory.talos.dev/installer/32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302:v1.14.0` |
| `--install-image` と `talosctl upgrade --image` | `factory.talos.dev/installer/96371c8f956f7f5f9d09925bb49fe096c0cad05c5cf5bdb464790982c0b067ca:v1.15.0-alpha.1` |

**プレリリース(alpha / beta)も同じ形の URL で取れる。** 版のところを差し替えるだけ。Web UI では既定で隠れているので、
pre-release を表示するチェックを入れる。2026-10-13 に v1.15.0-alpha.1 が出た当日、
上の本番 schematic で ISO(約 409 MB)と installer が 200 を返すのを確かめた。
ノード 1 台の本番を alpha に乗せるのは荒いが、PT3 のドライバがこの版からしか無いので割り切っている。
1.15.0 の正式版が出たら Renovate の PR で乗り換える。

ISO は約 400 MB。extension を足したくなったら schematic を作り直して ID を差し替え、`talosctl upgrade` で当てる(ISO を焼き直す必要はない)。

Expand Down Expand Up @@ -747,7 +758,7 @@ talosctl read /sys/module/wireguard/version -n 10.0.0.2 -e … # => 1.0.0
ハブなので送ったフレームが相方の NIC にも返ってくるが、それで bond が壊れることは無かった
- **RA も SLIRP のもの**(`fe80::2`、プレフィックス `240f:6d:842b:1::/64` は手で合わせた)。
ISP のルータの RA(MTU オプション、RDNSS、valid/preferred lifetime)は別物
- carrier の**復旧**方向、PT3 の vfio パススルー本体
- carrier の**復旧**方向、PT3 本体(当時は vfio パススルーの予定。いまは dvb-pt3 で `/dev/dvb` が出るか)

## ネットワークまわりの前提

Expand Down
2 changes: 1 addition & 1 deletion talos/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -155,5 +155,5 @@ talosctl -n 10.0.0.2 upgrade --image factory.talos.dev/installer/<schematic>:<
`patches/` のインタフェース名とディスクだけを VM 用に読み替えて QEMU で実際に起動した(2026-09-07〜09)。
確認できたこと(bond0 のフェイルオーバー、静的 IPv6 と `accept_ra: "2"`、カーネル組み込みの wireguard ──
NetBird も同じものを使う ── など)と、VM では原理的に確かめられないこと(実機の NIC 名 `eno1`/`eno2`/`eno4` と
tg3、本物のスイッチ相手の balance-alb、ISP の RA、`/dev/sda`、PT3 の vfio パススルー本体)は
tg3、本物のスイッチ相手の balance-alb、ISP の RA、`/dev/sda`、PT3 本体)は
[../docs/talos.md](../docs/talos.md)「VM ブートドリル」にまとめてある。
2 changes: 1 addition & 1 deletion talos/after-migration/etcd-snapshot.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ spec:
# talosctl だけのイメージ(シェルが無い)なので、取るだけを init に分ける。
# 版は talos/versions.yaml と揃える(クライアントとノードの版は離れすぎないこと)。
- name: snapshot
image: ghcr.io/siderolabs/talosctl:v1.14.2
image: ghcr.io/siderolabs/talosctl:v1.15.0-alpha.1
# ノードは 1 台。Pod からノードの 50000 に直接届く(Talos はファイアウォールを張っていない)
args: [-e, 10.0.0.2, -n, 10.0.0.2, etcd, snapshot, /work/etcd.snapshot]
volumeMounts:
Expand Down
12 changes: 6 additions & 6 deletions talos/patches/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
#
# カーネル引数(intel_iommu=on / iommu=pt)は machine config ではなく Image Factory の schematic に入れている。
# v1.14 では `machine.install` が UnattendedInstallConfig と衝突して書けないため。
# schematic: 32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302
# schematic: 96371c8f956f7f5f9d09925bb49fe096c0cad05c5cf5bdb464790982c0b067ca
# customization.extraKernelArgs: [intel_iommu=on, iommu=pt]
# customization.systemExtensions.officialExtensions: [siderolabs/intel-ucode]
# customization.systemExtensions.officialExtensions: [siderolabs/dvb-pt3, siderolabs/intel-ucode]
---
apiVersion: v1alpha1
kind: UnattendedInstallConfig
Expand All @@ -14,10 +14,10 @@ provisioning:
match: disk.dev_path == "/dev/sda"
wipe: false
---
# PT3 を KubeVirt の VM にパススルーするための vfio(../docs/decisions.md「PT3 チューナー」)。
# 上流の extension が入れば不要になる。
# PT3 のドライバ(../docs/decisions.md「PT3 チューナー」)。dvb-pt3 extension は earth_pt3 を blacklist して
# 配っているので、ここで明示的に読ませる。読めば /dev/dvb/adapter* が出る。
# KubeVirt にパススルーする保険(vfio_pci / vfio_iommu_type1)は、ホストのドライバと PT3 を取り合うので外した。
machine:
kernel:
modules:
- name: vfio_pci
- name: vfio_iommu_type1
- name: earth-pt3
8 changes: 5 additions & 3 deletions talos/versions.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,13 @@ talos:
# リリースされた版はそのまま使える。Factory のレジストリはタグの一覧を返さない (/v2/…/tags/list が 404)
# ので、installer イメージを docker で追う形では Renovate が版を引けなかった (2026-10-07 まで)。
# 手元の talosctl (tools/Dockerfile) と同じ depName なので、同じ PR で上がる。
# PT3 のドライバ(dvb-pt3)が v1.15.0-alpha.1 からしか無いので、2026-10-13 から alpha に乗せている
# (../docs/decisions.md「PT3 チューナー」)。いまの版がプレリリースなので、Renovate は次の alpha / beta も PR にしてくる。
# renovate: datasource=github-releases depName=siderolabs/talos
version: v1.14.2
# 拡張(intel-ucode)とカーネル引数(intel_iommu=on / iommu=pt)を焼き込んだ ID。
version: v1.15.0-alpha.1
# 拡張(dvb-pt3、intel-ucode)とカーネル引数(intel_iommu=on / iommu=pt)を焼き込んだ ID。
# 中身を変えたら Image Factory で作り直して、この値を差し替える。
schematic: 32820716ca2384dc3cefbb672e6be929c67636e93e556d7740c312efb6538302
schematic: 96371c8f956f7f5f9d09925bb49fe096c0cad05c5cf5bdb464790982c0b067ca

kubernetes:
# `gen config` に `--kubernetes-version` で渡すこと。渡さないと Talos の既定
Expand Down
2 changes: 1 addition & 1 deletion tools/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ ARG TARGETARCH
# renovate: datasource=github-releases depName=kubernetes/kubernetes
ARG KUBECTL_VERSION=v1.37.1
# renovate: datasource=github-releases depName=siderolabs/talos
ARG TALOSCTL_VERSION=v1.14.2
ARG TALOSCTL_VERSION=v1.15.0-alpha.1
# renovate: datasource=github-releases depName=helm/helm
ARG HELM_VERSION=v4.3.0
# renovate: datasource=github-releases depName=getsops/sops
Expand Down
Loading