Merge pull request #76838 from claudiubelu/test-images/windows-support

test images: Adds Windows Container images support (part 1)
This commit is contained in:
Kubernetes Prow Robot 2020-03-02 16:15:38 -08:00 committed by GitHub
commit a5048219ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
95 changed files with 623 additions and 178 deletions

View File

@ -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",

View File

@ -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
```

View File

@ -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

View File

@ -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/

View 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"]

View File

@ -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

View File

@ -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`).

View File

@ -1 +1 @@
2.10 2.11

View File

@ -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)

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View 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
View 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"],
)

View 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"]

View 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

View File

@ -0,0 +1 @@
1.29

View 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)
}
}

View File

@ -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:

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
2.0 2.1

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
2.2 2.3

View File

@ -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

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
1.2 1.3

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
1.2 1.3

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -1 +1 @@
1.1 1.2

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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/

View File

@ -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

View File

@ -1 +1 @@
1.3 1.4

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -1 +1 @@
1.3 1.4

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -1 +1 @@
1.3 1.4

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
1.6 1.7

View File

@ -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

View File

@ -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"]

View File

@ -1 +1 @@
1.17.2 1.17.3

View File

@ -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

View File

@ -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"]

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
2.0 2.1

View File

@ -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

View File

@ -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

View File

@ -1 +1 @@
1.0 1.1

View File

@ -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

View File

@ -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/

View File

@ -1 +1 @@
1.0.1 1.0.2