mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 05:57:25 +00:00
Merge pull request #76838 from claudiubelu/test-images/windows-support
test images: Adds Windows Container images support (part 1)
This commit is contained in:
commit
a5048219ee
@ -13,6 +13,7 @@ filegroup(
|
|||||||
":package-srcs",
|
":package-srcs",
|
||||||
"//test/images/agnhost:all-srcs",
|
"//test/images/agnhost:all-srcs",
|
||||||
"//test/images/apparmor-loader:all-srcs",
|
"//test/images/apparmor-loader:all-srcs",
|
||||||
|
"//test/images/busybox:all-srcs",
|
||||||
"//test/images/echoserver:all-srcs",
|
"//test/images/echoserver:all-srcs",
|
||||||
"//test/images/metadata-concealment:all-srcs",
|
"//test/images/metadata-concealment:all-srcs",
|
||||||
"//test/images/nonewprivs:all-srcs",
|
"//test/images/nonewprivs:all-srcs",
|
||||||
|
@ -18,6 +18,75 @@ is recommended in order to avoid certain issues.
|
|||||||
The node must be able to push the images to the desired container registry, make sure you are
|
The node must be able to push the images to the desired container registry, make sure you are
|
||||||
authenticated with the registry you're pushing to.
|
authenticated with the registry you're pushing to.
|
||||||
|
|
||||||
|
Windows Container images are not built by default, since they cannot be built on Linux. For
|
||||||
|
that, a Windows node with Docker installed and configured for remote management is required.
|
||||||
|
|
||||||
|
|
||||||
|
### Windows node(s) setup
|
||||||
|
|
||||||
|
In order to build the Windows container images, a node with Windows 10 or Windows Server 2019
|
||||||
|
with the latest updates installed is required. The node will have to have Docker installed,
|
||||||
|
preferably version 18.06.0 or newer.
|
||||||
|
|
||||||
|
Keep in mind that the Windows node might not be able to build container images for newer OS versions
|
||||||
|
than itself (even with `--isolation=hyperv`), so keeping the node up to date and / or upgrading it
|
||||||
|
to the latest Windows Server edition is ideal.
|
||||||
|
|
||||||
|
Windows test images must be built for Windows Server 2019 (1809) and Windows Server 1903, thus,
|
||||||
|
if the node does not have Hyper-V enabled, or it is not supported, multiple Windows nodes are required,
|
||||||
|
one per OS version.
|
||||||
|
|
||||||
|
Additionally, remote management must be configured for the node's Docker daemon. Exposing the
|
||||||
|
Docker daemon without requiring any authentication is not recommended, and thus, it must be
|
||||||
|
configured with TLS to ensure that only authorised people can interact with it. For this, the
|
||||||
|
following `powershell` script can be executed:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
mkdir .docker
|
||||||
|
docker run --isolation=hyperv --user=ContainerAdministrator --rm `
|
||||||
|
-e SERVER_NAME=$(hostname) `
|
||||||
|
-e IP_ADDRESSES=127.0.0.1,YOUR_WINDOWS_BUILD_NODE_IP `
|
||||||
|
-v "c:\programdata\docker:c:\programdata\docker" `
|
||||||
|
-v "$env:USERPROFILE\.docker:c:\users\containeradministrator\.docker" stefanscherer/dockertls-windows:2.5.5
|
||||||
|
# restart the Docker daemon.
|
||||||
|
Restart-Service docker
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information about the above commands, you can check [here](https://hub.docker.com/r/stefanscherer/dockertls-windows/).
|
||||||
|
|
||||||
|
A firewall rule to allow connections to the Docker daemon is necessary:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
New-NetFirewallRule -DisplayName 'Docker SSL Inbound' -Profile @('Domain', 'Public', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2376
|
||||||
|
```
|
||||||
|
|
||||||
|
If your Windows build node is hosted by a cloud provider, make sure the port `2376` is open for the node.
|
||||||
|
For example, in Azure, this is done by running the following command:
|
||||||
|
|
||||||
|
```console
|
||||||
|
az vm open-port -g GROUP-NAME -n NODE-NAME --port 2376
|
||||||
|
```
|
||||||
|
|
||||||
|
The `ca.pem`, `cert.pem`, and `key.pem` files that can be found in `$env:USERPROFILE\.docker`
|
||||||
|
will have to copied to the `~/.docker-${os_version)/` on the Linux build node, where `${os_version}`
|
||||||
|
is `1809` or `1903`.
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
scp.exe -r $env:USERPROFILE\.docker ubuntu@YOUR_LINUX_BUILD_NODE:/home/ubuntu/.docker-$os_version
|
||||||
|
```
|
||||||
|
|
||||||
|
After all this, the Linux build node should be able to connect to the Windows build node:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker --tlsverify --tlscacert ~/.docker-${os_version}/ca.pem --tlscert ~/.docker-${os_version}/cert.pem --tlskey ~/.docker-${os_version}/key.pem -H "$REMOTE_DOCKER_URL" version
|
||||||
|
```
|
||||||
|
|
||||||
|
For more information and troubleshooting about enabling Docker remote management, see
|
||||||
|
[here](https://docs.microsoft.com/en-us/virtualization/windowscontainers/management/manage_remotehost)
|
||||||
|
|
||||||
|
Finally, the node must be able to push the images to the desired container registry, make sure you are
|
||||||
|
authenticated with the registry you're pushing to.
|
||||||
|
|
||||||
|
|
||||||
## Making changes to images
|
## Making changes to images
|
||||||
|
|
||||||
@ -63,6 +132,9 @@ For this, you will need the image manifest list's digest, which can be obtained
|
|||||||
manifest-tool inspect --raw gcr.io/k8s-staging-e2e-test-images/${IMAGE_NAME}:${VERSION} | jq '.[0].Digest'
|
manifest-tool inspect --raw gcr.io/k8s-staging-e2e-test-images/${IMAGE_NAME}:${VERSION} | jq '.[0].Digest'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The images are built through `make`. Since some images (e.g.: `busybox`) are used as a base for
|
||||||
|
other images, it is recommended to build them first, if needed.
|
||||||
|
|
||||||
|
|
||||||
## Building images
|
## Building images
|
||||||
|
|
||||||
@ -88,6 +160,14 @@ registry. That can changed by running this command instead:
|
|||||||
REGISTRY=foo_registry make all-push WHAT=agnhost
|
REGISTRY=foo_registry make all-push WHAT=agnhost
|
||||||
```
|
```
|
||||||
|
|
||||||
|
In order to also include Windows Container images into the final manifest lists, the `REMOTE_DOCKER_URL` argument
|
||||||
|
in the form `tcp://[host]:[port][path]` (for more details, see [here]([https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-socket-option]/))
|
||||||
|
will also have to be specified:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
REMOTE_DOCKER_URL_1909=remote_docker_url_1909 REMOTE_DOCKER_URL_1903=remote_docker_url_1903 REMOTE_DOCKER_URL_1809=remote_docker_url_1809 REGISTRY=foo_registry make all-push WHAT=test-webserver
|
||||||
|
```
|
||||||
|
|
||||||
*NOTE* (for test `gcr.io` image publishers): Some tests (e.g.: `should serve a basic image on each replica with a private image`)
|
*NOTE* (for test `gcr.io` image publishers): Some tests (e.g.: `should serve a basic image on each replica with a private image`)
|
||||||
require the `agnhost` image to be published in an authenticated repo as well:
|
require the `agnhost` image to be published in an authenticated repo as well:
|
||||||
|
|
||||||
@ -135,3 +215,15 @@ After all the above has been done, run the desired tests.
|
|||||||
```bash
|
```bash
|
||||||
sudo chmod o+x /etc/docker
|
sudo chmod o+x /etc/docker
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`nc` is being used by some E2E tests, which is why we are including a Linux-like `nc.exe` into the Windows `busybox` image. The image could fail to build during that step with an error that looks like this:
|
||||||
|
|
||||||
|
```console
|
||||||
|
re-exec error: exit status 1: output: time="..." level=error msg="hcsshim::ImportLayer failed in Win32: The system cannot find the path specified. (0x3) path=\\\\?\\C:\\ProgramData\\...
|
||||||
|
```
|
||||||
|
|
||||||
|
The issue is caused by the Windows Defender which is removing the `nc.exe` binary from the filesystem. For more details on this issue, see [here](https://github.com/diegocr/netcat/issues/6). To fix this, you can simply run the following powershell command to temporarily disable Windows Defender:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
Set-MpPreference -DisableRealtimeMonitoring $true
|
||||||
|
```
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
amd64=alpine:3.6
|
linux/amd64=alpine:3.6
|
||||||
arm=arm32v6/alpine:3.6
|
linux/arm=arm32v6/alpine:3.6
|
||||||
arm64=arm64v8/alpine:3.6
|
linux/arm64=arm64v8/alpine:3.6
|
||||||
ppc64le=ppc64le/alpine:3.6
|
linux/ppc64le=ppc64le/alpine:3.6
|
||||||
s390x=s390x/alpine:3.6
|
linux/s390x=s390x/alpine:3.6
|
||||||
|
windows/amd64/1809=REGISTRY/busybox:1.29-windows-amd64-1809
|
||||||
|
windows/amd64/1903=REGISTRY/busybox:1.29-windows-amd64-1903
|
||||||
|
windows/amd64/1909=REGISTRY/busybox:1.29-windows-amd64-1909
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
64
test/images/agnhost/Dockerfile_windows
Normal file
64
test/images/agnhost/Dockerfile_windows
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
# Copyright 2020 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 BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
|
# from dnsutils image
|
||||||
|
# install necessary packages:
|
||||||
|
# - bind-tools: contains dig, which can used in DNS tests.
|
||||||
|
# - CoreDNS: used in some DNS tests.
|
||||||
|
# from hostexec image
|
||||||
|
# installed necessary packages:
|
||||||
|
# - curl, nc: used by a lot of e2e tests (inherited from BASEIMAGE)
|
||||||
|
# from iperf image
|
||||||
|
# install necessary packages: iperf
|
||||||
|
ENV chocolateyUseWindowsCompression false
|
||||||
|
RUN powershell -Command "\
|
||||||
|
iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')); \
|
||||||
|
choco feature disable --name showDownloadProgress; \
|
||||||
|
choco install bind-toolsonly --version 9.10.3 -y
|
||||||
|
RUN powershell -Command "\
|
||||||
|
wget -uri 'https://github.com/coredns/coredns/releases/download/v1.5.0/coredns_1.5.0_windows_amd64.tgz' -OutFile C:\coredns.tgz;\
|
||||||
|
tar -xzvf C:\coredns.tgz;\
|
||||||
|
Remove-Item C:\coredns.tgz"
|
||||||
|
|
||||||
|
RUN powershell -Command "\
|
||||||
|
wget -uri 'https://iperf.fr/download/windows/iperf-2.0.9-win64.zip' -OutFile C:\iperf.zip;\
|
||||||
|
Expand-Archive -Path C:\iperf.zip -DestinationPath C:\ -Force;\
|
||||||
|
Rename-Item C:\iperf-2.0.9-win64 C:\iperf;\
|
||||||
|
Remove-Item C:\iperf.zip"
|
||||||
|
|
||||||
|
# PORT 80 needed by: test-webserver
|
||||||
|
# PORT 8080 needed by: netexec, nettest
|
||||||
|
# PORT 8081 needed by: netexec
|
||||||
|
# PORT 9376 needed by: serve-hostname
|
||||||
|
EXPOSE 80 8080 8081 9376
|
||||||
|
|
||||||
|
# from netexec
|
||||||
|
RUN mkdir C:\uploads
|
||||||
|
|
||||||
|
# from porter
|
||||||
|
ADD porter/localhost.crt localhost.crt
|
||||||
|
ADD porter/localhost.key localhost.key
|
||||||
|
|
||||||
|
ADD agnhost agnhost
|
||||||
|
|
||||||
|
# needed for the entrypoint-tester related tests. Some of the entrypoint-tester related tests
|
||||||
|
# overrides this image's entrypoint with agnhost-2 binary, and will verify that the correct
|
||||||
|
# entrypoint is used by the containers.
|
||||||
|
RUN mklink agnhost-2 agnhost
|
||||||
|
|
||||||
|
ENTRYPOINT ["/agnhost"]
|
||||||
|
CMD ["pause"]
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS=agnhost
|
SRCS=agnhost
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -40,7 +40,7 @@ For example, let's consider the following `pod.yaml` file:
|
|||||||
containers:
|
containers:
|
||||||
- args:
|
- args:
|
||||||
- dns-suffix
|
- dns-suffix
|
||||||
image: us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10
|
image: us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11
|
||||||
name: agnhost
|
name: agnhost
|
||||||
dnsConfig:
|
dnsConfig:
|
||||||
nameservers:
|
nameservers:
|
||||||
@ -207,7 +207,7 @@ Usage:
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
guestbook="test/e2e/testing-manifests/guestbook"
|
guestbook="test/e2e/testing-manifests/guestbook"
|
||||||
sed_expr="s|{{.AgnhostImage}}|us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10|"
|
sed_expr="s|{{.AgnhostImage}}|us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11|"
|
||||||
|
|
||||||
# create the services.
|
# create the services.
|
||||||
kubectl create -f ${guestbook}/frontend-service.yaml
|
kubectl create -f ${guestbook}/frontend-service.yaml
|
||||||
@ -290,14 +290,14 @@ Examples:
|
|||||||
|
|
||||||
```console
|
```console
|
||||||
docker run -i \
|
docker run -i \
|
||||||
us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10 \
|
us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11 \
|
||||||
logs-generator --log-lines-total 10 --run-duration 1s
|
logs-generator --log-lines-total 10 --run-duration 1s
|
||||||
```
|
```
|
||||||
|
|
||||||
```console
|
```console
|
||||||
kubectl run logs-generator \
|
kubectl run logs-generator \
|
||||||
--generator=run-pod/v1 \
|
--generator=run-pod/v1 \
|
||||||
--image=us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10 \
|
--image=us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11 \
|
||||||
--restart=Never \
|
--restart=Never \
|
||||||
-- logs-generator -t 10 -d 1s
|
-- logs-generator -t 10 -d 1s
|
||||||
```
|
```
|
||||||
@ -455,7 +455,7 @@ Usage:
|
|||||||
```console
|
```console
|
||||||
kubectl run test-agnhost \
|
kubectl run test-agnhost \
|
||||||
--generator=run-pod/v1 \
|
--generator=run-pod/v1 \
|
||||||
--image=us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10 \
|
--image=us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11 \
|
||||||
--restart=Never \
|
--restart=Never \
|
||||||
--env "POD_IP=<POD_IP>" \
|
--env "POD_IP=<POD_IP>" \
|
||||||
--env "NODE_IP=<NODE_IP>" \
|
--env "NODE_IP=<NODE_IP>" \
|
||||||
@ -510,7 +510,7 @@ Usage:
|
|||||||
```console
|
```console
|
||||||
kubectl run test-agnhost \
|
kubectl run test-agnhost \
|
||||||
--generator=run-pod/v1 \
|
--generator=run-pod/v1 \
|
||||||
--image=us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10 \
|
--image=us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11 \
|
||||||
--restart=Never \
|
--restart=Never \
|
||||||
--env "BIND_ADDRESS=localhost" \
|
--env "BIND_ADDRESS=localhost" \
|
||||||
--env "BIND_PORT=8080" \
|
--env "BIND_PORT=8080" \
|
||||||
@ -626,11 +626,18 @@ Usage:
|
|||||||
|
|
||||||
## Other tools
|
## Other tools
|
||||||
|
|
||||||
The image contains `iperf`, `curl`, `dns-tools` (including `dig`), CoreDNS.
|
The image contains `iperf`, `curl`, `dns-tools` (including `dig`), CoreDNS, for both Windows and Linux.
|
||||||
|
|
||||||
|
For Windows, the image is based on `busybox`, meaning that most of the Linux common tools are also
|
||||||
|
available on it, making it possible to run most Linux commands in the `agnhost` Windows container
|
||||||
|
as well. Keep in mind that there might still be some differences though (e.g.: `wget` does not
|
||||||
|
have the `-T` argument on Windows).
|
||||||
|
|
||||||
|
The Windows `agnhost` image includes a `nc` binary that is 100% compliant with its Linux equivalent.
|
||||||
|
|
||||||
|
|
||||||
## Image
|
## Image
|
||||||
|
|
||||||
The image can be found at `us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10` for Linux
|
The image can be found at `us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11` for both Linux and
|
||||||
containers, and `e2eteam/agnhost:2.10` for Windows containers. In the future, the same
|
Windows containers (based on `mcr.microsoft.com/windows/servercore:ltsc2019`,
|
||||||
repository can be used for both OSes.
|
`mcr.microsoft.com/windows/servercore:1903`, and `mcr.microsoft.com/windows/servercore:1909`).
|
||||||
|
@ -1 +1 @@
|
|||||||
2.10
|
2.11
|
||||||
|
@ -48,7 +48,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
rootCmd := &cobra.Command{Use: "app", Version: "2.10"}
|
rootCmd := &cobra.Command{Use: "app", Version: "2.11"}
|
||||||
|
|
||||||
rootCmd.AddCommand(auditproxy.CmdAuditProxy)
|
rootCmd.AddCommand(auditproxy.CmdAuditProxy)
|
||||||
rootCmd.AddCommand(connect.CmdConnect)
|
rootCmd.AddCommand(connect.CmdConnect)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
amd64=alpine:3.8
|
linux/amd64=alpine:3.8
|
||||||
arm=arm32v6/alpine:3.8
|
linux/arm=arm32v6/alpine:3.8
|
||||||
arm64=arm64v8/alpine:3.8
|
linux/arm64=arm64v8/alpine:3.8
|
||||||
ppc64le=ppc64le/alpine:3.8
|
linux/ppc64le=ppc64le/alpine:3.8
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS=loader
|
SRCS=loader
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
3
test/images/busybox/BASEIMAGE
Normal file
3
test/images/busybox/BASEIMAGE
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
windows/amd64/1809=mcr.microsoft.com/windows/servercore:ltsc2019
|
||||||
|
windows/amd64/1903=mcr.microsoft.com/windows/servercore:1903
|
||||||
|
windows/amd64/1909=mcr.microsoft.com/windows/servercore:1909
|
31
test/images/busybox/BUILD
Normal file
31
test/images/busybox/BUILD
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_binary",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_binary(
|
||||||
|
name = "hostname",
|
||||||
|
embed = [":go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["hostname.go"],
|
||||||
|
importpath = "k8s.io/kubernetes/test/images/busybox",
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
34
test/images/busybox/Dockerfile_windows
Normal file
34
test/images/busybox/Dockerfile_windows
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Copyright 2020 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 BASEIMAGE
|
||||||
|
from $BASEIMAGE as prep
|
||||||
|
|
||||||
|
ENV CURL_VERSION 7.57.0
|
||||||
|
WORKDIR /curl
|
||||||
|
ADD https://skanthak.homepage.t-online.de/download/curl-$CURL_VERSION.cab curl.cab
|
||||||
|
RUN expand /R curl.cab /F:* .
|
||||||
|
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
|
COPY --from=prep /curl/AMD64 /curl
|
||||||
|
COPY --from=prep /curl/CURL.LIC /curl
|
||||||
|
ADD https://github.com/kubernetes-sigs/windows-testing/raw/master/images/busybox/busybox.exe /bin/busybox.exe
|
||||||
|
ADD https://github.com/diegocr/netcat/raw/master/nc.exe /bin/nc.exe
|
||||||
|
ADD hostname /bin/hostname.exe
|
||||||
|
USER ContainerAdministrator
|
||||||
|
RUN FOR /f "tokens=*" %i IN ('C:\bin\busybox --list') DO mklink C:\bin\%i.exe C:\bin\busybox.exe
|
||||||
|
RUN setx /M PATH "C:\bin;C:\curl\;%PATH%" &\
|
||||||
|
mkdir C:\tmp
|
||||||
|
ENTRYPOINT ["cmd.exe", "/s", "/c"]
|
27
test/images/busybox/Makefile
Normal file
27
test/images/busybox/Makefile
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Copyright 2020 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.
|
||||||
|
|
||||||
|
SRCS=hostname
|
||||||
|
OS ?= linux
|
||||||
|
ARCH ?= amd64
|
||||||
|
TARGET ?= $(CURDIR)
|
||||||
|
GOARM = 7
|
||||||
|
GOLANG_VERSION ?= latest
|
||||||
|
SRC_DIR = $(notdir $(shell pwd))
|
||||||
|
export
|
||||||
|
|
||||||
|
bin:
|
||||||
|
../image-util.sh bin $(SRCS)
|
||||||
|
|
||||||
|
.PHONY: bin
|
1
test/images/busybox/VERSION
Normal file
1
test/images/busybox/VERSION
Normal file
@ -0,0 +1 @@
|
|||||||
|
1.29
|
50
test/images/busybox/hostname.go
Normal file
50
test/images/busybox/hostname.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2020 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func getOutboundIP() net.IP {
|
||||||
|
conn, err := net.Dial("udp", "8.8.8.8:80")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
defer conn.Close()
|
||||||
|
localAddr := conn.LocalAddr().(*net.UDPAddr)
|
||||||
|
return localAddr.IP
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
flagIP := flag.Bool("i", false, "a string")
|
||||||
|
flag.Parse()
|
||||||
|
if *flagIP {
|
||||||
|
ip := getOutboundIP()
|
||||||
|
fmt.Print(ip.String())
|
||||||
|
} else {
|
||||||
|
hostname, err := os.Hostname()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
fmt.Print(hostname)
|
||||||
|
}
|
||||||
|
}
|
@ -17,6 +17,9 @@ steps:
|
|||||||
- BASE_REF=$_PULL_BASE_REF
|
- BASE_REF=$_PULL_BASE_REF
|
||||||
- WHAT=$_WHAT
|
- WHAT=$_WHAT
|
||||||
- REGISTRY=gcr.io/k8s-staging-e2e-test-images
|
- REGISTRY=gcr.io/k8s-staging-e2e-test-images
|
||||||
|
- REMOTE_DOCKER_URL_1809=tcp://img-promoter-1809.eastus.cloudapp.azure.com:2376
|
||||||
|
- REMOTE_DOCKER_URL_1903=tcp://img-promoter-1903.eastus.cloudapp.azure.com:2376
|
||||||
|
- REMOTE_DOCKER_URL_1909=tcp://img-promoter-1909.eastus.cloudapp.azure.com:2376
|
||||||
args:
|
args:
|
||||||
- all-push
|
- all-push
|
||||||
substitutions:
|
substitutions:
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
amd64=nvidia/cuda:10.0-devel-ubuntu18.04
|
linux/amd64=nvidia/cuda:10.0-devel-ubuntu18.04
|
||||||
ppc64le=nvidia/cuda-ppc64le:10.0-devel-ubuntu18.04
|
linux/ppc64le=nvidia/cuda-ppc64le:10.0-devel-ubuntu18.04
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
2.0
|
2.1
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=nginx:1.15-alpine
|
linux/amd64=nginx:1.15-alpine
|
||||||
arm=arm32v6/nginx:1.15-alpine
|
linux/arm=arm32v6/nginx:1.15-alpine
|
||||||
arm64=arm64v8/nginx:1.15-alpine
|
linux/arm64=arm64v8/nginx:1.15-alpine
|
||||||
ppc64le=ppc64le/nginx:1.15-alpine
|
linux/ppc64le=ppc64le/nginx:1.15-alpine
|
||||||
s390x=s390x/nginx:1.15-alpine
|
linux/s390x=s390x/nginx:1.15-alpine
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
2.2
|
2.3
|
||||||
|
@ -29,15 +29,15 @@ source "${KUBE_ROOT}/hack/lib/util.sh"
|
|||||||
declare -A QEMUARCHS=( ["amd64"]="x86_64" ["arm"]="arm" ["arm64"]="aarch64" ["ppc64le"]="ppc64le" ["s390x"]="s390x" )
|
declare -A QEMUARCHS=( ["amd64"]="x86_64" ["arm"]="arm" ["arm64"]="aarch64" ["ppc64le"]="ppc64le" ["s390x"]="s390x" )
|
||||||
|
|
||||||
# Returns list of all supported architectures from BASEIMAGE file
|
# Returns list of all supported architectures from BASEIMAGE file
|
||||||
listArchs() {
|
listOsArchs() {
|
||||||
image=$1
|
image=$1
|
||||||
cut -d "=" -f 1 "${image}"/BASEIMAGE
|
cut -d "=" -f 1 "${image}"/BASEIMAGE
|
||||||
}
|
}
|
||||||
|
|
||||||
# Returns baseimage need to used in Dockerfile for any given architecture
|
# Returns baseimage need to used in Dockerfile for any given architecture
|
||||||
getBaseImage() {
|
getBaseImage() {
|
||||||
arch=$1
|
os_arch=$1
|
||||||
grep "${arch}=" BASEIMAGE | cut -d= -f2
|
grep "${os_arch}=" BASEIMAGE | cut -d= -f2
|
||||||
}
|
}
|
||||||
|
|
||||||
# This function will build test image for all the architectures
|
# This function will build test image for all the architectures
|
||||||
@ -47,15 +47,36 @@ getBaseImage() {
|
|||||||
build() {
|
build() {
|
||||||
image=$1
|
image=$1
|
||||||
if [[ -f ${image}/BASEIMAGE ]]; then
|
if [[ -f ${image}/BASEIMAGE ]]; then
|
||||||
archs=$(listArchs "$image")
|
os_archs=$(listOsArchs "$image")
|
||||||
else
|
else
|
||||||
archs=${!QEMUARCHS[*]}
|
# prepend linux/ to the QEMUARCHS items.
|
||||||
|
os_archs=$(printf 'linux/%s\n' "${!QEMUARCHS[*]}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
kube::util::ensure-gnu-sed
|
kube::util::ensure-gnu-sed
|
||||||
|
|
||||||
for arch in ${archs}; do
|
for os_arch in ${os_archs}; do
|
||||||
echo "Building image for ${image} ARCH: ${arch}..."
|
if [[ $os_arch =~ .*/.*/.* ]]; then
|
||||||
|
# for Windows, we have to support both LTS and SAC channels, so we're building multiple Windows images.
|
||||||
|
# the format for this case is: OS/ARCH/OS_VERSION.
|
||||||
|
os_name=$(echo "$os_arch" | cut -d "/" -f 1)
|
||||||
|
arch=$(echo "$os_arch" | cut -d "/" -f 2)
|
||||||
|
os_version=$(echo "$os_arch" | cut -d "/" -f 3)
|
||||||
|
|
||||||
|
# currently, GCE does not have Hyper-V support, which means that the same node cannot be used to build
|
||||||
|
# multiple versions of Windows images. Which is why we have $REMOTE_DOCKER_URL_$os_version URLs configured.
|
||||||
|
# TODO(claudiub): once Hyper-V support has been added to GCE, revert this to just $REMOTE_DOCKER_URL.
|
||||||
|
remote_docker_url_name="REMOTE_DOCKER_URL_$os_version"
|
||||||
|
REMOTE_DOCKER_URL=$(eval echo "\${${remote_docker_url_name}:-}")
|
||||||
|
elif [[ $os_arch =~ .*/.* ]]; then
|
||||||
|
os_name=$(echo "$os_arch" | cut -d "/" -f 1)
|
||||||
|
arch=$(echo "$os_arch" | cut -d "/" -f 2)
|
||||||
|
else
|
||||||
|
echo "The BASEIMAGE file for the ${image} image is not properly formatted. Expected entries to start with 'os/arch', found '${os_arch}' instead."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building image for ${image} OS/ARCH: ${os_arch}..."
|
||||||
|
|
||||||
# Create a temporary directory for every architecture and copy the image content
|
# Create a temporary directory for every architecture and copy the image content
|
||||||
# and build the image from temporary directory
|
# and build the image from temporary directory
|
||||||
@ -67,16 +88,24 @@ build() {
|
|||||||
if [[ -f ${image}/Makefile ]]; then
|
if [[ -f ${image}/Makefile ]]; then
|
||||||
# make bin will take care of all the prerequisites needed
|
# make bin will take care of all the prerequisites needed
|
||||||
# for building the docker image
|
# for building the docker image
|
||||||
make -C "${image}" bin ARCH="${arch}" TARGET="${temp_dir}"
|
make -C "${image}" bin OS="${os_name}" ARCH="${arch}" TARGET="${temp_dir}"
|
||||||
fi
|
fi
|
||||||
pushd "${temp_dir}"
|
pushd "${temp_dir}"
|
||||||
# image tag
|
# image tag
|
||||||
TAG=$(<VERSION)
|
TAG=$(<VERSION)
|
||||||
|
|
||||||
if [[ -f BASEIMAGE ]]; then
|
if [[ -f BASEIMAGE ]]; then
|
||||||
BASEIMAGE=$(getBaseImage "${arch}")
|
BASEIMAGE=$(getBaseImage "${os_arch}" | ${SED} "s|REGISTRY|${REGISTRY}|g")
|
||||||
${SED} -i "s|BASEIMAGE|${BASEIMAGE}|g" Dockerfile
|
|
||||||
${SED} -i "s|BASEARCH|${arch}|g" Dockerfile
|
# NOTE(claudiub): Some Windows images might require their own Dockerfile
|
||||||
|
# while simpler ones will not. If we're building for Windows, check if
|
||||||
|
# "Dockerfile_windows" exists or not.
|
||||||
|
dockerfile_name="Dockerfile"
|
||||||
|
if [[ "$os_name" = "windows" && -f "Dockerfile_windows" ]]; then
|
||||||
|
dockerfile_name="Dockerfile_windows"
|
||||||
|
fi
|
||||||
|
|
||||||
|
${SED} -i "s|BASEARCH|${arch}|g" $dockerfile_name
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# copy the qemu-*-static binary to docker image to build the multi architecture image on x86 platform
|
# copy the qemu-*-static binary to docker image to build the multi architecture image on x86 platform
|
||||||
@ -99,8 +128,20 @@ build() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
docker build --pull -t "${REGISTRY}/${image}-${arch}:${TAG}" .
|
if [[ "$os_name" = "linux" ]]; then
|
||||||
|
docker build --pull -t "${REGISTRY}/${image}:${TAG}-${os_name}-${arch}" --build-arg BASEIMAGE="${BASEIMAGE}" .
|
||||||
|
elif [[ -n "${REMOTE_DOCKER_URL:-}" ]]; then
|
||||||
|
# NOTE(claudiub): We're using a remote Windows node to build the Windows Docker images.
|
||||||
|
# The node requires TLS authentication, and thus it is expected that the
|
||||||
|
# ca.pem, cert.pem, key.pem files can be found in the ${HOME}/.docker-${os_version} folder.
|
||||||
|
# TODO(claudiub): add "build --isolation=hyperv" once GCE introduces Hyper-V support.
|
||||||
|
docker --tlsverify --tlscacert "${HOME}/.docker-${os_version}/ca.pem" \
|
||||||
|
--tlscert "${HOME}/.docker-${os_version}/cert.pem" --tlskey "${HOME}/.docker-${os_version}/key.pem" \
|
||||||
|
-H "${REMOTE_DOCKER_URL}" build --pull -t "${REGISTRY}/${image}:${TAG}-${os_name}-${arch}-${os_version}" \
|
||||||
|
--build-arg BASEIMAGE="${BASEIMAGE}" -f $dockerfile_name .
|
||||||
|
else
|
||||||
|
echo "Cannot build the image '${image}' for ${os_arch}. REMOTE_DOCKER_URL_$os_version should be set, containing the URL to a Windows docker daemon."
|
||||||
|
fi
|
||||||
popd
|
popd
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
@ -121,25 +162,77 @@ push() {
|
|||||||
docker_version_check
|
docker_version_check
|
||||||
TAG=$(<"${image}"/VERSION)
|
TAG=$(<"${image}"/VERSION)
|
||||||
if [[ -f ${image}/BASEIMAGE ]]; then
|
if [[ -f ${image}/BASEIMAGE ]]; then
|
||||||
archs=$(listArchs "$image")
|
os_archs=$(listOsArchs "$image")
|
||||||
else
|
else
|
||||||
archs=${!QEMUARCHS[*]}
|
# prepend linux/ to the QEMUARCHS items.
|
||||||
|
os_archs=$(printf 'linux/%s\n' "${!QEMUARCHS[*]}")
|
||||||
|
fi
|
||||||
|
for os_arch in ${os_archs}; do
|
||||||
|
if [[ $os_arch =~ .*/.*/.* ]]; then
|
||||||
|
# for Windows, we have to support both LTS and SAC channels, so we're building multiple Windows images.
|
||||||
|
# the format for this case is: OS/ARCH/OS_VERSION.
|
||||||
|
os_name=$(echo "$os_arch" | cut -d "/" -f 1)
|
||||||
|
arch=$(echo "$os_arch" | cut -d "/" -f 2)
|
||||||
|
os_version=$(echo "$os_arch" | cut -d "/" -f 3)
|
||||||
|
|
||||||
|
# currently, GCE does not have Hyper-V support, which means that the same node cannot be used to build
|
||||||
|
# multiple versions of Windows images. Which is why we have $REMOTE_DOCKER_URL_$os_version URLs configured.
|
||||||
|
# TODO(claudiub): once Hyper-V support has been added to GCE, revert this to just $REMOTE_DOCKER_URL.
|
||||||
|
remote_docker_url_name="REMOTE_DOCKER_URL_$os_version"
|
||||||
|
REMOTE_DOCKER_URL=$(eval echo "\${${remote_docker_url_name}:-}")
|
||||||
|
elif [[ $os_arch =~ .*/.* ]]; then
|
||||||
|
os_name=$(echo "$os_arch" | cut -d "/" -f 1)
|
||||||
|
arch=$(echo "$os_arch" | cut -d "/" -f 2)
|
||||||
|
else
|
||||||
|
echo "The BASEIMAGE file for the ${image} image is not properly formatted. Expected entries to start with 'os/arch', found '${os_arch}' instead."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$os_name" = "linux" ]]; then
|
||||||
|
docker push "${REGISTRY}/${image}:${TAG}-${os_name}-${arch}"
|
||||||
|
elif [[ -n "${REMOTE_DOCKER_URL:-}" ]]; then
|
||||||
|
# NOTE(claudiub): We're pushing the image we built on the remote Windows node.
|
||||||
|
docker --tlsverify --tlscacert "${HOME}/.docker-${os_version}/ca.pem" \
|
||||||
|
--tlscert "${HOME}/.docker-${os_version}/cert.pem" --tlskey "${HOME}/.docker-${os_version}/key.pem" \
|
||||||
|
-H "${REMOTE_DOCKER_URL}" push "${REGISTRY}/${image}:${TAG}-${os_name}-${arch}-${os_version}"
|
||||||
|
else
|
||||||
|
echo "Cannot push the image '${image}' for ${os_arch}. REMOTE_DOCKER_URL_${os_version} should be set, containing the URL to a Windows docker daemon."
|
||||||
fi
|
fi
|
||||||
for arch in ${archs}; do
|
|
||||||
docker push "${REGISTRY}/${image}-${arch}:${TAG}"
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# NOTE(claudiub): if the REMOTE_DOCKER_URL var is not set, or it is an empty string, we mustn't include
|
||||||
|
# Windows images into the manifest list.
|
||||||
|
if test -z "${REMOTE_DOCKER_URL:-}" && printf "%s\n" "$os_archs" | grep -q '^windows'; then
|
||||||
|
echo "Skipping pushing the image '${image}' for Windows. REMOTE_DOCKER_URL_\${os_version} should be set, containing the URL to a Windows docker daemon."
|
||||||
|
os_archs=$(printf "%s\n" "$os_archs" | grep -v "^windows")
|
||||||
|
fi
|
||||||
|
|
||||||
kube::util::ensure-gnu-sed
|
kube::util::ensure-gnu-sed
|
||||||
|
|
||||||
# The manifest command is still experimental as of Docker 18.09.2
|
# The manifest command is still experimental as of Docker 18.09.2
|
||||||
export DOCKER_CLI_EXPERIMENTAL="enabled"
|
export DOCKER_CLI_EXPERIMENTAL="enabled"
|
||||||
# reset manifest list; needed in case multiple images are being built / pushed.
|
# reset manifest list; needed in case multiple images are being built / pushed.
|
||||||
manifest=()
|
manifest=()
|
||||||
# Make archs list into image manifest. Eg: 'amd64 ppc64le' to '${REGISTRY}/${image}-amd64:${TAG} ${REGISTRY}/${image}-ppc64le:${TAG}'
|
# Make os_archs list into image manifest. Eg: 'linux/amd64 linux/ppc64le' to '${REGISTRY}/${image}:${TAG}-linux-amd64 ${REGISTRY}/${image}:${TAG}-linux-ppc64le'
|
||||||
while IFS='' read -r line; do manifest+=("$line"); done < <(echo "$archs" | ${SED} -e "s~[^ ]*~$REGISTRY\/$image\-&:$TAG~g")
|
while IFS='' read -r line; do manifest+=("$line"); done < <(echo "$os_archs" | ${SED} "s~\/~-~g" | ${SED} -e "s~[^ ]*~$REGISTRY\/$image:$TAG\-&~g")
|
||||||
docker manifest create --amend "${REGISTRY}/${image}:${TAG}" "${manifest[@]}"
|
docker manifest create --amend "${REGISTRY}/${image}:${TAG}" "${manifest[@]}"
|
||||||
for arch in ${archs}; do
|
for os_arch in ${os_archs}; do
|
||||||
docker manifest annotate --arch "${arch}" "${REGISTRY}/${image}:${TAG}" "${REGISTRY}/${image}-${arch}:${TAG}"
|
if [[ $os_arch =~ .*/.*/.* ]]; then
|
||||||
|
# for Windows, we have to support both LTS and SAC channels, so we're building multiple Windows images.
|
||||||
|
# the format for this case is: OS/ARCH/OS_VERSION.
|
||||||
|
os_name=$(echo "$os_arch" | cut -d "/" -f 1)
|
||||||
|
arch=$(echo "$os_arch" | cut -d "/" -f 2)
|
||||||
|
os_version=$(echo "$os_arch" | cut -d "/" -f 3)
|
||||||
|
suffix="$os_name-$arch-$os_version"
|
||||||
|
elif [[ $os_arch =~ .*/.* ]]; then
|
||||||
|
os_name=$(echo "$os_arch" | cut -d "/" -f 1)
|
||||||
|
arch=$(echo "$os_arch" | cut -d "/" -f 2)
|
||||||
|
suffix="$os_name-$arch"
|
||||||
|
else
|
||||||
|
echo "The BASEIMAGE file for the ${image} image is not properly formatted. Expected entries to start with 'os/arch', found '${os_arch}' instead."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
docker manifest annotate --os "${os_name}" --arch "${arch}" "${REGISTRY}/${image}:${TAG}" "${REGISTRY}/${image}:${TAG}-${suffix}"
|
||||||
done
|
done
|
||||||
docker manifest push --purge "${REGISTRY}/${image}:${TAG}"
|
docker manifest push --purge "${REGISTRY}/${image}:${TAG}"
|
||||||
}
|
}
|
||||||
@ -156,7 +249,7 @@ bin() {
|
|||||||
golang:"${GOLANG_VERSION}" \
|
golang:"${GOLANG_VERSION}" \
|
||||||
/bin/bash -c "\
|
/bin/bash -c "\
|
||||||
cd /go/src/k8s.io/kubernetes/test/images/${SRC_DIR} && \
|
cd /go/src/k8s.io/kubernetes/test/images/${SRC_DIR} && \
|
||||||
CGO_ENABLED=0 ${arch_prefix} GOARCH=${ARCH} go build -a -installsuffix cgo --ldflags '-w' -o ${TARGET}/${SRC} ./$(dirname "${SRC}")"
|
CGO_ENABLED=0 ${arch_prefix} GOOS=${OS} GOARCH=${ARCH} go build -a -installsuffix cgo --ldflags '-w' -o ${TARGET}/${SRC} ./$(dirname "${SRC}")"
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -169,7 +262,7 @@ if [[ "${WHAT}" == "all-conformance" ]]; then
|
|||||||
# Discussed during Conformance Office Hours Meeting (2019.12.17):
|
# Discussed during Conformance Office Hours Meeting (2019.12.17):
|
||||||
# https://docs.google.com/document/d/1W31nXh9RYAb_VaYkwuPLd1hFxuRX3iU0DmaQ4lkCsX8/edit#heading=h.l87lu17xm9bh
|
# https://docs.google.com/document/d/1W31nXh9RYAb_VaYkwuPLd1hFxuRX3iU0DmaQ4lkCsX8/edit#heading=h.l87lu17xm9bh
|
||||||
# echoserver image not included: https://github.com/kubernetes/kubernetes/issues/84158
|
# echoserver image not included: https://github.com/kubernetes/kubernetes/issues/84158
|
||||||
conformance_images=("agnhost" "jessie-dnsutils" "kitten" "nautilus" "nonewprivs" "resource-consumer" "sample-apiserver")
|
conformance_images=("busybox" "agnhost" "jessie-dnsutils" "kitten" "nautilus" "nonewprivs" "resource-consumer" "sample-apiserver")
|
||||||
for image in "${conformance_images[@]}"; do
|
for image in "${conformance_images[@]}"; do
|
||||||
eval "${TASK}" "${image}"
|
eval "${TASK}" "${image}"
|
||||||
done
|
done
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
amd64=alpine:3.6
|
linux/amd64=alpine:3.6
|
||||||
arm=arm32v6/alpine:3.6
|
linux/arm=arm32v6/alpine:3.6
|
||||||
arm64=arm64v8/alpine:3.6
|
linux/arm64=arm64v8/alpine:3.6
|
||||||
ppc64le=ppc64le/alpine:3.6
|
linux/ppc64le=ppc64le/alpine:3.6
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=debian:jessie
|
linux/amd64=debian:jessie
|
||||||
arm=arm32v7/debian:jessie
|
linux/arm=arm32v7/debian:jessie
|
||||||
arm64=arm64v8/debian:jessie
|
linux/arm64=arm64v8/debian:jessie
|
||||||
ppc64le=ppc64le/debian:jessie
|
linux/ppc64le=ppc64le/debian:jessie
|
||||||
s390x=s390x/debian:jessie
|
linux/s390x=s390x/debian:jessie
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.2
|
1.3
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=gcr.io/kubernetes-e2e-test-images/agnhost-amd64:2.7
|
linux/amd64=REGISTRY/agnhost:2.11-linux-amd64
|
||||||
arm=gcr.io/kubernetes-e2e-test-images/agnhost-arm:2.7
|
linux/arm=REGISTRY/agnhost:2.11-linux-arm
|
||||||
arm64=gcr.io/kubernetes-e2e-test-images/agnhost-arm64:2.7
|
linux/arm64=REGISTRY/agnhost:2.11-linux-arm64
|
||||||
ppc64le=gcr.io/kubernetes-e2e-test-images/agnhost-ppc64le:2.7
|
linux/ppc64le=REGISTRY/agnhost:2.11-linux-ppc64le
|
||||||
s390x=gcr.io/kubernetes-e2e-test-images/agnhost-s390x:2.7
|
linux/s390x=REGISTRY/agnhost:2.11-linux-s390x
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
COPY html/kitten.jpg kitten.jpg
|
COPY html/kitten.jpg kitten.jpg
|
||||||
COPY html/data.json data.json
|
COPY html/data.json data.json
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS=check_metadata_concealment
|
SRCS=check_metadata_concealment
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.2
|
1.3
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=gcr.io/kubernetes-e2e-test-images/agnhost-amd64:2.7
|
linux/amd64=REGISTRY/agnhost:2.11-linux-amd64
|
||||||
arm=gcr.io/kubernetes-e2e-test-images/agnhost-arm:2.7
|
linux/arm=REGISTRY/agnhost:2.11-linux-arm
|
||||||
arm64=gcr.io/kubernetes-e2e-test-images/agnhost-arm64:2.7
|
linux/arm64=REGISTRY/agnhost:2.11-linux-arm64
|
||||||
ppc64le=gcr.io/kubernetes-e2e-test-images/agnhost-ppc64le:2.7
|
linux/ppc64le=REGISTRY/agnhost:2.11-linux-ppc64le
|
||||||
s390x=gcr.io/kubernetes-e2e-test-images/agnhost-s390x:2.7
|
linux/s390x=REGISTRY/agnhost:2.11-linux-s390x
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
COPY html/nautilus.jpg nautilus.jpg
|
COPY html/nautilus.jpg nautilus.jpg
|
||||||
COPY html/data.json data.json
|
COPY html/data.json data.json
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
amd64=debian:stretch-slim
|
linux/amd64=debian:stretch-slim
|
||||||
arm64=arm64v8/debian:stretch-slim
|
linux/arm64=arm64v8/debian:stretch-slim
|
||||||
ppc64le=ppc64le/debian:stretch-slim
|
linux/ppc64le=ppc64le/debian:stretch-slim
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE as build_node_perf_npb_ep
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE as build_node_perf_npb_ep
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
@ -33,7 +34,8 @@ RUN make EP CLASS=D
|
|||||||
# main container in the second build stage.
|
# main container in the second build stage.
|
||||||
RUN mkdir -p /lib-copy && find /usr/lib -name "*.so.*" -exec cp {} /lib-copy \;
|
RUN mkdir -p /lib-copy && find /usr/lib -name "*.so.*" -exec cp {} /lib-copy \;
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
COPY --from=build_node_perf_npb_ep /NPB3.3.1/NPB3.3-OMP/bin/ep.D.x /
|
COPY --from=build_node_perf_npb_ep /NPB3.3.1/NPB3.3-OMP/bin/ep.D.x /
|
||||||
COPY --from=build_node_perf_npb_ep /lib-copy /lib-copy
|
COPY --from=build_node_perf_npb_ep /lib-copy /lib-copy
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
amd64=debian:stretch-slim
|
linux/amd64=debian:stretch-slim
|
||||||
arm64=arm64v8/debian:stretch-slim
|
linux/arm64=arm64v8/debian:stretch-slim
|
||||||
ppc64le=ppc64le/debian:stretch-slim
|
linux/ppc64le=ppc64le/debian:stretch-slim
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE as build_node_perf_npb_is
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE as build_node_perf_npb_is
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
@ -35,7 +36,8 @@ RUN make IS CLASS=D
|
|||||||
# main container in the second build stage.
|
# main container in the second build stage.
|
||||||
RUN mkdir -p /lib-copy && find /usr/lib -name "*.so.*" -exec cp {} /lib-copy \;
|
RUN mkdir -p /lib-copy && find /usr/lib -name "*.so.*" -exec cp {} /lib-copy \;
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
COPY --from=build_node_perf_npb_is /NPB3.3.1/NPB3.3-OMP/bin/is.D.x /
|
COPY --from=build_node_perf_npb_is /NPB3.3.1/NPB3.3-OMP/bin/is.D.x /
|
||||||
COPY --from=build_node_perf_npb_is /lib-copy /lib-copy
|
COPY --from=build_node_perf_npb_is /lib-copy /lib-copy
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
amd64=python:3.6-slim-stretch
|
linux/amd64=python:3.6-slim-stretch
|
||||||
arm64=arm64v8/python:3.6-slim-stretch
|
linux/arm64=arm64v8/python:3.6-slim-stretch
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
amd64=alpine:3.6
|
linux/amd64=alpine:3.6
|
||||||
arm=arm32v6/alpine:3.6
|
linux/arm=arm32v6/alpine:3.6
|
||||||
arm64=arm64v8/alpine:3.6
|
linux/arm64=arm64v8/alpine:3.6
|
||||||
ppc64le=ppc64le/alpine:3.6
|
linux/ppc64le=ppc64le/alpine:3.6
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS = nnp
|
SRCS = nnp
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.1
|
1.2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=k8s.gcr.io/debian-base-amd64:v1.0.0
|
linux/amd64=k8s.gcr.io/debian-base-amd64:v1.0.0
|
||||||
arm=k8s.gcr.io/debian-base-arm:v1.0.0
|
linux/arm=k8s.gcr.io/debian-base-arm:v1.0.0
|
||||||
arm64=k8s.gcr.io/debian-base-arm64:v1.0.0
|
linux/arm64=k8s.gcr.io/debian-base-arm64:v1.0.0
|
||||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:v1.0.0
|
linux/ppc64le=k8s.gcr.io/debian-base-ppc64le:v1.0.0
|
||||||
s390x=k8s.gcr.io/debian-base-s390x:v1.0.0
|
linux/s390x=k8s.gcr.io/debian-base-s390x:v1.0.0
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
USER 1234
|
USER 1234
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS = peer-finder
|
SRCS = peer-finder
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.3
|
1.4
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
linux/amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||||
arm=k8s.gcr.io/debian-base-arm:0.4.1
|
linux/arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||||
arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
linux/arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
linux/ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
|
|
||||||
# TODO: get rid of bash dependency and switch to plain busybox.
|
# TODO: get rid of bash dependency and switch to plain busybox.
|
||||||
# The tar in busybox also doesn't seem to understand compression.
|
# The tar in busybox also doesn't seem to understand compression.
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS = peer-finder
|
SRCS = peer-finder
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.3
|
1.4
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
linux/amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||||
arm=k8s.gcr.io/debian-base-arm:0.4.1
|
linux/arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||||
arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
linux/arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
linux/ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
|
|
||||||
# TODO: get rid of bash dependency and switch to plain busybox.
|
# TODO: get rid of bash dependency and switch to plain busybox.
|
||||||
# The tar in busybox also doesn't seem to understand compression.
|
# The tar in busybox also doesn't seem to understand compression.
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS = peer-finder
|
SRCS = peer-finder
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.3
|
1.4
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=alpine:3.6
|
linux/amd64=alpine:3.6
|
||||||
arm=arm32v6/alpine:3.6
|
linux/arm=arm32v6/alpine:3.6
|
||||||
arm64=arm64v8/alpine:3.6
|
linux/arm64=arm64v8/alpine:3.6
|
||||||
ppc64le=ppc64le/alpine:3.6
|
linux/ppc64le=ppc64le/alpine:3.6
|
||||||
s390x=s390x/alpine:3.6
|
linux/s390x=s390x/alpine:3.6
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS=regression-issue-74839
|
SRCS=regression-issue-74839
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOARM ?= 7
|
GOARM ?= 7
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
linux/amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||||
arm=k8s.gcr.io/debian-base-arm:0.4.1
|
linux/arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||||
arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
linux/arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
linux/ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
||||||
s390x=k8s.gcr.io/debian-base-s390x:0.4.1
|
linux/s390x=k8s.gcr.io/debian-base-s390x:0.4.1
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS = consumer consume-cpu/consume-cpu
|
SRCS = consumer consume-cpu/consume-cpu
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -48,7 +48,7 @@ Custom metrics in Prometheus format are exposed on "/metrics" endpoint.
|
|||||||
|
|
||||||
### CURL example
|
### CURL example
|
||||||
```console
|
```console
|
||||||
kubectl run resource-consumer --image=gcr.io/kubernetes-e2e-test-images/resource-consumer:1.4 --expose --service-overrides='{ "spec": { "type": "LoadBalancer" } }' --port 8080 --requests='cpu=500m,memory=256Mi'
|
kubectl run resource-consumer --image=gcr.io/kubernetes-e2e-test-images/resource-consumer:1.7 --expose --service-overrides='{ "spec": { "type": "LoadBalancer" } }' --port 8080 --requests='cpu=500m,memory=256Mi'
|
||||||
kubectl get services resource-consumer
|
kubectl get services resource-consumer
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ curl --data "millicores=300&durationSec=600" http://<EXTERNAL-IP>:8080/ConsumeCP
|
|||||||
|
|
||||||
## Image
|
## Image
|
||||||
|
|
||||||
Docker image of Resource Consumer can be found in Google Container Registry as gcr.io/kubernetes-e2e-test-images/resource-consumer:1.4
|
Docker image of Resource Consumer can be found in Google Container Registry as gcr.io/kubernetes-e2e-test-images/resource-consumer:1.7
|
||||||
|
|
||||||
## Use cases
|
## Use cases
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.6
|
1.7
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=alpine:3.8
|
linux/amd64=alpine:3.8
|
||||||
arm=arm32v6/alpine:3.8
|
linux/arm=arm32v6/alpine:3.8
|
||||||
arm64=arm64v8/alpine:3.8
|
linux/arm64=arm64v8/alpine:3.8
|
||||||
ppc64le=ppc64le/alpine:3.8
|
linux/ppc64le=ppc64le/alpine:3.8
|
||||||
s390x=s390x/alpine:3.8
|
linux/s390x=s390x/alpine:3.8
|
||||||
|
@ -32,7 +32,8 @@ RUN GO111MODULE=on CGO_ENABLED=0 GOOS=linux GOARCH=BASEARCH go get k8s.io/sample
|
|||||||
# we can copy it out from this throw away container image from a standard location
|
# we can copy it out from this throw away container image from a standard location
|
||||||
RUN find /go/bin -name sample-apiserver -exec cp {} / \;
|
RUN find /go/bin -name sample-apiserver -exec cp {} / \;
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
COPY --from=build_k8s_1_17_sample_apiserver /sample-apiserver /sample-apiserver
|
COPY --from=build_k8s_1_17_sample_apiserver /sample-apiserver /sample-apiserver
|
||||||
|
|
||||||
ENTRYPOINT ["/sample-apiserver"]
|
ENTRYPOINT ["/sample-apiserver"]
|
||||||
|
@ -1 +1 @@
|
|||||||
1.17.2
|
1.17.3
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
amd64=alpine:3.8
|
linux/amd64=alpine:3.8
|
||||||
arm=arm32v6/alpine:3.8
|
linux/arm=arm32v6/alpine:3.8
|
||||||
arm64=arm64v8/alpine:3.8
|
linux/arm64=arm64v8/alpine:3.8
|
||||||
ppc64le=ppc64le/alpine:3.8
|
linux/ppc64le=ppc64le/alpine:3.8
|
||||||
s390x=s390x/alpine:3.8
|
linux/s390x=s390x/alpine:3.8
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
ADD sampledeviceplugin /sampledeviceplugin
|
ADD sampledeviceplugin /sampledeviceplugin
|
||||||
ENTRYPOINT ["/sampledeviceplugin", "-alsologtostderr"]
|
ENTRYPOINT ["/sampledeviceplugin", "-alsologtostderr"]
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
SRCS=sampledeviceplugin
|
SRCS=sampledeviceplugin
|
||||||
|
OS ?= linux
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
TARGET ?= $(CURDIR)
|
TARGET ?= $(CURDIR)
|
||||||
GOLANG_VERSION ?= latest
|
GOLANG_VERSION ?= latest
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
amd64=fedora:28
|
linux/amd64=fedora:28
|
||||||
arm64=arm64v8/fedora:28
|
linux/arm64=arm64v8/fedora:28
|
||||||
ppc64le=ppc64le/fedora:28
|
linux/ppc64le=ppc64le/fedora:28
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
amd64=fedora:28
|
linux/amd64=fedora:28
|
||||||
arm64=arm64v8/fedora:28
|
linux/arm64=arm64v8/fedora:28
|
||||||
ppc64le=ppc64le/fedora:28
|
linux/ppc64le=ppc64le/fedora:28
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
2.0
|
2.1
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
amd64=centos:7
|
linux/amd64=centos:7
|
||||||
arm64=arm64v8/centos:7
|
linux/arm64=arm64v8/centos:7
|
||||||
ppc64le=ppc64le/centos:7
|
linux/ppc64le=ppc64le/centos:7
|
||||||
|
@ -12,7 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
RUN yum -y install /usr/bin/ps nfs-utils && yum clean all
|
RUN yum -y install /usr/bin/ps nfs-utils && yum clean all
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0
|
1.1
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
amd64=fedora:26
|
linux/amd64=fedora:26
|
||||||
arm64=arm64v8/fedora:26
|
linux/arm64=arm64v8/fedora:26
|
||||||
ppc64le=ppc64le/fedora:26
|
linux/ppc64le=ppc64le/fedora:26
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
# CEPH all in one
|
# CEPH all in one
|
||||||
# Based on image by Ricardo Rocha, ricardo@catalyst.net.nz
|
# Based on image by Ricardo Rocha, ricardo@catalyst.net.nz
|
||||||
|
|
||||||
FROM BASEIMAGE
|
ARG BASEIMAGE
|
||||||
|
FROM $BASEIMAGE
|
||||||
|
|
||||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
1.0.1
|
1.0.2
|
||||||
|
Loading…
Reference in New Issue
Block a user