Skip to content

Commit

Permalink
add k3s
Browse files Browse the repository at this point in the history
  • Loading branch information
muicoder committed Sep 12, 2023
1 parent 176bbab commit fafcf4c
Show file tree
Hide file tree
Showing 11 changed files with 312 additions and 37 deletions.
43 changes: 31 additions & 12 deletions .github/scripts/kubernetes.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ readonly ERR_CODE=127

readonly ARCH=${arch?}
readonly CRI_TYPE=${criType?}
readonly KUBE_TYPE=${kubeType:-k8s}
readonly KUBE=${kubeVersion?}
readonly SEALOS=${sealoslatest?}

Expand All @@ -25,7 +26,7 @@ mkdir -p "$ROOT" "$PATCH"

cp -a "$CRI_TYPE"/* "$ROOT"
cp -a registry/* "$ROOT"
cp -a k8s/* "$ROOT"
cp -a "$KUBE_TYPE"/* "$ROOT"

# debug for sealos run
{
Expand Down Expand Up @@ -56,7 +57,7 @@ else
fi

# crictl helm kubeadm,kubectl,kubelet conntrack registry and cri(kubelet)
MOUNT_KUBE=$(sudo buildah mount "$(sudo buildah from "$IMAGE_CACHE_NAME:kubernetes-v$KUBE-$ARCH")")
MOUNT_KUBE=$(sudo buildah mount "$(sudo buildah from "$IMAGE_CACHE_NAME:kubernetes-v${KUBE%+*}-$ARCH")")
MOUNT_CRIO=$(sudo buildah mount "$(sudo buildah from "$IMAGE_CACHE_NAME:cri-v$KUBE_XY-$ARCH")")
MOUNT_TOOLS=$(sudo buildah mount "$(sudo buildah from "$IMAGE_CACHE_NAME:tools-$ARCH")")
sudo tar -xzf "$MOUNT_CRIO"/cri/crictl.tar.gz -C bin/
Expand Down Expand Up @@ -92,6 +93,10 @@ docker)
esac
;;
esac
if grep k3s <<<"$KUBE"; then
IMAGE_KUBE=k3s
rm -f bin/crictl cri/cri-containerd.tar.gz
fi

# define ImageTag for kube
if [[ "${SEALOS//./}" =~ ^[0-9]+$ ]] && [[ -z "$sealosPatch" ]]; then
Expand All @@ -100,12 +105,12 @@ if [[ "${SEALOS//./}" =~ ^[0-9]+$ ]] && [[ -z "$sealosPatch" ]]; then
until curl -sL "https://api.github.com/repos/labring/sealos/releases/latest"; do sleep 3; done | grep tarball_url | awk -F\" '{print $(NF-1)}' | awk -F/ '{print $NF}' | cut -dv -f2
)" ]]; then
IMAGE_PUSH_NAME=(
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v$KUBE-$ARCH"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v$KUBE-$SEALOS-$ARCH"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%+*}-$ARCH"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%+*}-$SEALOS-$ARCH"
)
else
IMAGE_PUSH_NAME=(
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v$KUBE-$SEALOS-$ARCH"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%+*}-$SEALOS-$ARCH"
)
fi
else
Expand All @@ -130,25 +135,39 @@ echo "$ipvsImage" >images/shim/LvscareImageList

# update Kubefile
pauseImage=$(sudo grep /pause: "$MOUNT_KUBE/images/shim/DefaultImageList")
# shellcheck disable=SC2002
cat Kubefile |
sed -E "s#^FROM .+#FROM $IMAGE_CACHE_NAME:kubernetes-v$KUBE-$ARCH#" >"Kubefile.$(uname)"
mv -fv "Kubefile.$(uname)" Kubefile
if grep k3s <<<"$KUBE"; then
case $ARCH in
amd64)
readonly K3S_DL="https://github.com/k3s-io/k3s/releases/download/v$KUBE/k3s"
;;
arm64)
readonly K3S_DL="https://github.com/k3s-io/k3s/releases/download/v$KUBE/k3s-$ARCH"
;;
esac
curl -fsSLo bin/k3s "$K3S_DL"
chmod a+x bin/k3s
curl -fsSL "https://github.com/k3s-io/k3s/releases/download/v$KUBE/k3s-images.txt" | sed "/pause:/d" >images/shim/DefaultImageList
echo "$pauseImage" >>images/shim/DefaultImageList
else
sed -E "s#^FROM .+#FROM $IMAGE_CACHE_NAME:kubernetes-v${KUBE%+*}-$ARCH#" Kubefile >"Kubefile.$(uname)"
mv -fv "Kubefile.$(uname)" Kubefile
fi

#### building ###
IMAGE_BUILD="$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:build-$(date +%s)"
find . -type f -exec file {} \; | grep -E "(executable,|/ld-)" | awk -F: '{print $1}' | grep -vE "\.so" | while IFS='' read -r elf; do echo "${elf}"; done | xargs chmod a+x
tree -L 5
# shellcheck disable=SC2046
sudo sealos build $(
cat <<EOF | while read -r kv; do echo --label=$kv; done | xargs
cat <<EOF | while read -r kv; do echo "--label $kv"; done | xargs
sealos.io.type=rootfs
sealos.io.version=v1beta1
version=v$KUBE
version=v${KUBE%+*}
image=$ipvsImage
EOF
) $(
cat <<EOF | while read -r kv; do echo --env=$kv; done | xargs
cat <<EOF | while read -r kv; do echo "--env $kv"; done | xargs
defaultVIP=10.103.97.2
sandboxImage=${pauseImage#*/}
EOF
) -t "$IMAGE_BUILD" --platform "linux/$ARCH" .
Expand Down
19 changes: 11 additions & 8 deletions .github/scripts/manifest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,24 +55,27 @@ docker)
IMAGE_KUBE=kubernetes-docker
;;
esac
if grep k3s <<<"$KUBE"; then
IMAGE_KUBE=k3s
fi

