diff --git a/ROADMAP.md b/ROADMAP.md index 9110e88..8ff2220 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -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 で困るものが無いか」を見るだけ。 @@ -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 チューナー」)。 ### 用意が済んだもの diff --git a/docs/decisions.md b/docs/decisions.md index ce45bca..7a44e0c 100644 --- a/docs/decisions.md +++ b/docs/decisions.md @@ -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`)と @@ -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 から外れてアップグレードのたびに自前ビルドになるので採らない。 diff --git a/docs/migration-day.md b/docs/migration-day.md index 826f874..ab03b3d 100644 --- a/docs/migration-day.md +++ b/docs/migration-day.md @@ -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 → diff --git a/docs/talos.md b/docs/talos.md index 4520d4f..ffeccb2 100644 --- a/docs/talos.md +++ b/docs/talos.md @@ -1,14 +1,17 @@ # 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 に持たせる。 @@ -16,10 +19,11 @@ Talos は「素の ISO」ではなく、必要な system extension を焼き込 # 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 ``` @@ -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 を焼き直す必要はない)。 @@ -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` が出るか) ## ネットワークまわりの前提 diff --git a/talos/README.md b/talos/README.md index e2a422f..501fee0 100644 --- a/talos/README.md +++ b/talos/README.md @@ -155,5 +155,5 @@ talosctl -n 10.0.0.2 upgrade --image factory.talos.dev/installer/:< `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 ブートドリル」にまとめてある。 diff --git a/talos/after-migration/etcd-snapshot.yaml b/talos/after-migration/etcd-snapshot.yaml index 9fa9dd5..ac23aa5 100644 --- a/talos/after-migration/etcd-snapshot.yaml +++ b/talos/after-migration/etcd-snapshot.yaml @@ -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: diff --git a/talos/patches/main.yaml b/talos/patches/main.yaml index 0c45d24..4c09213 100644 --- a/talos/patches/main.yaml +++ b/talos/patches/main.yaml @@ -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 @@ -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 diff --git a/talos/versions.yaml b/talos/versions.yaml index 0dac97d..e326f67 100644 --- a/talos/versions.yaml +++ b/talos/versions.yaml @@ -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 の既定 diff --git a/tools/Dockerfile b/tools/Dockerfile index d1dd3d4..168de5e 100644 --- a/tools/Dockerfile +++ b/tools/Dockerfile @@ -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