Hello World

Pod 执行与控制

容器创建与执行

我们可以创建如下的 Pod 配置文件:

apiVersion: v1
kind: Pod
metadata:
  name: shell-demo
spec:
  volumes:
    - name: shared-data
      emptyDir: {}
  containers:
    - name: nginx
      image: nginx
      volumeMounts:
        - name: shared-data
          mountPath: /usr/share/nginx/html
  hostNetwork: true
  dnsPolicy: Default

注意,这里使用 hostNetwork 命令指明了使用所在主机的接口,我们接下来使用 kubectl 来创建 Pod:

$ kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml

# 获取当前容器的状态
$ kubectl get pod shell-demo

# 执行 Pod 中的命令
$ kubectl exec -it shell-demo -- /bin/bash

# 单独执行某个指令
$ kubectl exec shell-demo env
$ kubectl exec shell-demo ps aux
$ kubectl exec shell-demo ls /
$ kubectl exec shell-demo cat /proc/1/mounts

# 当有多个容器时,可以指明执行某个容器的命令
$ kubectl exec -it my-pod --container main-app -- /bin/bash

这里我们使用了本地的 Volume 共享,我们可以在共享的目录中创建新的文本:

$ echo Hello shell demo > /usr/share/nginx/html/index.html
$ curl localhost

多个容器

在以下的配置中,我们可以创建包含两个容器的 Pod,这两个容器共享 Volume 并以此通信:

apiVersion: v1
kind: Pod
metadata:
  name: two-containers
spec:
  restartPolicy: Never

  volumes:
    - name: shared-data
      emptyDir: {}

  containers:
    - name: nginx-container
      image: nginx
      volumeMounts:
        - name: shared-data
          mountPath: /usr/share/nginx/html

    - name: debian-container
      image: debian
      volumeMounts:
        - name: shared-data
          mountPath: /pod-data
      command: ["/bin/sh"]
      args:
        ["-c", "echo Hello from the debian container > /pod-data/index.html"]

在配置文件中,您可以看到 Pod 具有一个名为 shared-data 的卷。配置文件中列出的第一个容器运行 nginx 服务器。共享卷的安装路径为 /usr/share/nginx/html。第二个容器基于 debian 映像,并且具有 /pod-data 的安装路径。第二个容器运行以下命令,然后终止。

$ echo Hello from the debian container > /pod-data/index.html
$ kubectl get pod two-containers --output=yaml

apiVersion: v1
kind: Pod
metadata:
  ...
  name: two-containers
  namespace: default
  ...
spec:
  ...
  containerStatuses:

  - containerID: docker://c1d8abd1 ...
    image: debian
    ...
    lastState:
      terminated:
        ...
    name: debian-container
    ...

  - containerID: docker://96c1ff2c5bb ...
    image: nginx
    ...
    name: nginx-container
    ...
    state:
      running:
    ...

我们可以看到 debian container 被终止了,而 nginx container 依然运行。

$ kubectl exec -it two-containers -c nginx-container -- /bin/bash
$ root@two-containers:/# curl localhost

> Hello from the debian container
下一页