Skip to content

Commit 7de0770

Browse files
committed
Support Additional Layer Store
Signed-off-by: Kohei Tokunaga <[email protected]>
1 parent 525f818 commit 7de0770

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+3605
-1627
lines changed

.github/workflows/benchmark.yml

+8-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ jobs:
1717
BENCHMARK_SAMPLES_NUM: 5
1818
BENCHMARK_PERCENTILE: 95
1919
BENCHMARK_PERCENTILES_GRANULARITY: 25
20+
strategy:
21+
fail-fast: false
22+
max-parallel: 1
23+
matrix:
24+
runtime: ["podman", "containerd"]
2025
steps:
2126
- name: Install tools
2227
run: |
@@ -31,9 +36,11 @@ jobs:
3136
jq '{ location : .compute.location, vmSize : .compute.vmSize }' | \
3237
tee ${{ env.BENCHMARK_RESULT_DIR }}/instance.json
3338
- name: Run benchmark
39+
env:
40+
BENCHMARK_RUNTIME_MODE: ${{ matrix.runtime }}
3441
run: make benchmark
3542
- uses: actions/upload-artifact@v1
3643
if: ${{ always() }}
3744
with:
38-
name: benchmarking-result
45+
name: benchmarking-result-${{ matrix.runtime }}
3946
path: ${{ env.BENCHMARK_RESULT_DIR }}

.github/workflows/tests.yml

+12-4
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,9 @@ jobs:
8989
BUILTIN_SNAPSHOTTER: ${{ matrix.builtin }}
9090
run: make test-pullsecrets
9191

92-
test-cri:
92+
test-cri-containerd:
9393
runs-on: ubuntu-20.04
94-
name: CRIValidation
94+
name: CRIValidationContainerd
9595
strategy:
9696
fail-fast: false
9797
matrix:
@@ -102,11 +102,19 @@ jobs:
102102
builtin: "true"
103103
steps:
104104
- uses: actions/checkout@v2
105-
- name: Varidate the runtime through CRI
105+
- name: Validate containerd through CRI
106106
env:
107107
DOCKER_BUILD_ARGS: ${{ matrix.buildargs }}
108108
BUILTIN_SNAPSHOTTER: ${{ matrix.builtin }}
109-
run: make test-cri
109+
run: make test-cri-containerd
110+
111+
test-cri-cri-o:
112+
runs-on: ubuntu-20.04
113+
name: CRIValidationCRIO
114+
steps:
115+
- uses: actions/checkout@v2
116+
- name: Validate CRI-O through CRI
117+
run: make test-cri-o
110118

111119
#
112120
# Project checks

Dockerfile

+117
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,16 @@ ARG RUNC_VERSION=v1.0.0-rc93
1717
ARG CNI_PLUGINS_VERSION=v0.9.1
1818
ARG NERDCTL_VERSION=0.7.3
1919

20+
ARG PODMAN_VERSION=2314af70bdacf75135a11b48b87dba8e461a43ea
21+
ARG CRIO_VERSION=v1.20.2
22+
ARG CONMON_VERSION=v2.0.26
23+
24+
# TODO: switch them to the official repo after patches are merged
25+
ARG CONTAINERS_IMAGE_REPO=https://github.com/ktock/image
26+
ARG CONTAINERS_IMAGE_VERSION=341204f1ea4c71be8ab802bac539d21e6bd3f869
27+
28+
ARG CRIO_TEST_PAUSE_IMAGE_NAME=k8s.gcr.io/pause:3.5
29+
2030
# Legacy builder that doesn't support TARGETARCH should set this explicitly using --build-arg.
2131
# If TARGETARCH isn't supported by the builder, the default value is "amd64".
2232

@@ -65,6 +75,57 @@ RUN cd $GOPATH/src/github.com/containerd/stargz-snapshotter && \
6575
PREFIX=/out/ GOARCH=${TARGETARCH:-amd64} GO_BUILD_FLAGS=${SNAPSHOTTER_BUILD_FLAGS} make containerd-stargz-grpc && \
6676
PREFIX=/out/ GOARCH=${TARGETARCH:-amd64} GO_BUILD_FLAGS=${CTR_REMOTE_BUILD_FLAGS} make ctr-remote
6777

