k8s中资源调度的最小单位--pod
2019-09-06 23:03 美丽的名字 阅读(1275) 评论(0) 收藏 举报在k8s中,pod才是最小的编排单位,而不是容器。pod就相当于是传统意义上的虚拟机,他可以包含网络、存储等资源。也就是说,在定义一个pod的过程中,也就是在定义一个虚拟机以及在这台虚拟机上所要运行的业务。
我们先从一个简单的pod定义开始讲起。
定义pod配置文件: nginx_pod_v1.yaml
apiVersion: v1 kind: Pod #定义资源类型,常见资源类型有pod,service等 metadata: name: nginx #定义该pod名称,可以通过kubectl get pod nginx指令查看该pod状态 labels: app: web spec: containers: - name: nginx #为该pod中启动的容器命名 image: nginx:1.13 #指定该pod中启动的容器所使用的镜像 ports: - containerPort: 80 #定义容器暴露的端口
创建pod:
kubectl create -f nginx_pod_v1.yaml
但是报了一个错误:
Error from server (ServerTimeout): error when creating "nginx_pod_v1.yaml": No API token found for service account "default", retry after the token is automatically created and added to the service account
这是因为api-server服务中启用了一个叫serviceaccount的组件,禁用之后重启api-server即可。

此时可以查看pod的状态:

可以发现该pod一直处于ContainerCreating状态,此时可以使用describe指令查看该pod的具体信息:
kubectl describe pod nginx

可以发现在创建pod的过程中拉去镜像registry.access.redhat.com/rhel7/pod-infrastructure:latest失败, 该镜像是在kubelet配置文件中指定的:
KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"
其中pod-infrastructure该镜像是一个基础镜像,在每一个pod中都必须默认包含的一个镜像且是第一个启动的容器。
为了加快速度,我们可以在本地自建镜像仓库:
获取官方注册服务器镜像:docker pull docker.io/registry
创建本地镜像仓库:docker run -d -p 5000:5000 --restart=always --name=registry -v /opt/registry:/var/lib/registry registry
将pod-infrastructure镜像push到本地仓库
docker pull docker.io/tianyebj/pod-infrastructure
docker tag docker.io/tianyebj/pod-infrastructure 192.168.56.201:5000/pod-infrastructure:latest
docker push 192.168.56.201:5000/pod-infrastructure:latest
再次查看pod状态:

浙公网安备 33010602011771号