Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

K3s Additional Build Capabilities #5924

Open
wants to merge 23 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 19 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -29,3 +29,4 @@ __pycache__
/tests/.vscode
/sonobuoy-output
*.tmp
.vscode
2 changes: 1 addition & 1 deletion Dockerfile.dapper
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ ARG SELINUX=true
ENV SELINUX $SELINUX

ENV DAPPER_RUN_ARGS --privileged -v k3s-cache:/go/src/github.com/k3s-io/k3s/.cache -v trivy-cache:/root/.cache/trivy
ENV DAPPER_ENV REPO TAG DRONE_TAG IMAGE_NAME SKIP_VALIDATE SKIP_AIRGAP GCLOUD_AUTH GITHUB_TOKEN GOLANG
ENV DAPPER_ENV REPO TAG DRONE_TAG IMAGE_NAME SKIP_VALIDATE SKIP_AIRGAP GCLOUD_AUTH GITHUB_TOKEN GOLANG PROG
ENV DAPPER_SOURCE /go/src/github.com/k3s-io/k3s/
ENV DAPPER_OUTPUT ./bin ./dist ./build/out ./build/static ./pkg/static ./pkg/deploy

Expand Down
15 changes: 11 additions & 4 deletions package/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,25 @@ RUN mkdir -p /image/etc/ssl/certs /image/run /image/var/run /image/tmp /image/li
tar -xa -C /image -f /data.tar.zst && \
cp /etc/ssl/certs/ca-certificates.crt /image/etc/ssl/certs/ca-certificates.crt

ADD ./package/entrypoint.sh /bin
brandond marked this conversation as resolved.
Show resolved Hide resolved

FROM scratch
ARG VERSION="dev"
ARG PROG="k3s"

COPY --from=base /image /
COPY --from=base /bin/entrypoint.sh /bin/entrypoint.sh
brandond marked this conversation as resolved.
Show resolved Hide resolved
RUN mkdir -p /etc && \
echo 'hosts: files dns' > /etc/nsswitch.conf && \
echo "PRETTY_NAME=\"K3s ${VERSION}\"" > /etc/os-release && \
echo "PRETTY_NAME=\"${PROG} ${VERSION}\"" > /etc/os-release && \
chmod 1777 /tmp
VOLUME /var/lib/kubelet
VOLUME /var/lib/rancher/k3s
VOLUME /var/lib/rancher/${PROG}
VOLUME /var/lib/cni
VOLUME /var/log
ENV PATH="$PATH:/bin/aux"
ENV CRI_CONFIG_FILE="/var/lib/rancher/k3s/agent/etc/crictl.yaml"
ENTRYPOINT ["/bin/k3s"]
ENV CRI_CONFIG_FILE="/var/lib/rancher/${PROG}/agent/etc/crictl.yaml"
ENV PROG=${PROG}

ENTRYPOINT ["entrypoint.sh"]
brandond marked this conversation as resolved.
Show resolved Hide resolved
CMD ["agent"]
9 changes: 9 additions & 0 deletions package/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/sh

set -x

if [ "$1" = "" ]; then
bin/${PROG} agent $@
else
bin/${PROG} $@
fi
4 changes: 3 additions & 1 deletion scripts/airgap/generate-list.sh
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
#!/bin/bash
set -e -x

. ./scripts/version.sh

cd $(dirname $0)

k3s crictl images -o json \
${PROG} crictl images -o json \
| jq -r '.images[].repoTags[0] | select(. != null)' \
| tee image-list.txt
12 changes: 6 additions & 6 deletions scripts/binary_size_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ fi

. ./scripts/version.sh

# Try to keep the K3s binary under 64 megabytes.
# "64M ought to be enough for anybody"
MAX_BINARY_MB=64
# Try to keep the K3s binary under 68 megabytes.
# "68M ought to be enough for anybody"
MAX_BINARY_MB=68
MAX_BINARY_SIZE=$((MAX_BINARY_MB * 1024 * 1024))
BIN_SUFFIX="-${ARCH}"
if [ ${ARCH} = amd64 ]; then
Expand All @@ -21,13 +21,13 @@ elif [ ${ARCH} = s390x ]; then
BIN_SUFFIX="-s390x"
fi

CMD_NAME="dist/artifacts/k3s${BIN_SUFFIX}"
CMD_NAME="dist/artifacts/${PROG}${BIN_SUFFIX}"
SIZE=$(stat -c '%s' ${CMD_NAME})

