docs(upgrade): 列出安装器对下载物的校验与离线导入 registry 镜像的做法
This commit is contained in:
1 file changed
+28
-1
+28
-1
@@ -724,6 +724,16 @@ control namespace (or `--registry-namespace`):
|
|||||||
its gate runs) cannot be pulled from the registry they make up, so the installer
|
its gate runs) cannot be pulled from the registry they make up, so the installer
|
||||||
labels both `io.cri-containerd.pinned=pinned` in containerd and kubelet's image
|
labels both `io.cri-containerd.pinned=pinned` in containerd and kubelet's image
|
||||||
GC never collects them. Check with `k3s ctr images ls | grep pinned`.
|
GC never collects them. Check with `k3s ctr images ls | grep pinned`.
|
||||||
|
- **The registry image is pinned by digest**
|
||||||
|
(`docker.io/library/registry:2.8.3@sha256:a3d8aaa6…`), and the installer
|
||||||
|
caches it with `k3s crictl pull`. On an air-gapped node, carry it over with
|
||||||
|
containerd's own export, which keeps the digest ref. On a connected machine
|
||||||
|
with k3s or containerd (`R` is the full `docker.io/library/registry@sha256:…`
|
||||||
|
ref from `internal/platform/identities.go`):
|
||||||
|
`ctr images pull --all-platforms $R && ctr images export --all-platforms
|
||||||
|
registry.tar $R`; on the node: `k3s ctr images import --all-platforms
|
||||||
|
registry.tar`, then re-run the installer to pin it. A `docker save` round trip
|
||||||
|
rewrites the manifest, and kubelet will not match it to the digest.
|
||||||
- **Selector quirk worth knowing:** the registry Service selector is only
|
- **Selector quirk worth knowing:** the registry Service selector is only
|
||||||
`name + component=registry` — it deliberately lacks the
|
`name + component=registry` — it deliberately lacks the
|
||||||
`part-of=felis-control-plane` label, so the registry is *invisible* to the
|
`part-of=felis-control-plane` label, so the registry is *invisible* to the
|
||||||
@@ -1290,7 +1300,9 @@ annotated Service endpoints picks them up as is.
|
|||||||
|
|
||||||
There is no in-place updater: an upgrade is re-running the installer
|
There is no in-place updater: an upgrade is re-running the installer
|
||||||
(`curl -fsSL <installer URL> | sudo bash`), which rebuilds/re-imports the image
|
(`curl -fsSL <installer URL> | sudo bash`), which rebuilds/re-imports the image
|
||||||
and re-applies the bundle. (`sudo felis setup` is not this path; on a completed
|
and re-applies the bundle. `felis update --panel` prints that command with the
|
||||||
|
script read at the newest release's tag, so the installer and the binary it
|
||||||
|
downloads come from the same release. (`sudo felis setup` is not this path; on a completed
|
||||||
install it only opens the config console.) The channel is not persisted across
|
install it only opens the config console.) The channel is not persisted across
|
||||||
the re-run, so pass `FELIS_VERSION_BOOTSTRAP=dev` on a host that tracks main.
|
the re-run, so pass `FELIS_VERSION_BOOTSTRAP=dev` on a host that tracks main.
|
||||||
Two properties of the control plane matter when you do:
|
Two properties of the control plane matter when you do:
|
||||||
@@ -1303,6 +1315,21 @@ Two properties of the control plane matter when you do:
|
|||||||
wait fails after 180s and prints `kubectl describe` diagnostics: you see
|
wait fails after 180s and prints `kubectl describe` diagnostics: you see
|
||||||
`ErrImagePull`/`ImagePullBackOff` there instead of a silent hang.
|
`ErrImagePull`/`ImagePullBackOff` there instead of a silent hang.
|
||||||
|
|
||||||
|
**What the installer checks before it runs anything it downloaded:**
|
||||||
|
|
||||||
|
| Download | Check |
|
||||||
|
|---|---|
|
||||||
|
| `felis-linux-<arch>` (release channel) | its sha256 must match the release's `SHA256SUMS`; a release without one, or a mismatch, is compiled from the same tag instead |
|
||||||
|
| k3s (fresh install only) | the install script is read at `FELIS_K3S_VERSION`'s tag (default `v1.36.4+k3s1`), and it checks the binary against that release's sha256 list |
|
||||||
|
| cloudflared (when absent) | release `FELIS_CLOUDFLARED_VERSION` (default `2026.9.1`) against a pinned sha256; another version needs `FELIS_CLOUDFLARED_SHA256` |
|
||||||
|
| Go toolchain (nano, source builds) | pinned sha256 per architecture; another version needs `FELIS_GO_SHA256` |
|
||||||
|
| the registry image | pinned by digest (`registry:2.8.3@sha256:a3d8…`) |
|
||||||
|
|
||||||
|
On a public repository each release also carries a signed build-provenance
|
||||||
|
attestation. Check a downloaded binary with
|
||||||
|
`gh attestation verify felis-linux-amd64 --repo FelisMC/Felis`; it names the
|
||||||
|
workflow run and commit that built it.
|
||||||
|
|
||||||
Roll back with:
|
Roll back with:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
Reference in new issue
Block a user