if ! [[ "$SEALOS" =~ ^[0-9\.]+[0-9]$ ]] || [[ -n "$sealosPatch" ]]; then
IMAGE_TAGS="v${KUBE%.*}-amd64,v${KUBE%.*}-arm64"
IMAGE_PUSH_NAME=(
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%.*}"
)
else
IMAGE_TAGS="v$KUBE-$SEALOS-amd64,v$KUBE-$SEALOS-arm64"
IMAGE_TAGS="v${KUBE%+*}-$SEALOS-amd64,v${KUBE%+*}-$SEALOS-arm64"
if [[ "$SEALOS" == "$(
until curl -sL "https://api.github.com/repos/labring/sealos/releases/latest"; do sleep 3; done | grep tarball_url | awk -F\" '{print $(NF-1)}' | awk -F/ '{print $NF}' | cut -dv -f2
)" ]]; then
IMAGE_PUSH_NAME=(
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v$KUBE"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v$KUBE-$SEALOS"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%+*}"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%+*}-$SEALOS"
)
else
IMAGE_PUSH_NAME=(
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v$KUBE-$SEALOS"
"$IMAGE_HUB_REGISTRY/$IMAGE_HUB_REPO/$IMAGE_KUBE:v${KUBE%+*}-$SEALOS"
)
fi
fi
Expand All @@ -81,11 +84,11 @@ sudo buildah login -u "$IMAGE_HUB_USERNAME" -p "$IMAGE_HUB_PASSWORD" "$IMAGE_HUB
for IMAGE_NAME in "${IMAGE_PUSH_NAME[@]}"; do
if echo "$IMAGE_TAGS" | sed "s~,~\n~g" | while read -r tag; do
echo "${IMAGE_NAME%:*}:$tag"
done | xargs sudo buildah manifest create --all "mf:$KUBE-$SEALOS"; then
if [[ $(sudo buildah inspect "mf:$KUBE-$SEALOS" | yq .manifests[].platform.architecture | uniq | grep 64 -c) -eq 2 ]]; then
sudo buildah manifest push --rm --all "mf:$KUBE-$SEALOS" "docker://$IMAGE_NAME" && echo "$IMAGE_NAME push success"
done | xargs sudo buildah manifest create --all "mf:${KUBE%+*}-$SEALOS"; then
if [[ $(sudo buildah inspect "mf:${KUBE%+*}-$SEALOS" | yq .manifests[].platform.architecture | uniq | grep 64 -c) -eq 2 ]]; then
sudo buildah manifest push --rm --all "mf:${KUBE%+*}-$SEALOS" "docker://$IMAGE_NAME" && echo "$IMAGE_NAME push success"
else
sudo buildah manifest inspect "mf:$KUBE-$SEALOS" | yq -CP
sudo buildah manifest inspect "mf:${KUBE%+*}-$SEALOS" | yq -CP
echo "ERROR::TARGETARCH for sealos build"
sudo buildah images
exit $ERR_CODE
Expand Down
7 changes: 7 additions & 0 deletions .github/scripts/versions/versions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
set -e