78+
# Build stargz store
79+
FROM golang-base AS stargz-store-dev
80+
ARG TARGETARCH
81+
ARG GOARM
82+
ARG SNAPSHOTTER_BUILD_FLAGS
83+
ARG CTR_REMOTE_BUILD_FLAGS
84+
COPY . $GOPATH/src/github.com/containerd/stargz-snapshotter
85+
RUN cd $GOPATH/src/github.com/containerd/stargz-snapshotter && \
86+
PREFIX=/out/ GOARCH=${TARGETARCH:-amd64} GO_BUILD_FLAGS=${SNAPSHOTTER_BUILD_FLAGS} make stargz-store
87+
88+
# Build podman
89+
FROM golang-base AS podman-dev
90+
ARG PODMAN_VERSION
91+
ARG CONTAINERS_IMAGE_REPO
92+
ARG CONTAINERS_IMAGE_VERSION
93+
RUN apt-get update -y && apt-get install -y libseccomp-dev libgpgme-dev && \
94+
git clone ${CONTAINERS_IMAGE_REPO} $GOPATH/src/github.com/containers/image && \
95+
cd $GOPATH/src/github.com/containers/image && \
96+
git checkout ${CONTAINERS_IMAGE_VERSION} && \
97+
git clone https://github.com/containers/podman $GOPATH/src/github.com/containers/podman && \
98+
cd $GOPATH/src/github.com/containers/podman && \
99+
git checkout ${PODMAN_VERSION} && \
100+
sed -i "s/-mod=vendor//g" $GOPATH/src/github.com/containers/podman/Makefile && \
101+
echo "replace github.com/containers/image/v5 => /go/src/github.com/containers/image" >> $GOPATH/src/github.com/containers/podman/go.mod && \
102+
make && make install PREFIX=/out/
103+
104+
# Build CRI-O
105+
FROM golang-base AS cri-o-dev
106+
ARG CRIO_VERSION
107+
ARG CONTAINERS_IMAGE_REPO
108+
ARG CONTAINERS_IMAGE_VERSION
109+
RUN apt-get update -y && apt-get install -y libseccomp-dev libgpgme-dev && \
110+
git clone ${CONTAINERS_IMAGE_REPO} $GOPATH/src/github.com/containers/image && \
111+
cd $GOPATH/src/github.com/containers/image && \
112+
git checkout ${CONTAINERS_IMAGE_VERSION} && \
113+
git clone https://github.com/cri-o/cri-o $GOPATH/src/github.com/cri-o/cri-o && \
114+
cd $GOPATH/src/github.com/cri-o/cri-o && \
115+
git checkout ${CRIO_VERSION} && \
116+
echo "replace github.com/containers/image/v5 => /go/src/github.com/containers/image" >> $GOPATH/src/github.com/cri-o/cri-o/go.mod && \
117+
go mod vendor && \
118+
make && make install PREFIX=/out/
119+
120+
# Build conmon
121+
FROM golang-base AS conmon-dev
122+
ARG CONMON_VERSION
123+
RUN apt-get update -y && apt-get install -y gcc git libc6-dev libglib2.0-dev pkg-config make && \
124+
git clone -b ${CONMON_VERSION} --depth 1 \
125+
https://github.com/containers/conmon $GOPATH/src/github.com/containers/conmon && \
126+
cd $GOPATH/src/github.com/containers/conmon && \
127+
mkdir /out/ && make && make install PREFIX=/out/
128+
68129
# Binaries for release
69130
FROM scratch AS release-binaries
70131
COPY --from=snapshotter-dev /out/* /
@@ -98,6 +159,36 @@ COPY --from=runc-dev /out/sbin/* /usr/local/sbin/
98159
COPY --from=snapshotter-dev /out/ctr-remote /usr/local/bin/
99160
RUN ln -s /usr/local/bin/ctr-remote /usr/local/bin/ctr
100161

162+
# Base image which contains podman with stargz-store
163+
FROM golang-base AS podman-base
164+
ARG TARGETARCH
165+
ARG CNI_PLUGINS_VERSION
166+
ARG PODMAN_VERSION
167+
RUN apt-get update -y && apt-get --no-install-recommends install -y fuse libgpgme-dev \
168+
iptables libyajl-dev && \
169+
# Make CNI plugins manipulate iptables instead of nftables
170+
# as this test runs in a Docker container that network is configured with iptables.
171+
# c.f. https://github.com/moby/moby/issues/26824
172+
update-alternatives --set iptables /usr/sbin/iptables-legacy && \
173+
mkdir -p /etc/containers /etc/cni/net.d /opt/cni/bin && \
174+
curl -qsSL https://raw.githubusercontent.com/containers/podman/${PODMAN_VERSION}/cni/87-podman-bridge.conflist | tee /etc/cni/net.d/87-podman-bridge.conflist && \
175+
curl -Ls https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${TARGETARCH:-amd64}-${CNI_PLUGINS_VERSION}.tgz | tar xzv -C /opt/cni/bin
176+
177+
COPY --from=podman-dev /out/bin/* /usr/local/bin/
178+
COPY --from=runc-dev /out/sbin/* /usr/local/sbin/
179+
COPY --from=conmon-dev /out/bin/* /usr/local/bin/
180+
COPY --from=stargz-store-dev /out/* /usr/local/bin/
181+
182+
# Image which can be used as all-in-one single node demo environment
183+
FROM snapshotter-base AS cind
184+
COPY ./script/config/ /
185+
COPY ./script/cind/ /
186+
VOLUME /var/lib/containerd
187+
VOLUME /var/lib/containerd-stargz-grpc
188+
VOLUME /run/containerd-stargz-grpc
189+
ENV CONTAINERD_SNAPSHOTTER=stargz
190+
ENTRYPOINT [ "/entrypoint.sh" ]
191+
101192
# Image which can be used for interactive demo environment
102193
FROM containerd-base AS demo
103194
ARG CNI_PLUGINS_VERSION
@@ -118,6 +209,32 @@ COPY ./script/config/ /
118209
RUN apt-get update -y && apt-get install --no-install-recommends -y fuse
119210
ENTRYPOINT [ "/usr/local/bin/entrypoint", "/sbin/init" ]
120211

212+
# Image for testing CRI-O with Stargz Store.
213+
# NOTE: This cannot be used for the node image of KinD.
214+
FROM ubuntu:20.04 AS crio-stargz-store
215+
ARG CRIO_VERSION
216+
ARG CNI_PLUGINS_VERSION
217+
ARG CRIO_TEST_PAUSE_IMAGE_NAME
218+
RUN apt-get update -y && apt-get install --no-install-recommends -y \
219+
ca-certificates fuse libgpgme-dev libglib2.0-dev curl \
220+
iptables conntrack && \
221+
DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y tzdata && \
222+
# Make CNI plugins manipulate iptables instead of nftables
223+
# as this test runs in a Docker container that network is configured with iptables.
224+
# c.f. https://github.com/moby/moby/issues/26824
225+
update-alternatives --set iptables /usr/sbin/iptables-legacy && \
226+
mkdir -p /opt/cni/bin && \
227+
curl -sSL https://github.com/containernetworking/plugins/releases/download/${CNI_PLUGINS_VERSION}/cni-plugins-linux-${TARGETARCH:-amd64}-${CNI_PLUGINS_VERSION}.tgz | tar xzv -C /opt/cni/bin && \
228+
echo ${CRIO_TEST_PAUSE_IMAGE_NAME} > /pause_name
229+
230+
COPY --from=stargz-store-dev /out/* /usr/local/bin/
231+
COPY --from=cri-o-dev /out/bin/* /usr/local/bin/
232+
COPY --from=runc-dev /out/sbin/* /usr/local/sbin/
233+
COPY --from=conmon-dev /out/bin/* /usr/local/bin/
234+
COPY ./script/cri-o/config/ /
235+
236+
ENTRYPOINT [ "/usr/local/bin/entrypoint", "/bin/bash" ]
237+
121238
# Image which can be used as a node image for KinD
122239
FROM kindest/node:v1.20.0
123240
COPY --from=containerd-dev /out/bin/containerd /out/bin/containerd-shim-runc-v2 /usr/local/bin/

Makefile

+9-3
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ VERSION=$(shell git describe --match 'v[0-9]*' --dirty='.m' --always --tags)
2323
REVISION=$(shell git rev-parse HEAD)$(shell if ! git diff --no-ext-diff --quiet --exit-code; then echo .m; fi)
2424
GO_LD_FLAGS=-ldflags '-s -w -X $(PKG)/version.Version=$(VERSION) -X $(PKG)/version.Revision=$(REVISION) $(GO_EXTRA_LDFLAGS)'
2525

26-
CMD=containerd-stargz-grpc ctr-remote
26+
CMD=containerd-stargz-grpc ctr-remote stargz-store
2727

2828
CMD_BINARIES=$(addprefix $(PREFIX),$(CMD))
2929

@@ -41,6 +41,9 @@ containerd-stargz-grpc: FORCE
4141
ctr-remote: FORCE
4242
GO111MODULE=$(GO111MODULE_VALUE) go build -o $(PREFIX)$@ $(GO_BUILD_FLAGS) $(GO_LD_FLAGS) -v ./cmd/ctr-remote
4343

44+
stargz-store: FORCE
45+
GO111MODULE=$(GO111MODULE_VALUE) go build -o $(PREFIX)$@ $(GO_BUILD_FLAGS) $(GO_LD_FLAGS) -v ./cmd/stargz-store
46+
4447
check:
4548
@echo "$@"
4649
@GO111MODULE=$(GO111MODULE_VALUE) golangci-lint run
@@ -85,5 +88,8 @@ benchmark:
8588
test-pullsecrets:
8689
@./script/pullsecrets/test.sh
8790

88-
test-cri:
89-
@./script/cri/test.sh
91+
test-cri-containerd:
92+
@./script/cri-containerd/test.sh
93+
94+
test-cri-o:
95+
@./script/cri-o/test.sh

0 commit comments

Comments
 (0)