Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

support building node images from release tarballs #381

Closed
BenTheElder opened this issue Mar 13, 2019 · 21 comments
Closed

support building node images from release tarballs #381

BenTheElder opened this issue Mar 13, 2019 · 21 comments
Assignees
Labels
kind/feature Categorizes issue or PR as related to a new feature. lifecycle/frozen Indicates that an issue or PR should not be auto-closed due to staleness. priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release.
Milestone

Comments

@BenTheElder
Copy link
Member

We should implement kind build node-image --type=release-tar /path/to/release.tar and use this for CI testing to dedupe building the binaries etc.

/kind feature
/priority important-soon
/assign

@k8s-ci-robot k8s-ci-robot added kind/feature Categorizes issue or PR as related to a new feature. priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release. labels Mar 13, 2019
@BenTheElder BenTheElder added this to the 0.3 milestone Mar 25, 2019
@BenTheElder BenTheElder modified the milestones: 0.3, 0.4 May 15, 2019
@BenTheElder
Copy link
Member Author

punting to 0.4, but just because 0.3 was loaded down with breaking image change improvements and we need to get those out the door. this is an important feature.

@BenTheElder
Copy link
Member Author

punting to 0.5, 0.4 is focused primarily on networking enhancements / fixes, general bugs / cleanup / minor features, and initial IPv6 support.

@BenTheElder BenTheElder modified the milestones: v0.4.0, v0.5.0 Jun 20, 2019
@BenTheElder BenTheElder modified the milestones: v0.5.0, v0.6.0 Aug 20, 2019
@BenTheElder BenTheElder removed this from the v0.6.0 milestone Oct 15, 2019
@fejta-bot
Copy link

Issues go stale after 90d of inactivity.
Mark the issue as fresh with /remove-lifecycle stale.
Stale issues rot after an additional 30d of inactivity and eventually close.

If this issue is safe to close now please do so with /close.

Send feedback to sig-testing, kubernetes/test-infra and/or fejta.
/lifecycle stale

@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Jan 14, 2020
@BenTheElder BenTheElder removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Feb 6, 2020
@BenTheElder BenTheElder added this to the v0.9.0 milestone Apr 25, 2020
@BenTheElder
Copy link
Member Author

xref: #197
I've been sketching up a revamp of the entire build, intend to ship in v0.9.0

@dims
Copy link
Member

dims commented Jun 30, 2020

cc @jiatongw

@jiatongw
Copy link

jiatongw commented Jun 30, 2020

@BenTheElder What is the target date of v0.9.0?

@BenTheElder
Copy link
Member Author

