Pod的基本用法为:Pod可以由1个或多个容器组合而成。
apiVersion: v1
kind: Pod
metadata:
name: frontend
labels:
- name: frontend
spec:
containers:
- name: frontend
image: kubeguide/guestbook-php-frontend
env:
- name: GET_HOSTS_FROM
value: env
ports:
- containerPort: 80
配置文件frontend-localredis-pod.yaml如下:
apiVersion: v1
kind: Pod
metadata:
name: redis-php
labels:
name: redis-php
spec:
containers:
- name: frontend
image: kubeguide/guestbook-php-frontend
ports:
- containerPort: 80
- name: redis
image: kubeguide/redis-master
ports:
- containerPort: 6379
运行kubectl create命令创建该Pod
kubectl create -f frontend-localredis-pod.yaml
pod "redis-php" created
查看已创建的Pod
kubectl get pods
NAME READY STATUS RESTARTS AGE
redis-php 2/2 Running 0 10m
查看这个Pod的详细信息,可以看到两个容器的定义及创建的过程(Event事件信息):
kubectl describe pod redis-php
静态Pod是由kubelet进行管理的仅存在于特定Node上的Pod。不能通过API Server进行管理,无法与ReplicationController、Deployment或者DaemonSet进行关联,并且kubelet无法对静态Pod进行健康检查。
静态Pod总是由kubelet进行创建的,并且总是在kubelet所在的Node上运行的。
创建静态Pod有两种方式:
apiVersion: v1
kind: Pod
metadata:
name: static-web
labels:
name: static-web
spec:
containers:
- name: static-web
image: nginx
ports:
- name: web
containerPort: 80
等待一会儿,查看本机中已经启动的容器:
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
nginx
可以看到Nginx容器已经被kubelet成功创建出来
到Master节点查看Pod列表,可以看到这个static pod:
kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-node1 1/1 Running 0 5m
由于静态Pod无法通过API Server直接管理,所以在Master节点尝试删除这个Pod,将会使其变成Pending状态,且不会被删除。
kubectl delete pod static-web-node-1
pod "static-web-node-1" deleted
kubectl get pods
NAME READY STATUS RESTARTS AGE
static-web-node1 0/1 Pending 0 1m
删除该Pod的操作只能是到其所在Node上,将其定义文件static-web.yaml从/etc/kubelet.d目录下删除
rm -rf /etc/kubelet.d/static-web.yaml
docker ps
//无容器正在运行
通过设置kubelet的启动参数"–manifest-url",kubelet将会定期从该URL地址下载Pod的定义文件,并以.yaml或.json文件的格式进行解析,然后创建Pod。实现方式与配置文件方式是一致的。