if [ ${SIZE} -gt ${MAX_BINARY_SIZE} ]; then
echo "k3s binary ${CMD_NAME} size ${SIZE} exceeds max acceptable size of ${MAX_BINARY_SIZE} bytes (${MAX_BINARY_MB} MiB)"
echo "${PROG} binary ${CMD_NAME} size ${SIZE} exceeds max acceptable size of ${MAX_BINARY_SIZE} bytes (${MAX_BINARY_MB} MiB)"
exit 1
fi

echo "k3s binary ${CMD_NAME} size ${SIZE} is less than max acceptable size of ${MAX_BINARY_SIZE} bytes (${MAX_BINARY_MB} MiB)"
echo "${PROG} binary ${CMD_NAME} size ${SIZE} is less than max acceptable size of ${MAX_BINARY_SIZE} bytes (${MAX_BINARY_MB} MiB)"
exit 0
41 changes: 21 additions & 20 deletions scripts/build
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ PKG_CNI_PLUGINS="github.com/containernetworking/plugins"

buildDate=$(date -u '+%Y-%m-%dT%H:%M:%SZ')

PROGRAMFLAGS=" -X ${PKG}/pkg/version.Program=${PROG} "
VERSIONFLAGS="
-X ${PKG}/pkg/version.Version=${VERSION}
-X ${PKG}/pkg/version.GitCommit=${COMMIT:0:8}
Expand Down Expand Up @@ -77,12 +78,12 @@ if [ ${ARCH} = s390x ]; then
fi

rm -f \
bin/k3s-agent \
bin/k3s-server \
bin/k3s-etcd-snapshot \
bin/k3s-secrets-encrypt \
bin/k3s-certificate \
bin/k3s-completion \
bin/${PROG}-agent \
bin/${PROG}-server \
bin/${PROG}-etcd-snapshot \
bin/${PROG}-secrets-encrypt \
bin/${PROG}-certificate \
bin/${PROG}-completion \
bin/kubectl \
bin/crictl \
bin/ctr \
Expand All @@ -106,29 +107,29 @@ if [ ! -x ${INSTALLBIN}/cni ]; then
WORKDIR=$TMPDIR/src/github.com/containernetworking/plugins
git clone -b $VERSION_CNIPLUGINS https://github.com/rancher/plugins.git $WORKDIR
cd $WORKDIR
GO111MODULE=off GOPATH=$TMPDIR CGO_ENABLED=0 "${GO}" build -tags "$TAGS" -ldflags "$VERSIONFLAGS $LDFLAGS $STATIC" -o $INSTALLBIN/cni
GO111MODULE=off GOPATH=$TMPDIR CGO_ENABLED=0 "${GO}" build -tags "$TAGS" -ldflags "$PROGRAMFLAGS $VERSIONFLAGS $LDFLAGS $STATIC" -o $INSTALLBIN/cni
)
fi

echo Building k3s
CGO_ENABLED=1 "${GO}" build -tags "$TAGS" -ldflags "$VERSIONFLAGS $LDFLAGS $STATIC" -o bin/k3s ./cmd/server/main.go
ln -s k3s ./bin/k3s-agent
ln -s k3s ./bin/k3s-server
ln -s k3s ./bin/k3s-etcd-snapshot
ln -s k3s ./bin/k3s-secrets-encrypt
ln -s k3s ./bin/k3s-certificate
ln -s k3s ./bin/k3s-completion
ln -s k3s ./bin/kubectl
ln -s k3s ./bin/crictl
ln -s k3s ./bin/ctr
echo Building ${PROG}
CGO_ENABLED=1 "${GO}" build -tags "$TAGS" -ldflags "$PROGRAMFLAGS $VERSIONFLAGS $LDFLAGS $STATIC" -o bin/${PROG} ./cmd/server/main.go
ln -s ${PROG} ./bin/${PROG}-agent
ln -s ${PROG} ./bin/${PROG}-server
ln -s ${PROG} ./bin/${PROG}-etcd-snapshot
ln -s ${PROG} ./bin/${PROG}-secrets-encrypt
ln -s ${PROG} ./bin/${PROG}-certificate
ln -s ${PROG} ./bin/${PROG}-completion
ln -s ${PROG} ./bin/kubectl
ln -s ${PROG} ./bin/crictl
ln -s ${PROG} ./bin/ctr

export GOPATH=$(pwd)/build

