From d0db9eab9a31a3c7d0a2918fc7370688bead9149 Mon Sep 17 00:00:00 2001 From: pengli Date: Wed, 15 Apr 2020 16:17:41 +0800 Subject: [PATCH] Add Kubectl sample Use a image with `kubectl` installed, we can setup `step` of `task` in tekton to create arbitrary rsource of kubernates. --- kubectl/README.md | 51 +++++++++++++++++++++++++++++++++ kubectl/clusterrolebinding.yaml | 12 ++++++++ kubectl/kubectl-deploy.yaml | 18 ++++++++++++ kubectl/taskrun.yaml | 21 ++++++++++++++ 4 files changed, 102 insertions(+) create mode 100644 kubectl/README.md create mode 100644 kubectl/clusterrolebinding.yaml create mode 100644 kubectl/kubectl-deploy.yaml create mode 100644 kubectl/taskrun.yaml diff --git a/kubectl/README.md b/kubectl/README.md new file mode 100644 index 0000000000..bc6d50a60c --- /dev/null +++ b/kubectl/README.md @@ -0,0 +1,51 @@ +# Kubectl + +This Task deploys (or delete) a Kubernates resource (pod). It uses +[`kubectl`](https://kubernetes.io/zh/docs/reference/kubectl/kubectl/) for that. + +## Install the Task + +``` +kubectl apply -f https://raw.githubusercontent.com/tektoncd/catalog/master/kubectl/kubectl-deploy.yaml +``` + +## Install ClusterRolebinding + +``` +kubectl apply -f https://raw.githubusercontent.com/tektoncd/catalog/master/kubectl/clusterrolebinding.yaml +``` + +## Inputs + +### Parameters + +* **manifest:**: The content of the resource to deploy + +## Usage + +This TaskRun runs the Task to deploy the given Kubernetes resource. + +``` +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: + name: kubectl-deploy-pod +spec: + taskRef: + name: kubectl-deploy-pod + inputs: + params: + - name: manifest + value: | + apiVersion: v1 + kind: Pod + metadata: + name: myapp-pod + labels: + app: myapp + spec: + containers: + - name: myapp-container + image: docker + command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] +``` diff --git a/kubectl/clusterrolebinding.yaml b/kubectl/clusterrolebinding.yaml new file mode 100644 index 0000000000..2fec733cb5 --- /dev/null +++ b/kubectl/clusterrolebinding.yaml @@ -0,0 +1,12 @@ +apiVersion: rbac.authorization.k8s.io/v1beta1 +kind: ClusterRoleBinding +metadata: + name: default-admin +subjects: + - kind: ServiceAccount + name: default + namespace: default +roleRef: + kind: ClusterRole + name: cluster-admin + apiGroup: rbac.authorization.k8s.io diff --git a/kubectl/kubectl-deploy.yaml b/kubectl/kubectl-deploy.yaml new file mode 100644 index 0000000000..c2bd115237 --- /dev/null +++ b/kubectl/kubectl-deploy.yaml @@ -0,0 +1,18 @@ +apiVersion: tekton.dev/v1beta1 +kind: Task +metadata: + name: kubectl-deploy-pod + namespace: default +spec: + params: + - name: manifest + description: Content of the resource to deploy + - name: image + default: gcr.io/cloud-builders/kubectl # it is huge + description: Kubectl wrapper image + steps: + - name: kubeconfig + image: $(inputs.params.image) + script: | + echo "$(inputs.params.manifest)" > /tmp/resource.yaml + kubectl create -f /tmp/resource.yaml diff --git a/kubectl/taskrun.yaml b/kubectl/taskrun.yaml new file mode 100644 index 0000000000..90b2a0c7fe --- /dev/null +++ b/kubectl/taskrun.yaml @@ -0,0 +1,21 @@ +apiVersion: tekton.dev/v1beta1 +kind: TaskRun +metadata: + name: kubectl-deploy-pod +spec: + taskRef: + name: kubectl-deploy-pod + params: + - name: manifest + value: | + apiVersion: v1 + kind: Pod + metadata: + name: myapp-pod + labels: + app: myapp + spec: + containers: + - name: myapp-container + image: docker + command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600']