mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +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",
|
||||
"//test/images/agnhost:all-srcs",
|
||||
"//test/images/apparmor-loader:all-srcs",
|
||||
"//test/images/busybox:all-srcs",
|
||||
"//test/images/echoserver:all-srcs",
|
||||
"//test/images/metadata-concealment: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
|
||||
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
|
||||
|
||||
@ -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'
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
@ -88,6 +160,14 @@ registry. That can changed by running this command instead:
|
||||
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`)
|
||||
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
|
||||
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
|
||||
arm=arm32v6/alpine:3.6
|
||||
arm64=arm64v8/alpine:3.6
|
||||
ppc64le=ppc64le/alpine:3.6
|
||||
s390x=s390x/alpine:3.6
|
||||
linux/amd64=alpine:3.6
|
||||
linux/arm=arm32v6/alpine:3.6
|
||||
linux/arm64=arm64v8/alpine:3.6
|
||||
linux/ppc64le=ppc64le/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
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
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.
|
||||
|
||||
SRCS=agnhost
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -40,7 +40,7 @@ For example, let's consider the following `pod.yaml` file:
|
||||
containers:
|
||||
- args:
|
||||
- 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
|
||||
dnsConfig:
|
||||
nameservers:
|
||||
@ -207,7 +207,7 @@ Usage:
|
||||
|
||||
```console
|
||||
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.
|
||||
kubectl create -f ${guestbook}/frontend-service.yaml
|
||||
@ -290,14 +290,14 @@ Examples:
|
||||
|
||||
```console
|
||||
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
|
||||
```
|
||||
|
||||
```console
|
||||
kubectl run logs-generator \
|
||||
--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 \
|
||||
-- logs-generator -t 10 -d 1s
|
||||
```
|
||||
@ -455,7 +455,7 @@ Usage:
|
||||
```console
|
||||
kubectl run test-agnhost \
|
||||
--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 \
|
||||
--env "POD_IP=<POD_IP>" \
|
||||
--env "NODE_IP=<NODE_IP>" \
|
||||
@ -510,7 +510,7 @@ Usage:
|
||||
```console
|
||||
kubectl run test-agnhost \
|
||||
--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 \
|
||||
--env "BIND_ADDRESS=localhost" \
|
||||
--env "BIND_PORT=8080" \
|
||||
@ -626,11 +626,18 @@ Usage:
|
||||
|
||||
## 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
|
||||
|
||||
The image can be found at `us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.10` for Linux
|
||||
containers, and `e2eteam/agnhost:2.10` for Windows containers. In the future, the same
|
||||
repository can be used for both OSes.
|
||||
The image can be found at `us.gcr.io/k8s-artifacts-prod/e2e-test-images/agnhost:2.11` for both Linux and
|
||||
Windows containers (based on `mcr.microsoft.com/windows/servercore:ltsc2019`,
|
||||
`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() {
|
||||
rootCmd := &cobra.Command{Use: "app", Version: "2.10"}
|
||||
rootCmd := &cobra.Command{Use: "app", Version: "2.11"}
|
||||
|
||||
rootCmd.AddCommand(auditproxy.CmdAuditProxy)
|
||||
rootCmd.AddCommand(connect.CmdConnect)
|
||||
|
@ -1,4 +1,4 @@
|
||||
amd64=alpine:3.8
|
||||
arm=arm32v6/alpine:3.8
|
||||
arm64=arm64v8/alpine:3.8
|
||||
ppc64le=ppc64le/alpine:3.8
|
||||
linux/amd64=alpine:3.8
|
||||
linux/arm=arm32v6/alpine:3.8
|
||||
linux/arm64=arm64v8/alpine:3.8
|
||||
linux/ppc64le=ppc64le/alpine:3.8
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS=loader
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
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
|
||||
- WHAT=$_WHAT
|
||||
- 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:
|
||||
- all-push
|
||||
substitutions:
|
||||
|
@ -1,2 +1,2 @@
|
||||
amd64=nvidia/cuda:10.0-devel-ubuntu18.04
|
||||
ppc64le=nvidia/cuda-ppc64le:10.0-devel-ubuntu18.04
|
||||
linux/amd64=nvidia/cuda: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
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
2.0
|
||||
2.1
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=nginx:1.15-alpine
|
||||
arm=arm32v6/nginx:1.15-alpine
|
||||
arm64=arm64v8/nginx:1.15-alpine
|
||||
ppc64le=ppc64le/nginx:1.15-alpine
|
||||
s390x=s390x/nginx:1.15-alpine
|
||||
linux/amd64=nginx:1.15-alpine
|
||||
linux/arm=arm32v6/nginx:1.15-alpine
|
||||
linux/arm64=arm64v8/nginx:1.15-alpine
|
||||
linux/ppc64le=ppc64le/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
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
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" )
|
||||
|
||||
# Returns list of all supported architectures from BASEIMAGE file
|
||||
listArchs() {
|
||||
listOsArchs() {
|
||||
image=$1
|
||||
cut -d "=" -f 1 "${image}"/BASEIMAGE
|
||||
}
|
||||
|
||||
# Returns baseimage need to used in Dockerfile for any given architecture
|
||||
getBaseImage() {
|
||||
arch=$1
|
||||
grep "${arch}=" BASEIMAGE | cut -d= -f2
|
||||
os_arch=$1
|
||||
grep "${os_arch}=" BASEIMAGE | cut -d= -f2
|
||||
}
|
||||
|
||||
# This function will build test image for all the architectures
|
||||
@ -47,15 +47,36 @@ getBaseImage() {
|
||||
build() {
|
||||
image=$1
|
||||
if [[ -f ${image}/BASEIMAGE ]]; then
|
||||
archs=$(listArchs "$image")
|
||||
os_archs=$(listOsArchs "$image")
|
||||
else
|
||||
archs=${!QEMUARCHS[*]}
|
||||
# prepend linux/ to the QEMUARCHS items.
|
||||
os_archs=$(printf 'linux/%s\n' "${!QEMUARCHS[*]}")
|
||||
fi
|
||||
|
||||
kube::util::ensure-gnu-sed
|
||||
|
||||
for arch in ${archs}; do
|
||||
echo "Building image for ${image} ARCH: ${arch}..."
|
||||
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
|
||||
|
||||
echo "Building image for ${image} OS/ARCH: ${os_arch}..."
|
||||
|
||||
# Create a temporary directory for every architecture and copy the image content
|
||||
# and build the image from temporary directory
|
||||
@ -67,16 +88,24 @@ build() {
|
||||
if [[ -f ${image}/Makefile ]]; then
|
||||
# make bin will take care of all the prerequisites needed
|
||||
# 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
|
||||
pushd "${temp_dir}"
|
||||
# image tag
|
||||
TAG=$(<VERSION)
|
||||
|
||||
if [[ -f BASEIMAGE ]]; then
|
||||
BASEIMAGE=$(getBaseImage "${arch}")
|
||||
${SED} -i "s|BASEIMAGE|${BASEIMAGE}|g" Dockerfile
|
||||
${SED} -i "s|BASEARCH|${arch}|g" Dockerfile
|
||||
BASEIMAGE=$(getBaseImage "${os_arch}" | ${SED} "s|REGISTRY|${REGISTRY}|g")
|
||||
|
||||
# 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
|
||||
|
||||
# copy the qemu-*-static binary to docker image to build the multi architecture image on x86 platform
|
||||
@ -99,8 +128,20 @@ build() {
|
||||
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
|
||||
done
|
||||
}
|
||||
@ -121,25 +162,77 @@ push() {
|
||||
docker_version_check
|
||||
TAG=$(<"${image}"/VERSION)
|
||||
if [[ -f ${image}/BASEIMAGE ]]; then
|
||||
archs=$(listArchs "$image")
|
||||
os_archs=$(listOsArchs "$image")
|
||||
else
|
||||
archs=${!QEMUARCHS[*]}
|
||||
# prepend linux/ to the QEMUARCHS items.
|
||||
os_archs=$(printf 'linux/%s\n' "${!QEMUARCHS[*]}")
|
||||
fi
|
||||
for arch in ${archs}; do
|
||||
docker push "${REGISTRY}/${image}-${arch}:${TAG}"
|
||||
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
|
||||
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
|
||||
|
||||
# The manifest command is still experimental as of Docker 18.09.2
|
||||
export DOCKER_CLI_EXPERIMENTAL="enabled"
|
||||
# reset manifest list; needed in case multiple images are being built / pushed.
|
||||
manifest=()
|
||||
# Make archs list into image manifest. Eg: 'amd64 ppc64le' to '${REGISTRY}/${image}-amd64:${TAG} ${REGISTRY}/${image}-ppc64le:${TAG}'
|
||||
while IFS='' read -r line; do manifest+=("$line"); done < <(echo "$archs" | ${SED} -e "s~[^ ]*~$REGISTRY\/$image\-&:$TAG~g")
|
||||
# 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 "$os_archs" | ${SED} "s~\/~-~g" | ${SED} -e "s~[^ ]*~$REGISTRY\/$image:$TAG\-&~g")
|
||||
docker manifest create --amend "${REGISTRY}/${image}:${TAG}" "${manifest[@]}"
|
||||
for arch in ${archs}; do
|
||||
docker manifest annotate --arch "${arch}" "${REGISTRY}/${image}:${TAG}" "${REGISTRY}/${image}-${arch}:${TAG}"
|
||||
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)
|
||||
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
|
||||
docker manifest push --purge "${REGISTRY}/${image}:${TAG}"
|
||||
}
|
||||
@ -156,7 +249,7 @@ bin() {
|
||||
golang:"${GOLANG_VERSION}" \
|
||||
/bin/bash -c "\
|
||||
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
|
||||
}
|
||||
|
||||
@ -169,7 +262,7 @@ if [[ "${WHAT}" == "all-conformance" ]]; then
|
||||
# Discussed during Conformance Office Hours Meeting (2019.12.17):
|
||||
# https://docs.google.com/document/d/1W31nXh9RYAb_VaYkwuPLd1hFxuRX3iU0DmaQ4lkCsX8/edit#heading=h.l87lu17xm9bh
|
||||
# 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
|
||||
eval "${TASK}" "${image}"
|
||||
done
|
||||
|
@ -1,4 +1,4 @@
|
||||
amd64=alpine:3.6
|
||||
arm=arm32v6/alpine:3.6
|
||||
arm64=arm64v8/alpine:3.6
|
||||
ppc64le=ppc64le/alpine:3.6
|
||||
linux/amd64=alpine:3.6
|
||||
linux/arm=arm32v6/alpine:3.6
|
||||
linux/arm64=arm64v8/alpine:3.6
|
||||
linux/ppc64le=ppc64le/alpine:3.6
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=debian:jessie
|
||||
arm=arm32v7/debian:jessie
|
||||
arm64=arm64v8/debian:jessie
|
||||
ppc64le=ppc64le/debian:jessie
|
||||
s390x=s390x/debian:jessie
|
||||
linux/amd64=debian:jessie
|
||||
linux/arm=arm32v7/debian:jessie
|
||||
linux/arm64=arm64v8/debian:jessie
|
||||
linux/ppc64le=ppc64le/debian:jessie
|
||||
linux/s390x=s390x/debian:jessie
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
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
|
||||
arm=gcr.io/kubernetes-e2e-test-images/agnhost-arm:2.7
|
||||
arm64=gcr.io/kubernetes-e2e-test-images/agnhost-arm64:2.7
|
||||
ppc64le=gcr.io/kubernetes-e2e-test-images/agnhost-ppc64le:2.7
|
||||
s390x=gcr.io/kubernetes-e2e-test-images/agnhost-s390x:2.7
|
||||
linux/amd64=REGISTRY/agnhost:2.11-linux-amd64
|
||||
linux/arm=REGISTRY/agnhost:2.11-linux-arm
|
||||
linux/arm64=REGISTRY/agnhost:2.11-linux-arm64
|
||||
linux/ppc64le=REGISTRY/agnhost:2.11-linux-ppc64le
|
||||
linux/s390x=REGISTRY/agnhost:2.11-linux-s390x
|
||||
|
@ -12,6 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
COPY html/kitten.jpg kitten.jpg
|
||||
COPY html/data.json data.json
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS=check_metadata_concealment
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -1 +1 @@
|
||||
1.2
|
||||
1.3
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=gcr.io/kubernetes-e2e-test-images/agnhost-amd64:2.7
|
||||
arm=gcr.io/kubernetes-e2e-test-images/agnhost-arm:2.7
|
||||
arm64=gcr.io/kubernetes-e2e-test-images/agnhost-arm64:2.7
|
||||
ppc64le=gcr.io/kubernetes-e2e-test-images/agnhost-ppc64le:2.7
|
||||
s390x=gcr.io/kubernetes-e2e-test-images/agnhost-s390x:2.7
|
||||
linux/amd64=REGISTRY/agnhost:2.11-linux-amd64
|
||||
linux/arm=REGISTRY/agnhost:2.11-linux-arm
|
||||
linux/arm64=REGISTRY/agnhost:2.11-linux-arm64
|
||||
linux/ppc64le=REGISTRY/agnhost:2.11-linux-ppc64le
|
||||
linux/s390x=REGISTRY/agnhost:2.11-linux-s390x
|
||||
|
@ -12,6 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
COPY html/nautilus.jpg nautilus.jpg
|
||||
COPY html/data.json data.json
|
||||
|
@ -1,3 +1,3 @@
|
||||
amd64=debian:stretch-slim
|
||||
arm64=arm64v8/debian:stretch-slim
|
||||
ppc64le=ppc64le/debian:stretch-slim
|
||||
linux/amd64=debian:stretch-slim
|
||||
linux/arm64=arm64v8/debian:stretch-slim
|
||||
linux/ppc64le=ppc64le/debian:stretch-slim
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# 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/
|
||||
|
||||
@ -33,7 +34,8 @@ RUN make EP CLASS=D
|
||||
# main container in the second build stage.
|
||||
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 /lib-copy /lib-copy
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,3 +1,3 @@
|
||||
amd64=debian:stretch-slim
|
||||
arm64=arm64v8/debian:stretch-slim
|
||||
ppc64le=ppc64le/debian:stretch-slim
|
||||
linux/amd64=debian:stretch-slim
|
||||
linux/arm64=arm64v8/debian:stretch-slim
|
||||
linux/ppc64le=ppc64le/debian:stretch-slim
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# 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/
|
||||
|
||||
@ -35,7 +36,8 @@ RUN make IS CLASS=D
|
||||
# main container in the second build stage.
|
||||
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 /lib-copy /lib-copy
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,2 +1,2 @@
|
||||
amd64=python:3.6-slim-stretch
|
||||
arm64=arm64v8/python:3.6-slim-stretch
|
||||
linux/amd64=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
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,4 +1,4 @@
|
||||
amd64=alpine:3.6
|
||||
arm=arm32v6/alpine:3.6
|
||||
arm64=arm64v8/alpine:3.6
|
||||
ppc64le=ppc64le/alpine:3.6
|
||||
linux/amd64=alpine:3.6
|
||||
linux/arm=arm32v6/alpine:3.6
|
||||
linux/arm64=arm64v8/alpine:3.6
|
||||
linux/ppc64le=ppc64le/alpine:3.6
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS = nnp
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -1 +1 @@
|
||||
1.1
|
||||
1.2
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=k8s.gcr.io/debian-base-amd64:v1.0.0
|
||||
arm=k8s.gcr.io/debian-base-arm:v1.0.0
|
||||
arm64=k8s.gcr.io/debian-base-arm64:v1.0.0
|
||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:v1.0.0
|
||||
s390x=k8s.gcr.io/debian-base-s390x:v1.0.0
|
||||
linux/amd64=k8s.gcr.io/debian-base-amd64:v1.0.0
|
||||
linux/arm=k8s.gcr.io/debian-base-arm:v1.0.0
|
||||
linux/arm64=k8s.gcr.io/debian-base-arm64:v1.0.0
|
||||
linux/ppc64le=k8s.gcr.io/debian-base-ppc64le: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
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
USER 1234
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS = peer-finder
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -1 +1 @@
|
||||
1.3
|
||||
1.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||
arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||
arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
||||
linux/amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||
linux/arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||
linux/arm64=k8s.gcr.io/debian-base-arm64: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.
|
||||
# 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/
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS = peer-finder
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -1 +1 @@
|
||||
1.3
|
||||
1.4
|
||||
|
@ -1,4 +1,4 @@
|
||||
amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||
arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||
arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
||||
linux/amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||
linux/arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||
linux/arm64=k8s.gcr.io/debian-base-arm64: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.
|
||||
# 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/
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS = peer-finder
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -1 +1 @@
|
||||
1.3
|
||||
1.4
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=alpine:3.6
|
||||
arm=arm32v6/alpine:3.6
|
||||
arm64=arm64v8/alpine:3.6
|
||||
ppc64le=ppc64le/alpine:3.6
|
||||
s390x=s390x/alpine:3.6
|
||||
linux/amd64=alpine:3.6
|
||||
linux/arm=arm32v6/alpine:3.6
|
||||
linux/arm64=arm64v8/alpine:3.6
|
||||
linux/ppc64le=ppc64le/alpine:3.6
|
||||
linux/s390x=s390x/alpine:3.6
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS=regression-issue-74839
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOARM ?= 7
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||
arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||
arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||
ppc64le=k8s.gcr.io/debian-base-ppc64le:0.4.1
|
||||
s390x=k8s.gcr.io/debian-base-s390x:0.4.1
|
||||
linux/amd64=k8s.gcr.io/debian-base-amd64:0.4.1
|
||||
linux/arm=k8s.gcr.io/debian-base-arm:0.4.1
|
||||
linux/arm64=k8s.gcr.io/debian-base-arm64:0.4.1
|
||||
linux/ppc64le=k8s.gcr.io/debian-base-ppc64le: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
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS = consumer consume-cpu/consume-cpu
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -48,7 +48,7 @@ Custom metrics in Prometheus format are exposed on "/metrics" endpoint.
|
||||
|
||||
### CURL example
|
||||
```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
|
||||
```
|
||||
|
||||
@ -62,7 +62,7 @@ curl --data "millicores=300&durationSec=600" http://<EXTERNAL-IP>:8080/ConsumeCP
|
||||
|
||||
## 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
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.6
|
||||
1.7
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=alpine:3.8
|
||||
arm=arm32v6/alpine:3.8
|
||||
arm64=arm64v8/alpine:3.8
|
||||
ppc64le=ppc64le/alpine:3.8
|
||||
s390x=s390x/alpine:3.8
|
||||
linux/amd64=alpine:3.8
|
||||
linux/arm=arm32v6/alpine:3.8
|
||||
linux/arm64=arm64v8/alpine:3.8
|
||||
linux/ppc64le=ppc64le/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
|
||||
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
|
||||
|
||||
ENTRYPOINT ["/sample-apiserver"]
|
||||
|
@ -1 +1 @@
|
||||
1.17.2
|
||||
1.17.3
|
||||
|
@ -1,5 +1,5 @@
|
||||
amd64=alpine:3.8
|
||||
arm=arm32v6/alpine:3.8
|
||||
arm64=arm64v8/alpine:3.8
|
||||
ppc64le=ppc64le/alpine:3.8
|
||||
s390x=s390x/alpine:3.8
|
||||
linux/amd64=alpine:3.8
|
||||
linux/arm=arm32v6/alpine:3.8
|
||||
linux/arm64=arm64v8/alpine:3.8
|
||||
linux/ppc64le=ppc64le/alpine:3.8
|
||||
linux/s390x=s390x/alpine:3.8
|
||||
|
@ -12,6 +12,7 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
ADD sampledeviceplugin /sampledeviceplugin
|
||||
ENTRYPOINT ["/sampledeviceplugin", "-alsologtostderr"]
|
||||
|
@ -13,6 +13,7 @@
|
||||
# limitations under the License.
|
||||
|
||||
SRCS=sampledeviceplugin
|
||||
OS ?= linux
|
||||
ARCH ?= amd64
|
||||
TARGET ?= $(CURDIR)
|
||||
GOLANG_VERSION ?= latest
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,3 +1,3 @@
|
||||
amd64=fedora:28
|
||||
arm64=arm64v8/fedora:28
|
||||
ppc64le=ppc64le/fedora:28
|
||||
linux/amd64=fedora:28
|
||||
linux/arm64=arm64v8/fedora:28
|
||||
linux/ppc64le=ppc64le/fedora:28
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.0
|
||||
1.1
|
||||
|
@ -1,3 +1,3 @@
|
||||
amd64=fedora:28
|
||||
arm64=arm64v8/fedora:28
|
||||
ppc64le=ppc64le/fedora:28
|
||||
linux/amd64=fedora:28
|
||||
linux/arm64=arm64v8/fedora:28
|
||||
linux/ppc64le=ppc64le/fedora:28
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
2.0
|
||||
2.1
|
||||
|
@ -1,3 +1,3 @@
|
||||
amd64=centos:7
|
||||
arm64=arm64v8/centos:7
|
||||
ppc64le=ppc64le/centos:7
|
||||
linux/amd64=centos:7
|
||||
linux/arm64=arm64v8/centos:7
|
||||
linux/ppc64le=ppc64le/centos:7
|
||||
|
@ -12,7 +12,8 @@
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
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
|
||||
arm64=arm64v8/fedora:26
|
||||
ppc64le=ppc64le/fedora:26
|
||||
linux/amd64=fedora:26
|
||||
linux/arm64=arm64v8/fedora:26
|
||||
linux/ppc64le=ppc64le/fedora:26
|
||||
|
@ -15,7 +15,8 @@
|
||||
# CEPH all in one
|
||||
# Based on image by Ricardo Rocha, ricardo@catalyst.net.nz
|
||||
|
||||
FROM BASEIMAGE
|
||||
ARG BASEIMAGE
|
||||
FROM $BASEIMAGE
|
||||
|
||||
CROSS_BUILD_COPY qemu-QEMUARCH-static /usr/bin/
|
||||
|
||||
|
@ -1 +1 @@
|
||||
1.0.1
|
||||
1.0.2
|
||||
|
Loading…
Reference in New Issue
Block a user