It is how to run simple batch in kubernetes yaml (helloworld.yaml):
...
image: "ubuntu:14.04"
command: ["/bin/echo", "hello", "world"]
...
In Kubernetes i can deploy that like this:
$ kubectl create -f helloworld.yaml
Suppose i have a batch script like this (script.sh):
#!/bin/bash
echo "Please wait....";
sleep 5
Is there way to include the script.sh into kubectl create -f
so it can run the script. Suppose now helloworld.yaml edited like this:
...
image: "ubuntu:14.04"
command: ["/bin/bash", "./script.sh"]
...
Define Commands and Arguments for a Kubernetes Pod In order to define an argument within a container, we can make use of the command field. The moment we define commands, we would be needing arguments to be passed to it. We can pass these arguments to the command using the args field.
I'm using this approach in OpenShift, so it should be applicable in Kubernetes as well.
Try to put your script into a configmap key/value, mount this configmap as a volume and run the script from the volume.
apiVersion: batch/v1 kind: Job metadata: name: hello-world-job spec: parallelism: 1 completions: 1 template: metadata: name: hello-world-job spec: volumes: - name: hello-world-scripts-volume configMap: name: hello-world-scripts containers: - name: hello-world-job image: alpine volumeMounts: - mountPath: /hello-world-scripts name: hello-world-scripts-volume env: - name: HOME value: /tmp command: - /bin/sh - -c - | echo "scripts in /hello-world-scripts" ls -lh /hello-world-scripts echo "copy scripts to /tmp" cp /hello-world-scripts/*.sh /tmp echo "apply 'chmod +x' to /tmp/*.sh" chmod +x /tmp/*.sh echo "execute script-one.sh now" /tmp/script-one.sh restartPolicy: Never --- apiVersion: v1 items: - apiVersion: v1 data: script-one.sh: | echo "script-one.sh" date sleep 1 echo "run /tmp/script-2.sh now" /tmp/script-2.sh script-2.sh: | echo "script-2.sh" sleep 1 date kind: ConfigMap metadata: creationTimestamp: null name: hello-world-scripts kind: List metadata: {}
As explained here, you could use the defaultMode: 0777
property as well, an example:
apiVersion: v1
kind: ConfigMap
metadata:
name: test-script
data:
test.sh: |
echo "test1"
ls
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: test
spec:
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
volumes:
- name: test-script
configMap:
name: test-script
defaultMode: 0777
containers:
- command:
- sleep
- infinity
image: ubuntu
name: locust
volumeMounts:
- mountPath: /test-script
name: test-script
You can enter into the container shell and execute the script /test-script/test.sh
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With