diff --git a/cluster/images/etcd/Dockerfile.windows b/cluster/images/etcd/Dockerfile.windows new file mode 100644 index 00000000000..1c35d62d32e --- /dev/null +++ b/cluster/images/etcd/Dockerfile.windows @@ -0,0 +1,28 @@ +# Copyright 2021 The Kubernetes Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ARG RUNNERIMAGE +FROM ${RUNNERIMAGE} + +EXPOSE 2379 2380 4001 7001 + +COPY etcd* etcdctl* /usr/local/bin/ +COPY cp* /usr/local/bin/ +COPY migrate-if-needed.bat /usr/local/bin/ +COPY migrate /usr/local/bin/migrate.exe + +# NOTE(claudiub): docker buildx sets the PATH env variable to a Linux-like PATH, +# # which is not desirable. See: https://github.com/moby/buildkit/issues/1560 +# # TODO(claudiub): remove this once the issue has been resolved. +ENV PATH="C:\usr\local\bin;C:\Windows\system32;C:\Windows;" diff --git a/cluster/images/etcd/README.md b/cluster/images/etcd/README.md index b6d1c0b077b..324a24fa395 100644 --- a/cluster/images/etcd/README.md +++ b/cluster/images/etcd/README.md @@ -22,7 +22,8 @@ but can also be used as the etcd target version. Always run `/usr/local/bin/migrate` (or the `/usr/local/bin/migrate-if-needed.sh` wrapper script) before starting the etcd -server. +server. On Windows, run `C:\bin\migrate.exe` (or the `C:\bin\migrate-if-needed.bat +wrapper script`). `migrate` writes a `version.txt` file to track the "current" version of etcd that was used to persist data to disk. A "target" version may also be provided @@ -49,6 +50,9 @@ For `amd64`, official `etcd` and `etcdctl` binaries are downloaded from Github to maintain official support. For other architectures, `etcd` is cross-compiled from source. Arch-specific `busybox` images serve as base images. +Windows images can be built on Linux nodes due to `docker buildx`, but they will +only be created and pushed when using the `all-push` make target. + #### How to release First, update `ETCD_VERSION` and `REVSION` in the `Makefile`. diff --git a/cluster/images/etcd/cloudbuild.yaml b/cluster/images/etcd/cloudbuild.yaml index e7591555447..2639826db98 100644 --- a/cluster/images/etcd/cloudbuild.yaml +++ b/cluster/images/etcd/cloudbuild.yaml @@ -19,5 +19,7 @@ steps: - '-c' - | gcloud auth configure-docker \ + && docker buildx create --name img-builder --use \ + && docker buildx inspect --bootstrap \ && docker run --rm --privileged linuxkit/binfmt:4ea3b9b0938cbd19834c096aa31ff475cc75d281 \ && make all-push diff --git a/cluster/images/etcd/migrate-if-needed.bat b/cluster/images/etcd/migrate-if-needed.bat new file mode 100755 index 00000000000..a264f82a883 --- /dev/null +++ b/cluster/images/etcd/migrate-if-needed.bat @@ -0,0 +1,21 @@ +@echo off +REM Copyright 2021 The Kubernetes Authors. +REM +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. + +REM DEPRECATED: +REM The functionality has been moved to migrate binary and this script +REM if left for backward compatibility with previous manifests. It will be +REM removed in the future. + +C:\bin\migrate.exe