k8s---调度约束

调度约束过程

在这里插入图片描述

从创建资源开始:
●客户发起创建资源请求给api server;api server将请求过程写入到etcd数据库中,etcd会检查语法,语法正确就会记录在etcd中,并且会返回给api server,告诉用户刚刚创建资源的语法是否存在问题,要是存在问题就不会记录在etcd中,如果创建成功会继续下面的流程;
●因为各个组件之间是独立的所以想让各组件之间配合起来就依赖于watch机制;
●watch机制代替api server去连接调度器,调度器这时会计算应该将资源分配给哪台node节点,当计算出资源应该分配到哪个节点时,创建资源的node信息会绑定pod,形成一个地址信息给api server,api server会记录在etcd当中,etcd记录完成后,返回给api server,api server通过watch机制通知调度器去分配,同时watch机制会去看控制器,查看创建的是什么资源类型;之后wtach会带着创建的资源类型和分配的地址去找kubelet,kubelet会直接找docker加载资源引擎,当dokcer容器创建成功后会将状态信息返回给kubelet;kubelet将容器的状态信息返回给api server;api server会把状态信息写入到etcd中,etcd记录成功后会告诉api server信息记录成功,api server再次告诉kubelet所有的状态信息都记录成功,可以运行

调度方式

  • nodeName用于将Pod调度到指定的Node名称上不经过调度器(跳过调度器直接分配)
  • nodeSelector用于将Pod调度到匹配Label的Node上(需要给服务器后端的Node)

示例1:以nodeName调度方式创建

[root@master demo]# vim nodename.yaml     ##编写nodename的资源
apiVersion: v1
kind: Pod  
metadata:
  name: pod-example    ##名称
  labels:
    app: nginx  
spec:
  nodeName: 192.168.148.139    ##nodename指向node01地址
  containers:
  - name: nginx    ##容器名
    image: nginx:1.15
[root@master demo]# kubectl create -f nodename.yaml    ##创建nodename资源
pod/pod-example created
[root@master demo]# kubectl get pods -o wide    ##查看容器创建的节点
NAME          READY   STATUS    RESTARTS   AGE    IP            NODE              NOMINATED NODE
pod-example   1/1     Running   0          118s   172.17.57.2   192.168.148.139   <none>    ##创建在139的节点上
[root@master demo]#  kubectl describe pod pod-example    ##进入pod容器查看创建过程

在这里插入图片描述

[root@master demo]# kubectl delete -f .      ##删除当前文件夹下创建的资源
pod "pod-example" deleted

示例2:以nodeSelector调度方式创建

[root@master demo]# 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 demo]# kubectl get nodes     ##查看节点信息
NAME              STATUS   ROLES    AGE    VERSION
192.168.148.139   Ready    <none>   6d9h   v1.12.3
192.168.148.140   Ready    <none>   6d8h   v1.12.3

给对应的node设置标签分别为kgc=a和kgc=b

[root@master demo]# kubectl label nodes 192.168.148.139 kgc=a    ##给node1节点打上kgc=a的标签
node/192.168.148.139 labeled
[root@master demo]# kubectl label nodes 192.168.148.140 kgc=b    ##给node2节点打上kgc=b的标签
node/192.168.148.140 labeled
[root@master demo]# kubectl get nodes --show-labels      ##查看标签

在这里插入图片描述

[root@master demo]# vim pod6.yaml     ##编写nodeSelector文件
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
  labels:
    app: nginx
spec:
  nodeSelector:      ##node类型
    kgc: b     ##资源创建在标签为b的节点上
  containers:
  - name: nginx
    image: nginx:1.15
[root@master demo]# kubectl create -f pod6.yaml    ##创建资源
pod/pod-example created
[root@master demo]# kubectl get pods -o wide  ##查看资源创建对应的节点
NAME          READY   STATUS    RESTARTS   AGE   IP            NODE              NOMINATED NODE
pod-example   1/1     Running   0          17s   172.17.64.2   192.168.148.140   <none>     ##创建在b标签对应的140,node02的节点上
[root@master demo]# kubectl describe pod pod-example       ##查看详细信息

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kubernetes(k8s)是一种开源的容器编排系统,具有自动化部署、扩展和管理容器化应用程序的能力。它通过网络、调度和资源隔离等机制实现高可用性和可伸缩性。下面简单介绍一下它们的底层原理。 1. 网络 Kubernetes使用CNI(Container Network Interface)插件来管理容器网络。CNI定义了一组标准接口,使得不同的容器网络插件可以在Kubernetes中无缝切换。Kubernetes的每个节点(Node)都有一个kube-proxy代理程序,它负责在节点上创建虚拟的服务IP地址和端口,以及将流量路由到正确的Pod。 2. 调度 Kubernetes的调度器(Scheduler)负责在集群中选择一个最合适的节点来运行Pod。调度器根据一组调度策略来选择节点,比如资源利用率、节点负载等。调度器还可以根据Pod的亲和性(Affinity)和反亲和性(Anti-Affinity)来选择节点,以满足Pod之间的约束关系。 3. 资源隔离 Kubernetes使用Linux命名空间(Namespace)和Cgroups(Control Groups)来实现容器的资源隔离。Namespace使得容器可以拥有自己独立的网络、文件系统、进程和用户空间。Cgroups则可以限制容器的资源使用,比如CPU、内存、磁盘IO等。Kubernetes还支持Vertical Pod Autoscaling(VPA)和Horizontal Pod Autoscaling(HPA)等自动伸缩机制,以根据负载自动调整Pod的资源配额。 总之,Kubernetes通过网络、调度和资源隔离等机制实现了高可用性和可伸缩性。它的底层原理主要涉及到CNI、调度器、Namespace、Cgroups等技术。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值