k8s,盘他!pod资源工作流程与调度约束

文章目录

  • 前言
  • 一:
      • 1.1:k8s创建pod工作流程
      • 1.2:调度方式
          • 1.2.1:nodeName方式
          • 1.2.2:nodeSelector方式
      • 1.3:常见错误状态的问题
      • 如有疑问可评论区交流!

前言

一:

1.1:k8s创建pod工作流程

k8s,盘他!pod资源工作流程与调度约束_第1张图片

过程:

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       16d   v1.12.3
    192.168.233.133   Ready       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       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       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资源会遇到如下状态

k8s,盘他!pod资源工作流程与调度约束_第2张图片

  • 几条常用命令:

    1、查看pod详细信息,包括pod事件:kubectl describe pod pod名称

    2、查看pod日志:kubectl logs pod名称

    3、进入pod:kubectl exec -it pod名称 环境(如bash)

如有疑问可评论区交流!

你可能感兴趣的:(Kubernetes/K8S)