readonly CRI_TYPE=${criType?}
readonly KUBE_TYPE=${kubeType:-k8s}

readonly IMAGE_HUB_REGISTRY=${registry:-}
readonly IMAGE_HUB_REPO=${repo?}
Expand Down Expand Up @@ -66,6 +67,12 @@ for file in $(pwd)/.github/versions/${part:-*}/CHANGELOG*; do
until curl -sL "https://github.com/kubernetes/kubernetes/raw/master/CHANGELOG/$K8S_MD"; do sleep 3; done |
grep -E '^- \[v[0-9\.]+\]' | awk '{print $2}' | awk -F\[ '{print $2}' | awk -F\] '{print $1}' >".versions/$K8S_MD.cached"
head -n 1 ".versions/$K8S_MD.cached" >".versions/$K8S_MD.latest"
case $KUBE_TYPE in
k3s)
git ls-remote --refs --sort="-version:refname" --tags "https://github.com/k3s-io/k3s.git" | cut -d/ -f3- | grep -E "^$(cat ".versions/$K8S_MD.latest")\+k3s[0-9]$" >".versions/$K8S_MD.cached"
cp ".versions/$K8S_MD.cached" ".versions/$K8S_MD.latest"
;;
esac
cat ".versions/$K8S_MD.cached"
)
[[ -s ".versions/$K8S_MD" ]] || cp ".versions/$K8S_MD.latest" ".versions/$K8S_MD"
Expand Down
7 changes: 7 additions & 0 deletions .github/scripts/versions/versions_arch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
set -e

readonly CRI_TYPE=${criType?}
readonly KUBE_TYPE=${kubeType:-k8s}

