c #22
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Nerdctl | |
on: | |
workflow_dispatch: | |
pull_request: | |
branches: | |
- main | |
paths-ignore: | |
- 'site/**' | |
permissions: | |
contents: read | |
jobs: | |
nerdctl: | |
name: Nerdctl | |
runs-on: ubuntu-22.04 | |
timeout-minutes: 30 | |
strategy: | |
fail-fast: false | |
matrix: | |
ipFamily: [ipv4, ipv6] | |
deployment: [singleNode, multiNode] | |
exclude: | |
- ipFamily: ipv6 | |
env: | |
JOB_NAME: "nerdctl-${{ matrix.deployment }}-${{ matrix.ipFamily }}" | |
IP_FAMILY: ${{ matrix.ipFamily }} | |
NERDCTL_VERSION: "1.7.4" | |
KIND_EXPERIMENTAL_PROVIDER: "nerdctl" | |
steps: | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 | |
with: | |
fetch-depth: 0 | |
- name: Install kind | |
run: sudo make install INSTALL_DIR=/usr/local/bin | |
- name: Install kubectl | |
run: | | |
curl -LO https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl | |
chmod +x ./kubectl | |
sudo mv ./kubectl /usr/local/bin/kubectl | |
- name: Enable ipv4 and ipv6 forwarding | |
run: | | |
sudo sysctl -w net.ipv6.conf.all.forwarding=1 | |
sudo sysctl -w net.ipv4.ip_forward=1 | |
- name: Install nerdctl | |
run: | | |
# Remove Docker and Podman | |
sudo systemctl is-active --quiet docker.service || systemctl stop docker.service | |
sudo apt-get remove -y docker-ce docker-ce-cli podman containerd.io | |
sudo rm -rf /etc/systemd/system/containerd.service # clean up the cotnainerd systemd file | |
# Install nerdctl full package | |
sudo curl -sSL https://github.com/containerd/nerdctl/releases/download/v${NERDCTL_VERSION}/nerdctl-full-${NERDCTL_VERSION}-linux-amd64.tar.gz | sudo tar -xvz -C /usr/local | |
# Start Containerd | |
sudo systemctl daemon-reload | |
sudo systemctl enable --now containerd | |
# Show Versions | |
sudo ctr version | |
sudo nerdctl version | |
- name: Setup upterm session | |
uses: lhotari/action-upterm@v1 | |
- name: Create single node cluster | |
if: ${{ matrix.deployment == 'singleNode' }} | |
run: | | |
cat <<EOF | sudo /usr/local/bin/kind create cluster -v7 --wait 1m --retain --config=- | |
kind: Cluster | |
apiVersion: kind.x-k8s.io/v1alpha4 | |
networking: | |
ipFamily: ${IP_FAMILY} | |
EOF | |
- name: Create multi node cluster | |
if: ${{ matrix.deployment == 'multiNode' }} | |
run: | | |
cat <<EOF | sudo /usr/local/bin/kind create cluster -v7 --wait 1m --retain --config=- | |
kind: Cluster | |
apiVersion: kind.x-k8s.io/v1alpha4 | |
networking: | |
ipFamily: ${IP_FAMILY} | |
nodes: | |
- role: control-plane | |
- role: worker | |
- role: worker | |
EOF | |
- name: Get Cluster status | |
run: | | |
# wait network is ready | |
sudo kubectl wait --for=condition=ready pods --namespace=kube-system -l k8s-app=kube-dns | |
sudo kubectl get nodes -o wide | |
sudo kubectl get pods -A | |
# TODO: similar to podman, this fails because the imageID() code in KinD is hardcoded to run a docker command | |
# need to solve this code before this test will work properly | |
- name: Load nerdctl image | |
run: | | |
sudo nerdctl pull busybox | |
sudo /usr/local/bin/kind load docker-image busybox | |
continue-on-error: true | |
- name: Export logs | |
if: always() | |
run: | | |
sudo cat /etc/cni/net.d/* | |
sudo mkdir -p /tmp/kind/logs | |
sudo /usr/local/bin/kind export logs /tmp/kind/logs | |
sudo chown -R $USER:$USER /tmp/kind/logs | |
- name: Upload logs | |
if: always() | |
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 | |
with: | |
name: kind-logs-${{ env.JOB_NAME }}-${{ github.run_id }} | |
path: /tmp/kind/logs | |
- name: Delete cluster | |
run: sudo /usr/local/bin/kind delete cluster |