From 5db1ba5710d71eae441aec203e3e8d3522ff714d Mon Sep 17 00:00:00 2001 From: Eric Ernst Date: Mon, 7 Jan 2019 22:15:39 +0000 Subject: [PATCH] kata-deploy: add support for runtime class, firecracker Simplify the yaml and combine the prior scripts. The resulting script, kata-deploy.sh, is used for install and configuration and removal for CRI-O and containerd. While this could be used standalone outside of daemonsets, today it will sleep infinity after processing the request, since it is assumed to be called by a daemon. By checking the CRI runtime within the script itself, we no longer need to support many daemonsets for deploy - just a single. Still requires a seperate cleanup daemonset (for restarting the CRI runtime), and an RBAC. Verified with CRI-O -- containerd testing WIP Throwing this up now for feedback since I do not bash good. Signed-off-by: Eric Ernst Signed-off-by: Saikrishna Edupuganti --- kata-deploy/Dockerfile | 6 +- kata-deploy/kata-cleanup.yaml | 9 +- kata-deploy/kata-deploy.yaml | 125 +----------- .../scripts/install-kata-containerd.sh | 26 --- kata-deploy/scripts/install-kata-crio.sh | 14 -- kata-deploy/scripts/kata-deploy.sh | 178 ++++++++++++++++++ kata-deploy/scripts/remove-kata-containerd.sh | 8 - kata-deploy/scripts/remove-kata-crio.sh | 4 - 8 files changed, 192 insertions(+), 178 deletions(-) delete mode 100755 kata-deploy/scripts/install-kata-containerd.sh delete mode 100755 kata-deploy/scripts/install-kata-crio.sh create mode 100755 kata-deploy/scripts/kata-deploy.sh delete mode 100755 kata-deploy/scripts/remove-kata-containerd.sh delete mode 100755 kata-deploy/scripts/remove-kata-crio.sh diff --git a/kata-deploy/Dockerfile b/kata-deploy/Dockerfile index bc1e046c26..940407a432 100644 --- a/kata-deploy/Dockerfile +++ b/kata-deploy/Dockerfile @@ -1,9 +1,9 @@ FROM centos/systemd -ARG KATA_VER=1.4.0 +ARG KATA_VER ARG ARCH=x86_64 +ARG KUBE_ARCH=amd64 ARG KATA_URL=https://github.com/kata-containers/runtime/releases/download/${KATA_VER} ARG KATA_FILE=kata-static-${KATA_VER}-${ARCH}.tar.xz -ARG KUBECTL_VER=v1.10.2 RUN \ curl -sOL ${KATA_URL}/${KATA_FILE} && \ @@ -12,7 +12,7 @@ tar xvf ${KATA_FILE} -C /opt/kata-artifacts/ && \ rm ${KATA_FILE} RUN \ -curl -s -o /bin/kubectl https://storage.googleapis.com/kubernetes-release/release/${KUBECTL_VER}/bin/linux/amd64/kubectl && \ +curl -Lso /bin/kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/${KUBE_ARCH}/kubectl && \ chmod +x /bin/kubectl COPY scripts /opt/kata-artifacts/scripts diff --git a/kata-deploy/kata-cleanup.yaml b/kata-deploy/kata-cleanup.yaml index 92b75d9efe..7f7308424b 100644 --- a/kata-deploy/kata-cleanup.yaml +++ b/kata-deploy/kata-cleanup.yaml @@ -20,14 +20,7 @@ spec: - name: kube-kata-cleanup image: katadocker/kata-deploy imagePullPolicy: Always - command: [ "sh", "-c" ] - args: - - kubectl label node $NODE_NAME kata-containers.io/container-runtime- kata-containers.io/kata-runtime-; - systemctl daemon-reload; - systemctl restart containerd; - systemctl restart crio; - systemctl restart kubelet; - sleep infinity; + command: [ "bash", "-c", "/opt/kata-artifacts/scripts/kata-deploy.sh", "reset" ] env: - name: NODE_NAME valueFrom: diff --git a/kata-deploy/kata-deploy.yaml b/kata-deploy/kata-deploy.yaml index f618784fe4..a30c93a5e6 100644 --- a/kata-deploy/kata-deploy.yaml +++ b/kata-deploy/kata-deploy.yaml @@ -2,71 +2,27 @@ apiVersion: apps/v1 kind: DaemonSet metadata: - name: kubelet-runtime-labeler + name: kata-deploy namespace: kube-system spec: selector: matchLabels: - name: kubelet-runtime-labeler + name: kata-deploy template: metadata: labels: - name: kubelet-runtime-labeler + name: kata-deploy spec: serviceAccountName: kata-label-node containers: - - name: kubelet-runtime-labeler-pod - image: katadocker/kata-deploy - imagePullPolicy: Always - command: [ "sh", "-c" ] - args: - - printenv NODE_NAME; - kubectl get node $NODE_NAME --show-labels; - kubectl label node $NODE_NAME kata-containers.io/container-runtime=$(kubectl describe node $NODE_NAME | awk -F'[:]' '/Container Runtime Version/ {print $2}' | tr -d ' '); - kubectl get node $NODE_NAME --show-labels; - sleep infinity; - env: - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - securityContext: - privileged: false - updateStrategy: - rollingUpdate: - maxUnavailable: 1 - type: RollingUpdate ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kubelet-cri-o-kata - namespace: kube-system -spec: - selector: - matchLabels: - name: kubelet-cri-o-kata - template: - metadata: - labels: - name: kubelet-cri-o-kata - spec: - serviceAccountName: kata-label-node - nodeSelector: - kata-containers.io/container-runtime: cri-o - containers: - name: kube-kata image: katadocker/kata-deploy imagePullPolicy: Always lifecycle: preStop: exec: - command: ["sh", "-c", "/opt/kata-artifacts/scripts/remove-kata-crio.sh && kubectl label node $NODE_NAME --overwrite kata-containers.io/kata-runtime=cleanup"] - command: [ "sh", "-ce" ] - args: - - /opt/kata-artifacts/scripts/install-kata-crio.sh && kubectl label node $NODE_NAME kata-containers.io/kata-runtime=true; - kubectl get node $NODE_NAME --show-labels; - sleep infinity; + command: ["bash", "-c", "/opt/kata-artifacts/scripts/kata-deploy.sh", "cleanup"] + command: [ "bash", "-c", "/opt/kata-artifacts/scripts/kata-deploy.sh", "install" ] env: - name: NODE_NAME valueFrom: @@ -77,6 +33,8 @@ spec: volumeMounts: - name: crio-conf mountPath: /etc/crio/ + - name: containerd-conf + mountPath: /etc/containerd/ - name: kata-artifacts mountPath: /opt/kata/ - name: dbus @@ -87,6 +45,9 @@ spec: - name: crio-conf hostPath: path: /etc/crio/ + - name: containerd-conf + hostPath: + path: /etc/containerd/ - name: kata-artifacts hostPath: path: /opt/kata/ @@ -101,69 +62,3 @@ spec: rollingUpdate: maxUnavailable: 1 type: RollingUpdate ---- -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: kubelet-cri-containerd-kata - namespace: kube-system -spec: - selector: - matchLabels: - name: kubelet-cri-containerd-kata - template: - metadata: - labels: - name: kubelet-cri-containerd-kata - spec: - serviceAccountName: kata-label-node - nodeSelector: - kata-containers.io/container-runtime: containerd - containers: - - name: kube-kata - image: katadocker/kata-deploy - imagePullPolicy: Always - lifecycle: - preStop: - exec: - command: ["sh", "-c", "/opt/kata-artifacts/scripts/remove-kata-containerd.sh && kubectl label node $NODE_NAME --overwrite kata-containers.io/kata-runtime=cleanup"] - command: [ "sh", "-c" ] - args: - - /opt/kata-artifacts/scripts/install-kata-containerd.sh && kubectl label node $NODE_NAME kata-containers.io/kata-runtime=true; - kubectl get node $NODE_NAME --show-labels; - sleep infinity; - env: - - name: NODE_NAME - valueFrom: - fieldRef: - fieldPath: spec.nodeName - securityContext: - privileged: false - volumeMounts: - - name: containerd-conf - mountPath: /etc/containerd/ - - name: kata-artifacts - mountPath: /opt/kata/ - - name: dbus - mountPath: /var/run/dbus - - name: systemd - mountPath: /run/systemd - volumes: - - name: containerd-conf - hostPath: - path: /etc/containerd/ - type: DirectoryOrCreate - - name: kata-artifacts - hostPath: - path: /opt/kata/ - type: DirectoryOrCreate - - name: dbus - hostPath: - path: /var/run/dbus - - name: systemd - hostPath: - path: /run/systemd - updateStrategy: - rollingUpdate: - maxUnavailable: 1 - type: RollingUpdate diff --git a/kata-deploy/scripts/install-kata-containerd.sh b/kata-deploy/scripts/install-kata-containerd.sh deleted file mode 100755 index 085b83971b..0000000000 --- a/kata-deploy/scripts/install-kata-containerd.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh - -echo "copying kata artifacts onto host" -cp -R /opt/kata-artifacts/opt/kata/* /opt/kata/ -chmod +x /opt/kata/bin/* - -# Configure containerd to use Kata: -echo "create containerd configuration for Kata" -mkdir -p /etc/containerd/ - -if [ -f /etc/containerd/config.toml ]; then - cp /etc/containerd/config.toml /etc/containerd/config.toml.bak -fi - -cat <&2 + exit 1 +} + +function print_usage() { + echo "Usage: $0 [install/cleanup/reset]" +} + +function get_container_runtime() { + local runtime=$(kubectl describe node $NODE_NAME) + if [ "$?" -ne 0 ]; then + die "invalid node name" + fi + echo "$runtime" | awk -F'[:]' '/Container Runtime Version/ {print $2}' | tr -d ' ' +} + +function install_artifacts() { + echo "copying kata artifacts onto host" + cp -a /opt/kata-artifacts/opt/kata/* /opt/kata/ + chmod +x /opt/kata/bin/* +} + +function configure_cri_runtime() { + case $1 in + crio) + configure_crio + ;; + containerd) + configure_containerd + ;; + esac + systemctl daemon-reload + systemctl restart $1 +} + +function configure_crio() { + # Configure crio to use Kata: + echo "Add Kata Containers as a supported runtime for CRIO:" + + # backup the CRIO.conf only if a backup doesn't already exist (don't override original) + cp -n "$crio_conf_file" "$crio_conf_file_backup" + + cat <