readonly IMAGE_HUB_REGISTRY=${registry:-}
readonly IMAGE_HUB_REPO=${repo?}
Expand Down Expand Up @@ -66,6 +67,12 @@ for file in $(pwd)/.github/versions/${part:-*}/CHANGELOG*; do
until curl -sL "https://github.com/kubernetes/kubernetes/raw/master/CHANGELOG/$K8S_MD"; do sleep 3; done |
grep -E '^- \[v[0-9\.]+\]' | awk '{print $2}' | awk -F\[ '{print $2}' | awk -F\] '{print $1}' >".versions/$K8S_MD.cached"
head -n 1 ".versions/$K8S_MD.cached" >".versions/$K8S_MD.latest"
case $KUBE_TYPE in
k3s)
git ls-remote --refs --sort="-version:refname" --tags "https://github.com/k3s-io/k3s.git" | cut -d/ -f3- | grep -E "^$(cat ".versions/$K8S_MD.latest")\+k3s[0-9]$" >".versions/$K8S_MD.cached"
cp ".versions/$K8S_MD.cached" ".versions/$K8S_MD.latest"
;;
esac
cat ".versions/$K8S_MD.cached"
)
[[ -s ".versions/$K8S_MD" ]] || cp ".versions/$K8S_MD.latest" ".versions/$K8S_MD"
Expand Down
127 changes: 127 additions & 0 deletions .github/workflows/autobuild-k3s-containerd-part3.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
name: containerd for k3s 1.24-25
on:
workflow_dispatch:
inputs:
sealosPatch:
description: 'sealos patch image for development.'
required: true
default: ghcr.io/labring/sealos-patch:latest
issue_comment:
types:
- created
env:
part: 3
allBuild: true
registry: ${{ vars.D_REGISTRY_NAME }}
repo: ${{ vars.D_REGISTRY_REPOSITORY }}
sealosPatch: ${{ github.event.inputs.sealosPatch }}
criType: containerd
kubeType: k3s
jobs:
resolve-issue-sealoslatest:
if: startswith(github.event.comment.body, '/kube') || startswith(github.event.comment.body, '/containerd') || startswith(github.event.comment.body, '/single_part3') || startswith(github.event.comment.body, '/single_containerd_part3') || contains(github.event.inputs.sealosPatch, 'sealos')
runs-on: ubuntu-20.04
outputs:
sealoslatest: ${{ steps.set-sealoslatest.outputs.sealoslatest }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set sealos LatestVersion
id: set-sealoslatest
run: |
export commentbody="${{github.event.comment.body}}"
.github/scripts/versions/versions_sealos.sh
resolve-versions-arch:
runs-on: ubuntu-20.04
needs:
- resolve-issue-sealoslatest
env:
sealoslatest: ${{ needs.resolve-issue-sealoslatest.outputs.sealoslatest }}
outputs:
matrix: ${{ steps.set-versions.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Resolve Versions
id: set-versions
run: .github/scripts/versions/versions_arch.sh
resolve-versions:
runs-on: ubuntu-20.04
needs:
- resolve-issue-sealoslatest
env:
sealoslatest: ${{ needs.resolve-issue-sealoslatest.outputs.sealoslatest }}
outputs:
matrix: ${{ steps.set-versions.outputs.matrix }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Resolve Versions
id: set-versions
run: .github/scripts/versions/versions.sh
build-images:
name: building
needs:
- resolve-issue-sealoslatest
- resolve-versions-arch
runs-on: ubuntu-20.04
env:
sealoslatest: ${{ needs.resolve-issue-sealoslatest.outputs.sealoslatest }}
strategy:
matrix: ${{ fromJson(needs.resolve-versions-arch.outputs.matrix) }}
steps:
- name: Checkout
uses: actions/checkout@v3

- name: Download tools and sealos
run: .github/scripts/download.sh

- name: Auto build image
env:
username: ${{ vars.D_REGISTRY_REPOSITORY }}
password: ${{ secrets.D_REGISTRY_TOKEN }}
arch: ${{ matrix.arch }}
kubeVersion: ${{ matrix.version }}
run: .github/scripts/kubernetes.sh

build_manifest:
needs:
- resolve-issue-sealoslatest
- resolve-versions
- build-images
name: manifest
env:
sealoslatest: ${{ needs.resolve-issue-sealoslatest.outputs.sealoslatest }}
strategy:
matrix: ${{ fromJson(needs.resolve-versions.outputs.matrix) }}
runs-on: ubuntu-20.04
permissions:
issues: write
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download tools and sealos
run: .github/scripts/download.sh
- name: Manifest Image
env:
username: ${{ vars.D_REGISTRY_REPOSITORY }}
password: ${{ secrets.D_REGISTRY_TOKEN }}
version: ${{ matrix.version }}-${{ env.sealoslatest }}
run: .github/scripts/manifest.sh
add-tips:
if: contains(github.event.comment.body, 'imagebuild')
needs:
- build_manifest
name: Auto add tips
runs-on: ubuntu-20.04
permissions:
issues: write
steps:
- name: Success Commit
uses: peter-evans/create-or-update-comment@v1
with:
issue-number: ${{ github.event.issue.number }}
body: |
� says: Hooray! The action autobuild-k8s-containerd-part3 has been completed successfully. �
See: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}
Loading

0 comments on commit fafcf4c

Please sign in to comment.