Sorry I missed this message. After some thought v0.9.0 was moved to match Kubernetes 1.19 (not everything we wanted is ready, but it's getting long in the tooth since 0.8.1), which is scheduled for tomorrow.

I'm sweeping through issues and will try to finish up patches for most things, but this one will probably slip to early in the next version.

Some refactors related to this are done, but it's not complete, and there are a couple bugs that should get fixed first.

@BenTheElder BenTheElder modified the milestones: v0.9.0, v0.10.0 Aug 25, 2020
@rosti
Copy link

rosti commented Dec 14, 2020

/remove-lifecycle stale

@k8s-ci-robot k8s-ci-robot removed the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Dec 14, 2020
@BenTheElder
Copy link
Member Author

@BenTheElder should kind fetch files directly from the release tar? Isn't it more flexible WRT workflow and possible future changes (e.g. somebody decides to use xz instead of gzip, or the paths in the tar file change)?

I think most users are not going to want to even deal with wget and downloading isn't the challenging part.

They'll just want to specify a release or CI version, OR specify their source URL | directory.

Isn't it more flexible WRT workflow and possible future changes (e.g. somebody decides to use xz instead of gzip, or the paths in the tar file change)?

The k8s release may not do this without warning, there are other consumers and the release format is "an API".
I will personally raise another stink if SIG release goes to break this again without following a KEP etc. (think the hash file debacle).


What I've actually wanted to do here is introduce a flexible spec format for control over what goes into a node image.
Unfortunately no features are shipping right now (including feature review) because all our time is going to bug hunting or non-kind related work, otherwise we'd have cut a release already :( (e.g. #1969 is alarming and needs fixing).

@BenTheElder
Copy link
Member Author

aside: as a more immediate measure, I'm sure you could get a lot of kudos from people with arm macs in the coming weeks if you publish an image like this to dockerhub or similar :+))

we're obviously going to need a more permanent solution, but as it stands we've grown a backlog reviewing features due to the bug / support load 😞

I hope to improve that soon, I've just sunk some time into https://kind.sigs.k8s.io/, particularly the contributor / developer docs, and I hope to announce some improvements to how the project is managed soon 😅

@rosti
Copy link

rosti commented Dec 15, 2020

I uploaded 1.18.13, 1.19.5, and 1.20.0 images here.

P.S. Docker on M1 Macs seems to be a long way off, plus I think that it wouldn't be that big deal to recompile Kubernetes from source there as it is for Raspberry Pi 4 (hence this effort).

@BenTheElder BenTheElder modified the milestones: v0.10.0, v0.11.0 Jan 20, 2021
@k8s-ci-robot k8s-ci-robot added the lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. label Apr 20, 2021
@kubernetes-sigs kubernetes-sigs deleted a comment from fejta-bot Apr 20, 2021
@BenTheElder BenTheElder added lifecycle/frozen Indicates that an issue or PR should not be auto-closed due to staleness. and removed lifecycle/stale Denotes an issue or PR has remained open with no activity and has become stale. labels Apr 20, 2021
@BenTheElder BenTheElder removed this from the v0.11.0 milestone Oct 14, 2021
@BenTheElder
Copy link
Member Author

We got pretty far with working cross-builds, upstream is also taking longer than expected to make dockerless + providerless a default reality, and we won't be able to use pre-built tarballs for our releases until then (too much binary bloat added).

Without that, this has slipped. It's still a good idea. I would be happy to see more discussion outlining the UX.

What I have shipped is dropping --type (no more bazel anyhow) and deprecating --kube-root in favor of kind create cluster <kube-root> in preparation for:

Tentatively I think we should make kind build node-image [source-path] with usage like:

  1. kind build node-image / unset
    • default to attempting to auto-detect your local kubernetes source checkout (as today, and the primary use case for kind build node-image / kind currently per project scope doc)
  2. kind build node-image /path/to/k8s.io/kubernetes / kubernetes source-checkout path
    • absolute and relative paths that are directories => build from source (1. but user supplied path, not auto-detected)
  3. kind build node-image /path/to/release-archive.tar / kubernetes release tarball path
    • if the path is a file instead of a directory, check for a release tarball and build from the binaries/images in it
    • possibly instead this needs to be a locally downloaded directory matching the upstream release layout, we can do a form of 2. instead and sniff the path's contents for these directories vs say some well known file like OWNERS in k8s sources
  4. kind build node-image ci/latest / kubernetes versions (from upstream builds).
    • download the named version from upstream builds and build from that.
    • should this have caching? how is the cache invalidated? (probably we can add this later)
  5. kind build node-image https://dl.k8s.io/foo/bar / kubernetes pre-built versions in explicit download bucket path (to be more specific than named versions hosted there)
    • same as 4) but with user supplied base URL / GCS bucket instead of well-known version => identify download location, for custom user uploaded builds or being more explicit.

@aojea
Copy link
Contributor

aojea commented Oct 15, 2021

on hindsight, I don't think kind users will care about the details and we should hide urls or tarballs, just kind build node-image <kubernetes-tag>

@BenTheElder
Copy link
Member Author

BenTheElder commented Oct 15, 2021

on hindsight, I don't think kind users will care about the details and we should hide urls or tarballs, just kind build node-image

two reasons they will off the top of my head:

  1. some people don't have access to GCS (china) / upstream release binary hosting
  2. some people will want to re-use their own k8s builds (think EKS distro)

EDIT: this one is also very easy to support, it's just 4) but skip the indirection of named version <-> download base path

@aojea
Copy link
Contributor

aojea commented Oct 15, 2021

  • some people don't have access to GCS (china) / upstream release binary hosting
  • some people will want to re-use their own k8s builds (think EKS distro)

those are implementation details needed for 4, we can always expose them

@BenTheElder
Copy link
Member Author

Yes, exposing skipping the indirection is 5)

@aojea
Copy link
Contributor

aojea commented Oct 19, 2021

right, my rationale is that power users are able to build images and use them directly using some registry.
My feeling is that most requests we receive in slack are from users that just want to try the latest versions without having to build them.
My suggestion is to implement just 4 for them, and iterate based on that, if there is more demand we can always expose the internals, however, if we start exposing the internals is hard to remove them ... and we are going to expose a much larger area with all the supportability, time, ... consequences

stg-0 pushed a commit to stg-0/kind that referenced this issue Feb 6, 2024
* change Jenkins creds file name

* change Jenkins creds file name
@BenTheElder
Copy link
Member Author

fixed in #3614

@BenTheElder BenTheElder added this to the v0.24.0 milestone May 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/feature Categorizes issue or PR as related to a new feature. lifecycle/frozen Indicates that an issue or PR should not be auto-closed due to staleness. priority/important-soon Must be staffed and worked on either currently, or very soon, ideally in time for the next release.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants