From 32f45fb417fb3bf0fc29e6792fa059206af7ecd3 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 20 Oct 2016 11:05:23 -0700 Subject: [PATCH 1/3] Write new task: Defining a Command and Arguments for a Container. --- _data/tasks.yml | 2 + .../configure-pod-container/commands.yaml | 12 ++++ .../define-command-argument-container.md | 69 +++++++++++++++++++ docs/tasks/index.md | 5 ++ 4 files changed, 88 insertions(+) create mode 100644 docs/tasks/configure-pod-container/commands.yaml create mode 100644 docs/tasks/configure-pod-container/define-command-argument-container.md diff --git a/_data/tasks.yml b/_data/tasks.yml index 91bbe1bcca..90c1f3b8b2 100644 --- a/_data/tasks.yml +++ b/_data/tasks.yml @@ -6,6 +6,8 @@ toc: section: - title: Defining Environment Variables for a Container path: /docs/tasks/configure-pod-container/define-environment-variable-container/ + - title: Defining a Command and Arguments for a Container + path: /docs/tasks/configure-pod-container/define-command-argument-container/ - title: Accessing Applications in a Cluster section: - title: Using Port Forwarding to Access Applications in a Cluster diff --git a/docs/tasks/configure-pod-container/commands.yaml b/docs/tasks/configure-pod-container/commands.yaml new file mode 100644 index 0000000000..8d58007db4 --- /dev/null +++ b/docs/tasks/configure-pod-container/commands.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Pod +metadata: + name: command-demo + labels: + purpose: demonstrate-command +spec: + containers: + - name: command-demo-container + image: debian + command: ["printenv"] + args: ["HOSTNAME", "KUBERNETES_PORT"] diff --git a/docs/tasks/configure-pod-container/define-command-argument-container.md b/docs/tasks/configure-pod-container/define-command-argument-container.md new file mode 100644 index 0000000000..bbff487674 --- /dev/null +++ b/docs/tasks/configure-pod-container/define-command-argument-container.md @@ -0,0 +1,69 @@ +--- +--- + +{% capture overview %} + +This page shows how to define commands and arguments when you run a container +in a Kubernetes Pod. + +{% endcapture %} + + +{% capture prerequisites %} + +{% include task-tutorial-prereqs.md %} + +{% endcapture %} + + +{% capture steps %} + +### Defining a command when you create a Pod + +When you create a Pod, you can specify a command and arguments for the +containers that run in the Pod. To specify a command, include the `command` +field in the configuration file. To specify arguments for the command, include +the `args` field in the configuration file. The command that you specify in the +configuration file overrides the usual entry point for the container. + +In this exercise, you create a Pod that runs one container. The configuration +file for the Pod defines a command and two arguments: + +{% include code.html language="yaml" file="commands.yaml" ghlink="/docs/tasks/configure-pod-container/commands.yaml" %} + +1. Create a Pod based on the YAML configuration file: + + export REPO=https://raw.githubusercontent.com/kubernetes/kubernetes.github.io/master + kubectl create -f $REPO/docs/tasks/configure-pod-container/commands.yaml + +1. List the running Pods: + + kubectl get pods + + The output shows that the container that ran in the command-demo Pod has + completed. + +1. To see the output of the command that ran in the container, view the logs +from the Pod: + + kubectl logs command-demo + + The output shows the values of the HOSTNAME and KUBERNETES_PORT environment + variables: + + command-demo + tcp://10.3.240.1:443 + +{% endcapture %} + +{% capture whatsnext %} + +* Learn more about [containers and commands](/docs/user-guide/containers/). +* Learn more about [configuring containers](/docs/user-guide/configuring-containers/). +* Learn more about [running commands in a container](/docs/user-guide/getting-into-containers/). +* See [Container](/docs/api-reference/v1/definitions/#_v1_container). + +{% endcapture %} + + +{% include templates/task.md %} diff --git a/docs/tasks/index.md b/docs/tasks/index.md index dcd9120e1b..fc08a0469a 100644 --- a/docs/tasks/index.md +++ b/docs/tasks/index.md @@ -3,6 +3,11 @@ The Tasks section of the Kubernetes documentation is a work in progress +#### Configuring Pods and Containers + +* [Defining Environment Variables for a Container](/docs/tasks/configure-pod-container/define-environment-variable-container/) +* [Defining a Command and Arguments for a Container](/docs/tasks/configure-pod-container/define-command-argument-container/) + #### Accessing Applications in a Cluster * [Using Port Forwarding to Access Applications in a Cluster](/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) From 9b18efd3345496aa1e078a3c00b1b184ffec33a9 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Thu, 20 Oct 2016 16:36:00 -0700 Subject: [PATCH 2/3] Write new task: Defining a Command and Arguments for a Container 2 --- .../define-command-argument-container.md | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/docs/tasks/configure-pod-container/define-command-argument-container.md b/docs/tasks/configure-pod-container/define-command-argument-container.md index bbff487674..1e623d9b43 100644 --- a/docs/tasks/configure-pod-container/define-command-argument-container.md +++ b/docs/tasks/configure-pod-container/define-command-argument-container.md @@ -18,13 +18,19 @@ in a Kubernetes Pod. {% capture steps %} -### Defining a command when you create a Pod +### Defining a command and arguments when you create a Pod -When you create a Pod, you can specify a command and arguments for the -containers that run in the Pod. To specify a command, include the `command` -field in the configuration file. To specify arguments for the command, include -the `args` field in the configuration file. The command that you specify in the -configuration file overrides the usual entry point for the container. +When you create a Pod, you can define a command and arguments for the +containers that run in the Pod. To define a command, include the `command` +field in the configuration file. To define arguments for the command, include +the `args` field in the configuration file. The command and arguments that +you define cannot be changed after the Pod is created. + +The command and arguments that you define in the configuration file +override the default command and arguments provided by the container image. +If you define args, but do not define a command, the default command is used +with your new arguments. For more information, see +[Commands and Capabilities](/docs/user-guide/containers/). In this exercise, you create a Pod that runs one container. The configuration file for the Pod defines a command and two arguments: @@ -54,6 +60,24 @@ from the Pod: command-demo tcp://10.3.240.1:443 +### Using environment variables to define arguments + +In the preceding example, you defined the arguments directly by +providing strings. As an alternative to providing strings directly, +you can define arguments by using environment variables. + + env: + - name: MESSAGE + value: "hello world" + command: ["/bin/echo"] + args: ["$(MESSAGE)"] + +This means you can define an argument for a Pod using any of +the techniques available for defining environment variables, including +[ConfigMaps](/docs/user-guide/configmap/) +and +[Secrets](/docs/user-guide/secrets/). + {% endcapture %} {% capture whatsnext %} From 62afa6f904daa67963df97591dac835f60a6c0e0 Mon Sep 17 00:00:00 2001 From: steveperry-53 Date: Fri, 21 Oct 2016 15:52:30 -0700 Subject: [PATCH 3/3] Write new task: Defining a Command and Arguments for a Container 3 --- .../define-command-argument-container.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/docs/tasks/configure-pod-container/define-command-argument-container.md b/docs/tasks/configure-pod-container/define-command-argument-container.md index 1e623d9b43..22ac9b5e04 100644 --- a/docs/tasks/configure-pod-container/define-command-argument-container.md +++ b/docs/tasks/configure-pod-container/define-command-argument-container.md @@ -64,7 +64,7 @@ from the Pod: In the preceding example, you defined the arguments directly by providing strings. As an alternative to providing strings directly, -you can define arguments by using environment variables. +you can define arguments by using environment variables: env: - name: MESSAGE @@ -78,6 +78,18 @@ the techniques available for defining environment variables, including and [Secrets](/docs/user-guide/secrets/). +NOTE: The environment variable appears in parentheses, `"$(VAR)"`. This is +required for the variable to be expanded in the `command` or `args` field. + +### Running a command in a shell + +In some cases, you need your command to run in a shell. For example, your +command might consist of several commands piped together, or it might be a shell +script. To run your command in a shell, wrap it like this: + + command: ["/bin/sh"] + args: ["-c", "while true; do echo hello; sleep 10;done"] + {% endcapture %} {% capture whatsnext %}