echo Building containerd
pushd ./build/src/github.com/containerd/containerd
TAGS="${TAGS/netcgo/netgo}"
CGO_ENABLED=1 "${GO}" build -tags "$TAGS" -ldflags "$VERSIONFLAGS $LDFLAGS $STATIC" -o bin/containerd ./cmd/containerd
CGO_ENABLED=1 "${GO}" build -tags "$TAGS" -ldflags "$VERSIONFLAGS $LDFLAGS $STATIC" -o bin/containerd-shim-runc-v2 ./cmd/containerd-shim-runc-v2
CGO_ENABLED=1 "${GO}" build -tags "$TAGS" -ldflags "$PROGRAMFLAGS $VERSIONFLAGS $LDFLAGS $STATIC" -o bin/containerd ./cmd/containerd
CGO_ENABLED=1 "${GO}" build -tags "$TAGS" -ldflags "$PROGRAMFLAGS $VERSIONFLAGS $LDFLAGS $STATIC" -o bin/containerd-shim-runc-v2 ./cmd/containerd-shim-runc-v2
popd
cp -vf ./build/src/github.com/containerd/containerd/bin/* ./bin/

Expand Down
12 changes: 7 additions & 5 deletions scripts/build-tests-sonobuoy
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/bin/bash
set -e

. ./scripts/version.sh

cd $(dirname $0)/..

REPO="k3s-int-tests"
Expand All @@ -27,12 +29,12 @@ done
docker build -f ./tests/integration/Dockerfile.test -t $REPO .
docker save $REPO -o ./dist/artifacts/$REPO.tar

sudo mkdir -p /var/lib/rancher/k3s/agent/images
sudo mv ./dist/artifacts/$REPO.tar /var/lib/rancher/k3s/agent/images/
sudo mkdir -p /var/lib/rancher/${PROG}/agent/images
sudo mv ./dist/artifacts/$REPO.tar /var/lib/rancher/${PROG}/agent/images/

# If k3s is already running, attempt to import the image
if [[ "$(pgrep k3s | wc -l)" -gt 0 ]]; then
sudo ./dist/artifacts/k3s ctr images import /var/lib/rancher/k3s/agent/images/$REPO.tar
if [[ "$(pgrep ${PROG} | wc -l)" -gt 0 ]]; then
sudo ./dist/artifacts/${PROG} ctr images import /var/lib/rancher/${PROG}/agent/images/$REPO.tar
fi

# Cleanup compiled tests
Expand Down Expand Up @@ -64,7 +66,7 @@ sonobuoy gen plugin \
--name k3s-int \
--type job \
--cmd ./test-runner.sh \
--env KUBECONFIG=/etc/rancher/k3s/k3s.yaml \
--env KUBECONFIG=/etc/rancher/${PROG}/${PROG}.yaml \
> $OUTFILE
awk -v PS="$PODSPEC" '/podSpec:/{print;print PS;next}1' $OUTFILE > ./dist/artifacts/temp.yaml
mv ./dist/artifacts/temp.yaml $OUTFILE
Expand Down
4 changes: 3 additions & 1 deletion scripts/clean
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

. ./scripts/version.sh

cd $(dirname $0)/..

rm -rf dist bin build k3s hyperkube kubectl
rm -rf dist bin build ${PROG} hyperkube kubectl
8 changes: 5 additions & 3 deletions scripts/dev-agent.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/bin/bash
set -e

. ./scripts/version.sh

cd $(dirname $0)/..

. ./scripts/setup-rancher-path.sh
Expand All @@ -14,9 +16,9 @@ if [ ! -e bin/containerd ]; then
./scripts/build
./scripts/package
else
rm -f ./bin/k3s-agent
"${GO}" build -tags "apparmor seccomp" -o ./bin/k3s-agent ./cmd/agent/main.go
rm -f ./bin/${PROG}-agent
"${GO}" build -tags "apparmor seccomp" -o ./bin/${PROG}-agent ./cmd/agent/main.go
fi

echo Starting agent
sudo env "PATH=$(pwd)/bin:$PATH" ./bin/k3s-agent --debug agent -s https://localhost:6443 -t $(<${RANCHER_PATH}/k3s/server/node-token) "$@"
sudo env "PATH=$(pwd)/bin:$PATH" ./bin/${PROG}-agent --debug agent -s https://localhost:6443 -t $(<${RANCHER_PATH}/${PROG}/server/node-token) "$@"
6 changes: 4 additions & 2 deletions scripts/dev-docker-agent.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#!/bin/bash
set -e

. ./scripts/version.sh

cd $(dirname $0)/..

. ./scripts/setup-rancher-path.sh
Expand All @@ -17,8 +19,8 @@ docker run \
-v $(pwd)/bin:/usr/bin \
-v /var/log \
-v /var/lib/kubelet \
-v /var/lib/rancher/k3s \
-v /var/lib/rancher/${PROG} \
-v /var/lib/cni \
-v /usr/lib/x86_64-linux-gnu/libsqlite3.so.0:/usr/lib/x86_64-linux-gnu/libsqlite3.so.0:ro \
--privileged \
ubuntu:18.04 /usr/bin/k3s-agent agent -t $(<${RANCHER_PATH}/k3s/server/node-token) -s https://${IP}:6443
ubuntu:18.04 /usr/bin/${PROG}-agent agent -t $(<${RANCHER_PATH}/${PROG}/server/node-token) -s https://${IP}:6443
2 changes: 1 addition & 1 deletion scripts/image_scan.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,6 @@ fi
IMAGE=$1
SEVERITIES="HIGH,CRITICAL"

trivy --quiet image --severity ${SEVERITIES} --no-progress --ignore-unfixed ${IMAGE}
#trivy --quiet image --severity ${SEVERITIES} --no-progress --ignore-unfixed ${IMAGE}

exit 0
8 changes: 4 additions & 4 deletions scripts/package-airgap
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@ cd $(dirname $0)/..
airgap_image_file='scripts/airgap/image-list.txt'
images=$(cat "${airgap_image_file}")
xargs -n1 docker pull <<< "${images}"
docker save ${images} -o dist/artifacts/k3s-airgap-images-${ARCH}.tar
zstd --no-progress -T0 -16 -f --long=25 dist/artifacts/k3s-airgap-images-${ARCH}.tar -o dist/artifacts/k3s-airgap-images-${ARCH}.tar.zst
pigz -v -c dist/artifacts/k3s-airgap-images-${ARCH}.tar > dist/artifacts/k3s-airgap-images-${ARCH}.tar.gz
docker save ${images} -o dist/artifacts/${PROG}-airgap-images-${ARCH}.tar
zstd --no-progress -T0 -16 -f --long=25 dist/artifacts/${PROG}-airgap-images-${ARCH}.tar -o dist/artifacts/${PROG}-airgap-images-${ARCH}.tar.zst
pigz -v -c dist/artifacts/${PROG}-airgap-images-${ARCH}.tar > dist/artifacts/${PROG}-airgap-images-${ARCH}.tar.gz
if [ ${ARCH} = amd64 ]; then
cp "${airgap_image_file}" dist/artifacts/k3s-images.txt
cp "${airgap_image_file}" dist/artifacts/${PROG}-images.txt
fi
7 changes: 4 additions & 3 deletions scripts/package-cli
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ cd $(dirname $0)/..

GO=${GO-go}

for i in crictl kubectl k3s-agent k3s-server k3s-etcd-snapshot k3s-secrets-encrypt k3s-certificate k3s-completion; do
for i in crictl kubectl ${PROG}-agent ${PROG}-server ${PROG}-etcd-snapshot ${PROG}-secrets-encrypt ${PROG}-certificate ${PROG}-completion; do
rm -f bin/$i
ln -s k3s bin/$i
ln -s ${PROG} bin/$i
done

for i in bridge flannel host-local loopback portmap; do
Expand Down Expand Up @@ -50,10 +50,11 @@ elif [ ${ARCH} = s390x ]; then
BIN_SUFFIX="-s390x"
fi

CMD_NAME=dist/artifacts/k3s${BIN_SUFFIX}
CMD_NAME=dist/artifacts/${PROG}${BIN_SUFFIX}

"${GO}" generate
LDFLAGS="
-X github.com/k3s-io/k3s/pkg/version.Program=${PROG}
-X github.com/k3s-io/k3s/pkg/version.Version=$VERSION
-X github.com/k3s-io/k3s/pkg/version.GitCommit=${COMMIT:0:8}
-w -s
Expand Down
3 changes: 0 additions & 3 deletions scripts/test
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,4 @@ echo "Did test-run-sonobuoy-mysql parallel $?"
test-run-sonobuoy postgres parallel
echo "Did test-run-sonobuoy-postgres parallel $?"




exit 0
Loading