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