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
下一页