k8s,盘他!pod资源工作流程与调度约束
文章目录前言一:1.1:k8s创建pod工作流程1.2:调度方式1.2.1:nodeName方式1.2.2:nodeSelector方式1.3:常见错误状态的问题如有疑问可评论区交流!前言一:1.1:k8s创建pod工作流程过程:1、用户创建pod的信息通过API Server存储到etcd中,etcd记录pod的元信息并将结果返回API Server2、API Server告知调度器请求资源调度
文章目录
前言
一:
1.1:k8s创建pod工作流程
过程:
1、用户创建pod的信息通过API Server存储到etcd中,etcd记录pod的元信息并将结果返回API Server
2、API Server告知调度器请求资源调度分配,调度器给后端打分,将优先级高的node与pod绑定并告知API Server
3、API Server将此信息写入etcd,得到etcd回复后调用kubelet创建pod
4、kubelet使用docker run创建pod内的容器,得到反馈信息后将容器信息告知API Server
5、API Server将收到的信息写入etcd并得到回馈
6、此时使用kubectl get pod就可以查看到信息了
1.2:调度方式
1、nodeName:
- 用于将Pod调度到指定的node名称上(跳过调度器直接分配)
2、nodeSelector:
- 用于将pod调度到匹配label的node上
两种方式都是通过yaml文件来实现
1.2.1:nodeName方式
-
编写yaml文件
[root@master test]# vim nodename-test.yaml apiVersion: v1 kind: Pod metadata: name: pod-example labels: app: nginx spec: nodeName: 192.168.233.133 '//使用nodeName方式并指定node节点' containers: - name: nginx image: nginx:1.15
-
创建pod资源
[root@master test]# kubectl create -f nodename-test.yaml pod/pod-example created [root@master test]# kubectl get pod -w NAME READY STATUS RESTARTS AGE pod-example 0/1 ContainerCreating 0 9s pod-example 1/1 Running 0 18s ^C
-
查看pod信息,是否经过调度器
[root@master test]# kubectl describe pod pod-example 。。。省略内容 Events: '//发现没有经过调度器,node节点也是指定的' Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pulling 67s kubelet, 192.168.233.133 pulling image "nginx:1.15" Normal Pulled 50s kubelet, 192.168.233.133 Successfully pulled image "nginx:1.15" Normal Created 49s kubelet, 192.168.233.133 Created container Normal Started 49s kubelet, 192.168.233.133 Started container
1.2.2:nodeSelector方式
-
使用nodeSelector方式需要给节点打标签
[root@master test]# kubectl label --help '//查看用法' Usage: kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [options] [root@master test]# kubectl get node '//查看node节点名称' NAME STATUS ROLES AGE VERSION 192.168.233.132 Ready <none> 16d v1.12.3 192.168.233.133 Ready <none> 16d v1.12.3 [root@master test]# kubectl label node 192.168.233.132 node=node01 node/192.168.233.132 labeled '//给node打标签,标签不可以直接是数字' [root@master test]# kubectl label node 192.168.233.133 node=node02 node/192.168.233.133 labeled [root@master test]# kubectl get nodes --show-labels '//查看标签' NAME STATUS ROLES AGE VERSION LABELS 192.168.233.132 Ready <none> 16d v1.12.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.233.132,node=node01 192.168.233.133 Ready <none> 16d v1.12.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/hostname=192.168.233.133,node=node02
-
编写yaml文件
[root@master test]# vim nodeselector-test.yaml apiVersion: v1 kind: Pod metadata: name: pod-example labels: app: nginx spec: nodeSelector: node= node01 containers: - name: nginx image: nginx:1.15
-
创建pod资源
[root@master test]# kubectl create -f nodeselector-test.yaml pod/pod-example created [root@master test]# kubectl get pod -w NAME READY STATUS RESTARTS AGE pod-example 0/1 ContainerCreating 0 13s pod-example 1/1 Running 0 30s
-
查看pod详细信息
[root@master test]# kubectl describe pod pod-example Events: '//发现是经过控制器的,分配的节点ip也是对的' Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m3s default-scheduler Successfully assigned default/pod-example to 192.168.233.132 Normal Pulling 2m2s kubelet, 192.168.233.132 pulling image "nginx:1.15" Normal Pulled 93s kubelet, 192.168.233.132 Successfully pulled image "nginx:1.15" Normal Created 93s kubelet, 192.168.233.132 Created container Normal Started 93s kubelet, 192.168.233.132 Started container
1.3:常见错误状态的问题
- 使用
kubectl get pod
命令查看pod资源会遇到如下状态
-
几条常用命令:
1、查看pod详细信息,包括pod事件:
kubectl describe pod pod名称
2、查看pod日志:
kubectl logs pod名称
3、进入pod:
kubectl exec -it pod名称 环境(如bash)
如有疑问可评论区交流!
更多推荐
所有评论(0)