当前位置: 首页 > news >正文

k8s上Pod全自动调度、定向调度、亲和性调度、污点和容忍调度详解

目录

一.Pod调度简介

二.Deployment/RC全自动调度

1.简介

2.案例演示

(1)Deployment

(2)RC

三.nodeSelector/nodeName指定节点调度

1.原理简介

(1)nodeSelector原理

(2)nodeName原理

2.案例演示

3.kubernetes预定义pod标签

四.Affinity亲和性调度

1.简介

2.三类Affinity

(1)nodeAffinity,node亲和性

a.以node为主体,针对pod调度到node问题

b.两种表达方式和可配置项

c.案例演示

d.注意事项

(2)podAffinity,pod亲和性

a.以pod为主体,针对pod和pod部署在同一个拓扑的问题

b.两种表达方式和可配置项

c.案例演示

  (3)podAntiAffinity,pod反亲和性

a.以pod为主体,针对pod和pod不能部署在同一个拓扑的问题

b.案例演示

五.taint污点调度和Toleration容忍调度

1.污点调度(node方)

(1)三个污点策略

(2)添加污点/查看污点/去除污点

(3)案例演示

a.PreferNoSchedule

b.NoSchedule

c.NoExecute

2.容忍调度(pod方)

(1)容忍的配置参数

(2)案例演示


 

一.Pod调度简介

默认情况下,Pod调度到哪个节点都是由Scheduler组件进行调度,对于在工作和学习中需要指定设备运行特定pod时就显得不实用,此时我们就需要合理利用几个调度规则,主要包括全自动调度、定向调度、亲和性调度、污点调度、容忍调度等

二.Deployment/RC全自动调度

1.简介

主要功能是自动部署一个容器的多个副本,以来持续保持使用者指定的副本数量(replicas)

2.案例演示

创建一个Deployment来管理pod,指定创建2个副本,自动调度pod,创建完成后查看调度情况

(1)Deployment

[root@k8s-master pod]# kubectl create deployment my-nginx --image=nginx --replicas=2 --port=80 -n myns --dry-run=client -o yaml > mydeployment.yaml
[root@k8s-master pod]# cat mydeployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: my-nginxname: my-nginxnamespace: myns
spec:replicas: 2selector:matchLabels:app: my-nginxstrategy: {}template:metadata:creationTimestamp: nulllabels:app: my-nginxspec:containers:- image: nginxname: nginxports:- containerPort: 80resources: {}
status: {}
​
[root@k8s-master pod]# kubectl apply -f mydeployment.yaml
​
[root@k8s-master pod]# kubectl get deploy -n myns   #创建了两个副本
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
my-nginx   2/2     2            2           8m17s
[root@k8s-master pod]# kubectl get pods -n myns -o wide   #两个node分别分配到了各自的pod任务
NAME                        READY   STATUS    RESTARTS   AGE     IP               NODE        NOMINATED NODE   READINESS GATES
my-nginx-64f6999999-5j7nl   1/1     Running   0          8m40s   10.244.36.65     k8s-node1   <none>           <none>
my-nginx-64f6999999-hjbd4   1/1     Running   0          8m40s   10.244.169.130   k8s-node2   <none>           <none>

(2)RC

[root@k8s-master pod]# cat myrc.yaml 
apiVersion: v1
kind: ReplicationController
metadata:name: nginx-rcnamespace: myns
spec:replicas: 2selector:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginx-containerimage: nginxports:- containerPort: 80
[root@k8s-master pod]# kubectl apply -f myrc.yaml 
replicationcontroller/nginx-rc created
[root@k8s-master pod]# kubectl get rc -n myns
NAME       DESIRED   CURRENT   READY   AGE
nginx-rc   2         2         2       25s
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
nginx-rc-4qfm8   1/1     Running   0          36s   10.244.36.70     k8s-node1   <none>           <none>
nginx-rc-xmdbc   1/1     Running   0          36s   10.244.169.133   k8s-node2   <none>           <none>

三.nodeSelector/nodeName指定节点调度

1.原理简介

(1)nodeSelector原理

就是给具体的受管node打上标签,在部署pod时指定调度到特定标签的node,前提是这个集群中需要有指定的node,若没有这个特定node即使有其他正常运行的node,这个pod也无法完成调度任务。如果多个node拥有同一个标签,那么Scheduler会进一步选择一个可用的node进行配合调度任务。

(2)nodeName原理

强制指定node的名称,也就是“kubectl get nodes”可以查出来的node名称

2.案例演示

(1)仍然使用mydeployment.yaml进行测试,nodeSelector为节点打上标签,,加上nodeSelector参数指定节点,运行完成后可以看到3个副本都运行在node1

[root@k8s-master pod]# kubectl label nodes k8s-node1 name=node1
​
[root@k8s-master pod]# kubectl get nodes --show-labels
NAME         STATUS   ROLES           AGE   VERSION   LABELS
k8s-master   Ready    control-plane   34m   v1.28.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node1    Ready    <none>          34m   v1.28.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,name=node1
k8s-node2    Ready    <none>          33m   v1.28.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,name=node2
​
[root@k8s-master pod]# cat mydeployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: my-nginxname: my-nginxnamespace: myns
spec:replicas: 3selector:matchLabels:app: my-nginxstrategy: {}template:metadata:creationTimestamp: nulllabels:app: my-nginxspec:containers:- image: nginxname: nginxports:- containerPort: 80nodeSelector:name: node1[root@k8s-master pod]# kubectl apply -f mydeployment.yaml 
deployment.apps/my-nginx created
​
[root@k8s-master pod]# kubectl get deployments -n myns
NAME       READY   UP-TO-DATE   AVAILABLE   AGE
my-nginx   3/3     3            3           23s
​
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
my-nginx-74db7ccb9b-gvgfk   1/1     Running   0          31s   10.244.36.67   k8s-node1   <none>           <none>
my-nginx-74db7ccb9b-kpsb2   1/1     Running   0          31s   10.244.36.66   k8s-node1   <none>           <none>
my-nginx-74db7ccb9b-xwpjt   1/1     Running   0          31s   10.244.36.68   k8s-node1   <none>           <none>

(2)使用nodeName同样可以实现

[root@k8s-master pod]# kubectl get nodes
NAME         STATUS   ROLES           AGE   VERSION
k8s-master   Ready    control-plane   70m   v1.28.2
k8s-node1    Ready    <none>          70m   v1.28.2
k8s-node2    Ready    <none>          70m   v1.28.2
​
[root@k8s-master pod]# cat mydeployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: my-nginxname: my-nginxnamespace: myns
spec:replicas: 3selector:matchLabels:app: my-nginxstrategy: {}template:metadata:creationTimestamp: nulllabels:app: my-nginxspec:containers:- image: nginxname: nginxports:- containerPort: 80nodeName: k8s-node1
​
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME                        READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
my-nginx-7544fbf745-gwxv7   1/1     Running   0          85s   10.244.36.70   k8s-node1   <none>           <none>
my-nginx-7544fbf745-kn8lj   1/1     Running   0          85s   10.244.36.71   k8s-node1   <none>           <none>
my-nginx-7544fbf745-q6w6j   1/1     Running   0          85s   10.244.36.69   k8s-node1   <none>           <none>

3.kubernetes预定义pod标签

可以看到查看node的labels后,有一长串现有标签,这些就是k8s预定义的pod标签,当然也可以只指定标签进一步指定node进行pod调度。其中基本上都是指定的基于设备架构类型和操作系统类型

[root@k8s-master pod]# kubectl get nodes --show-labels
NAME         STATUS   ROLES           AGE   VERSION   LABELS
k8s-master   Ready    control-plane   41m   v1.28.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-master,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node.kubernetes.io/exclude-from-external-load-balancers=
k8s-node1    Ready    <none>          40m   v1.28.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,name=node1
k8s-node2    Ready    <none>          40m   v1.28.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux,name=node2

四.Affinity亲和性调度

1.简介

对pod配置亲和性调度,可以解决上面介绍的定向调度存在“没有满足匹配条件的node时,即使其他有可用node,pod也无法成功调度”的问题,亲和性调度会先选择满足条件的node,若没有,也可以调度到其他可用node上

2.三类Affinity

(1)nodeAffinity,node亲和性

a.以node为主体,针对pod调度到node问题

b.两种表达方式和可配置项

[root@k8s-master pod]# kubectl explain pod.spec.affinity.nodeAffinity
KIND:       Pod
VERSION:    v1
​preferredDuringSchedulingIgnoredDuringExecution   <[]PreferredSchedulingTerm>#强调优先满足指定规则,可以理解为尽量满足该规则,实在是不满足再为其分配其他可用node,调度器尝试但不强求调度pod到node上,若有多个优先级规则那么可以设置权值来调整调度顺序- weight: 1  #权值,越小优先级越高,1-100preference:   #节点选择器,关联weightmatchExpressions:   #按照节点的标签来匹配选择目标- key: kubernetes.io/arch  #同上operator: Invalues:- amd64requiredDuringSchedulingIgnoredDuringExecution    <NodeSelector>#必须满足指定的规则才能调度pod至node上,硬性条件nodeSelectorTerms:   #节点选择列表- matchExpressions:   #或matchFields,当然比较推荐matchExpressions,表示按照节点的标签来匹配选择调度目标- key: kubernetes.io/hostname   #标签的键operator: In  #operator关系符,可以是In(属于)、NotIn(不属于)、Exists(存在)、DoseNotExists(不存在)、Gt(大于)、Lt(小于)values:   #标签的值- k8s-node1

c.案例演示

下例要求必须运行在hostname为k8s-node1的节点,尽量运行在架构为amd64的设备上

[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Running   0          9s    10.244.36.82   k8s-node1   <none>           <none>
[root@k8s-master pod]# cat myaffinity.yaml 
apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: myns
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node1preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: kubernetes.io/archoperator: Invalues:- amd64containers:- name: nginx-containerimage: nginx:latestports:- name: nginx-portcontainerPort: 80

若将硬限制处改为不存在的node,那么会调度错误

apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: myns
spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node3#preferredDuringSchedulingIgnoredDuringExecution:#- weight: 1#preference:#matchExpressions:#- key: kubernetes.io/arch#operator: In#values:#- amd64containers:- name: nginx-containerimage: nginx:latestports:- name: nginx-portcontainerPort: 80
​
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES
nginx-pod   0/1     Pending   0          6s    <none>   <none>   <none>           <none>
[root@k8s-master pod]# kubectl describe pod nginx-pod -n myns | tail -5node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:Type     Reason            Age   From               Message----     ------            ----  ----               -------Warning  FailedScheduling  25s   default-scheduler  0/3 nodes are available: 1 node(s) had untolerated taint {node-role.kubernetes.io/control-plane: }, 2 node(s) didn't match Pod's node affinity/selector. preemption: 0/3 nodes are available: 3 Preemption is not helpful for scheduling..

若将软限制更改为一个不存在的node,那么会自动挑选一个可用node接受调度任务

[root@k8s-master pod]# cat myaffinity.yaml 
apiVersion: v1
kind: Pod
metadata:name: nginx-podnamespace: myns
spec:affinity:nodeAffinity:#requiredDuringSchedulingIgnoredDuringExecution:#nodeSelectorTerms:#- matchExpressions:#- key: kubernetes.io/hostname#operator: In#values:#- k8s-node3preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node3containers:- name: nginx-containerimage: nginx:latestports:- name: nginx-portcontainerPort: 80
​
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
nginx-pod   1/1     Running   0          8s    10.244.36.83   k8s-node1   <none>           <none>

d.注意事项

定向调度nodeSelector和nodeAffinity可以同时配置,但需要两者的条件都满足才能正常运行调度

pod被调度到node后node的标签发生了改变不符合亲和性调度匹配规则时,系统将忽略此变化(requiredDuringSchedulingIgnoredDuringExecution表达方式中的IgnoredDuringExecution就表示这个意思)

定义了多个nodeSelectorTerms时满足一个即可

定义了多个matchExpressions时需要都满足才成功

(2)podAffinity,pod亲和性

a.以pod为主体,针对pod和pod部署在同一个拓扑的问题

为减少网络通信性能损耗,多用于两个pod应用频繁交互互动的情况

b.两种表达方式和可配置项

[root@k8s-master pod]# kubectl explain  pod.spec.affinity.podAffinity
KIND:       Pod
VERSION:    v1
​
FIELDS:preferredDuringSchedulingIgnoredDuringExecution   <[]WeightedPodAffinityTerm>#软限制,尽量满足- weight: 3        podAffinityTerm:   #选项labelSelector:matchExpressions:- key: kubernetes.io/archoperator: Invalues:- amd64topologyKey: kubernetes.io/arch 
​requiredDuringSchedulingIgnoredDuringExecution    <[]PodAffinityTerm>#硬限制,必须满足- labelSelector:   #标签选择器matchExpressions:   #同nodeAffinity- key: nameoperator: Invalues:- su1namespaces: xxx     #指定参照pod的名称空间topologyKey: kubernetes.io/hostname  #指定调度作用域,kubernetes.io/hostname(以Node节点为区分范围),kubernetes.io/os(以Node节点的操作系统类型来区分)等#matchLabels    可指定多个matchExpressions内容

c.案例演示

下例要求将两个nginx的pod运行在同一个node,并且是以hostname为调度作用域

[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME        READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
my-nginx1   1/1     Running   0          9s    10.244.36.80   k8s-node1   <none>           <none>
my-nginx2   1/1     Running   0          9s    10.244.36.81   k8s-node1   <none>           <none>
[root@k8s-master pod]# cat twopod.yaml 
apiVersion: v1
kind: Pod
metadata:name: my-nginx1labels:name: su1namespace: myns
spec:containers:- name: my-nginx1image: nginx
​
---
​
apiVersion: v1
kind: Pod
metadata: name: my-nginx2labels:name: su2namespace: myns
spec:containers:- name: my-nginx2image: nginxaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: nameoperator: Invalues:- su1topologyKey: kubernetes.io/hostnamepreferredDuringSchedulingIgnoredDuringExecution:- weight: 3        podAffinityTerm:labelSelector:matchExpressions:- key: kubernetes.io/archoperator: Invalues:- amd64topologyKey: kubernetes.io/arch 

  (3)podAntiAffinity,pod反亲和性

a.以pod为主体,针对pod和pod不能部署在同一个拓扑的问题

为提高服务可用性,多用于pod应用有多个副本,让应用分布到各个node上的情况,用法和podAffinity一致

b.案例演示

简单测试下效果就将上面podAffinity例子改为podAntiAffinity即可

[root@k8s-master pod]# cat twopod.yaml 
apiVersion: v1
kind: Pod
metadata:name: my-nginx1labels:name: su1namespace: myns
spec:containers:- name: my-nginx1image: nginx
​
---
​
apiVersion: v1
kind: Pod
metadata: name: my-nginx2labels:name: su2namespace: myns
spec:containers:- name: my-nginx2image: nginxaffinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: nameoperator: Invalues:- su1topologyKey: kubernetes.io/hostnamepreferredDuringSchedulingIgnoredDuringExecution:- weight: 3        podAffinityTerm:labelSelector:matchExpressions:- key: kubernetes.io/archoperator: Invalues:- amd64topologyKey: kubernetes.io/arch [root@k8s-master pod]# kubectl get pods -n myns -o wide   #已将其运行在其他node
NAME        READY   STATUS    RESTARTS   AGE   IP               NODE        NOMINATED NODE   READINESS GATES
my-nginx1   1/1     Running   0          9s    10.244.36.84     k8s-node1   <none>           <none>
my-nginx2   1/1     Running   0          9s    10.244.169.132   k8s-node2   <none>           <none>

五.taint污点调度和Toleration容忍调度

1.污点调度(node方)

也就是在node上添加一个taint的属性,来标识此node是否允许pod调度

(1)三个污点策略

PreferNoSchedule

能不来你就别来了,但是要是没有其他node可以调度了可以过来

NoSchedule

新pod就别来了,我现在只负责我的老pod了

NoExecute

老pod我也不负责了,新的我也调度不了

(2)添加污点/查看污点/去除污点

#添加
kubectl taint nodes nodename 键=值:污点策略
#查看
kubectl describe nodes nodename | grep Taints
#删除
kubectl taint nodes nodename 键:污点策略-
#删除所有
kubectl taint nodes nodename 键-

(3)案例演示

模拟目前集群中只有k8s-node1一个node可用,在该node上演示污点调度的三种模式效果

[root@k8s-master pod]# kubectl get nodes -o wide
NAME         STATUS   ROLES           AGE     VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                KERNEL-VERSION           CONTAINER-RUNTIME
k8s-master   Ready    control-plane   8m32s   v1.28.2   192.168.2.150   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.24
k8s-node1    Ready    <none>          7m42s   v1.28.2   192.168.2.151   <none>        CentOS Linux 7 (Core)   3.10.0-1160.el7.x86_64   containerd://1.6.24

a.PreferNoSchedule

可以看到设置PreferNoSchedule后在无其他可用节点时仍然mytaint1可以被调度上来

[root@k8s-master pod]# kubectl taint nodes k8s-node1 status=taint:PreferNoSchedule
node/k8s-node1 tainted
[root@k8s-master pod]# kubectl run mytaint1 --image=nginx -n myns
pod/mytaint1 created
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP             NODE        NOMINATED NODE   READINESS GATES
mytaint1   1/1     Running   0          9s    10.244.36.66   k8s-node1   <none>           <none>
[root@k8s-master pod]# kubectl taint nodes k8s-node1 status:PreferNoSchedule-
node/k8s-node1 untainted

b.NoSchedule

可以看到设置NoSchedule后,新pod无法被调度,但不会影响原有的mytaint1

[root@k8s-master pod]# kubectl taint nodes k8s-node1 status=taint:NoSchedule
node/k8s-node1 tainted
[root@k8s-master pod]# kubectl run mytaint2 --image=nginx -n myns
pod/mytaint2 created
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME       READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
mytaint1   1/1     Running   0          2m54s   10.244.36.66   k8s-node1   <none>           <none>
mytaint2   0/1     Pending   0          9s      <none>         <none>      <none>           <none>
[root@k8s-master pod]# kubectl taint nodes k8s-node1 status:NoSchedule-
node/k8s-node1 untainted

c.NoExecute

可以看到在设置NoExecute后,node上原有的pod都被剔除,只剩mytaint3,他同样也无法被调度

[root@k8s-master pod]# kubectl taint nodes k8s-node1 status=taint:NoExecute
node/k8s-node1 tainted
[root@k8s-master pod]# kubectl run mytaint3 --image=nginx -n myns
pod/mytaint3 created
[root@k8s-master pod]# kkubec get pods -n myns -o wide
-bash: kkubec: command not found
[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP       NODE     NOMINATED NODE   READINESS GATES
mytaint3   0/1     Pending   0          16s   <none>   <none>   <none>           <none>

2.容忍调度(pod方)

就是实在需要将pod调度到污点node上,可以利用容忍调度

(1)容忍的配置参数

[root@k8s-master pod]# kubectl explain pod.spec.tolerations
KIND:       Pod
VERSION:    v1
​
FIELDS:effect    <string>#指定对应想要调度node的污点策略,若是空则匹配所有策略,必须和目标node的策略一致key   <string>#指定对应想要调度node的污点键,必须和目标node的污点键一致operator  <string>#运算符,只支持Equal和Exists,默认ExiststolerationSeconds <integer>#容忍时间,设置pod在node上的存活时间,只有在污点策略为NoExecute才生效value <string>#指定对应想要调度node的污点键对应的值,必须和目标node的污点键值一致

(2)案例演示

在污点为“status=taint:NoExecute”的k8s-node1上成功调度my-to

[root@k8s-master pod]# kubectl describe node k8s-node1 | grep Taints
Taints:             status=taint:NoExecute
​
[root@k8s-master pod]# cat mytoleration.yaml 
apiVersion: v1
kind: Pod
metadata:name: my-tonamespace: myns
spec:containers:- name: my-nginximage: nginxtolerations:- key: statusoperator: Equalvalue: tainteffect: NoExecute[root@k8s-master pod]# kubectl get pods -n myns -o wide
NAME    READY   STATUS    RESTARTS   AGE     IP             NODE        NOMINATED NODE   READINESS GATES
my-to   1/1     Running   0          6m48s   10.244.36.68   k8s-node1   <none>           <none>

 

 

 

 

相关文章:

k8s上Pod全自动调度、定向调度、亲和性调度、污点和容忍调度详解

目录 一.Pod调度简介 二.Deployment/RC全自动调度 1.简介 2.案例演示 &#xff08;1&#xff09;Deployment &#xff08;2&#xff09;RC 三.nodeSelector/nodeName指定节点调度 1.原理简介 &#xff08;1&#xff09;nodeSelector原理 &#xff08;2&#xff09;no…...

C# 动态编译代码并执行

写在前面 本文采用动态编译的方式&#xff0c;对目标文件code.txt中的C#代码进行实时编译并调用&#xff1b;当然也可以直接在代码中直接装配或读取已有的代码文本&#xff0c;动态编译可以用于很多需要热更新的场景&#xff0c;实现无需重启程序也能达到更新代码的需求。 代…...

nginx配置反向代理及负载均衡

目录 1.前端发送的请求&#xff0c;是如何请求到后端服务的1.nginx 反向代理的好处&#xff1a;2.nginx 反向代理的配置方式&#xff1a;3. nginx 负载均衡的配置方式 1.前端发送的请求&#xff0c;是如何请求到后端服务的 1.nginx 反向代理的好处&#xff1a; 提高访问速度 因…...

【古月居《ros入门21讲》学习笔记】09_订阅者Subscriber的编程实现

目录 说明&#xff1a; 1. 话题模型 图示 说明 2. 实现过程&#xff08;C&#xff09; 创建订阅者代码&#xff08;C&#xff09; 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程&#xff08;Python&#xff09; 创建订阅者代码&#xff08;Python&…...

Java全栈基础篇--集合

集合 集合&#xff1a;集合是java中提供的一种容器&#xff0c;可以用来存储多个数据。 特点&#xff1a; 长度不固定&#xff0c;还可以存储不同的数据&#xff08;但是一般都用同一类型&#xff09; 集合和数组既然都是容器&#xff0c;它们有啥区别呢&#xff1f; 数组的长…...

Facebook公共主页受限、被封?一文教你排雷解决

一、Facebook公共主页是什么&#xff1f; 现在人们的生活已经离不开各种社交媒体&#xff0c;只要有智能手机&#xff0c;或多或少会使用一些社交平台&#xff0c;而Facebook是一个拥有大量用户的社交平台。这对于各种企业而言&#xff0c;也是一个十分优秀的营销平台&#xf…...

Day04:每日一题:2661. 找出叠涂元素

2661. 找出叠涂元素 给你一个下标从 0 开始的整数数组 arr 和一个 m x n 的整数 矩阵 mat 。 arr 和 mat 都包含范围 [1&#xff0c;m * n] 内的 所有 整数。从下标 0 开始遍历 arr 中的每个下标 i &#xff0c;并将包含整数 arr[i] 的 mat 单元格涂色。请你找出 arr 中在 mat…...

SpringBoot 整合Redis

在Spring Boot中&#xff0c;你可以使用以下注解来实现Redis的整合: EnableCaching: 在启动类上添加该注解&#xff0c;开启Spring的缓存支持。 Cacheable: 标记方法的返回值可被缓存。当缓存中存在相同 key 的数据时&#xff0c;直接从缓存中获取数据&#xff0c;否则执行方法…...

tensorflow-gpu1.15 + win11 + RTX 4050环境配置

组了一套&#xff0c;不知道行不行 windows11GPURTX 4050python3.7.12tensorflow-gpu1.15.0cudatoolkit10.0.130cudnn7.6.5Keras2.3.1...

jmeter资料

1.jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。 它可以用于测试静态和动态资源&#xff0c;例如静态文件、Java 小服务程序、CGI 脚本、Java 对象…...

代码随想录算法训练营第三十六天| 435 无重叠区间 763 划分字母区间 56 合并区间

目录 435 无重叠区间 763 划分字母区间 56 合并区间 435 无重叠区间 将intervals数组按照左端点进行升序排序。 设置变量len标志此时新加入端点后所有区间的位置&#xff0c;将其赋初值为第一对区间的右端点&#xff0c;因为该点是一定可达的。设置变量res来存储需要移除空间…...

2023-12-01 事业-代号s-引流技巧和营销思路

摘要: 2023-12-01 事业-代号s-引流技巧和营销思路 引流技巧和营销思路 独立站流量渠道主要有以下几种:1、CPC付费广告:搜索引擎、社交平台、广告联盟平台。2、网红营销:youtube、INS、博客论文、TT直播。适合比较时尚品类3、Affiliate促销网站:优惠券折扣网站发布产品优惠…...

反转链表的Java实现

1. 题目 反转链表&#xff0c;例如&#xff0c;原链表1-2-3-4-5&#xff0c;反转后为5-4-3-2-1。 2. 迭代法实现 private ListNode reverseList(ListNode head) {if(head null || head.next null){return head;}ListNode cur head.next;head.next null;while(cur ! null…...

2022年1月14日 Go生态洞察:Go 1.18 新教程探索

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换

立足特定应用领域的创新型企业 上海某半导体公司是中国10大集成电路设计公司之一的子公司。该半导体公司是一家特色工艺集成电路芯片制造企业&#xff0c;专注模拟电路、功率器件所需的特色生产工艺研发与制造&#xff0c;。 该半导体公司不断追求创新&#xff0c;提高自身产…...

14.Tomcat和HTTP协议-[一篇通]

文章目录 1.HTTP 协议1.1HTTP 是什么1.2理解 "应用层协议"1.3理解 HTTP 协议的工作过程1.4HTTP 协议格式1.4.1抓包工具的使用(Fiddler)1.4.2抓包工具的原理1.4.3抓包结果1.4.4协议格式总结 1.5HTTP 请求 (Request)1.5.1认识 URL1.5.1.1URL 基本格式1.5.1.2关于 URL e…...

在线陪诊系统: 医疗科技的崭新前沿

在医学科技的快速发展中&#xff0c;在线陪诊系统正成为医疗服务领域的创新力量。通过结合互联网和先进的远程技术&#xff0c;这一系统为患者和医生提供了更为便捷、高效的医疗体验。本文将深入探讨在线陪诊系统的技术背后的核心代码和实现原理。 技术背后的关键代码 在线陪…...

MySQL的基础知识

目录 关系型数据库 SQL通用语法 数据类型 数值类型 字符串类型 日期类型 SQL分类 DDL 数据库操作 表操作 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 权限控制 函数 字符串…...

【EI会议征稿】第七届大数据与应用统计国际学术研讨会(ISBDAS 2024)

第七届大数据与应用统计国际学术研讨会&#xff08;ISBDAS 2024&#xff09; 2024 7th International Symposium on Big Data and Applied Statistics 第七届大数据与应用统计国际学术研讨会&#xff08;ISBDAS 2024&#xff09;定于2024年3月8-10日在中国上海举行。会议旨在…...

最轻量级最完整的屏幕适配完全适配各个手机方案

当你看到这篇博客的时候,说明你已经迈出了惊人的一步,已经慢慢进入高级资深开发工程师行列了,这是开发之路必备技能。 当你接到一个任务时,每天按照需求原型、设计师UI图立刻积极的开发完成后,满满的兴高采烈去打包提测,板凳还没做安稳,测试人员就提了一个又一个的BUG,…...

IDEA安装python插件并配置

目录 一、Mac1. 安装插件2. 新建项目3. 下载第三方库4. 配置镜像源 一、Mac 1. 安装插件 在plugins中搜索python 2. 新建项目 使用本项目独享的虚拟环境&#xff0c;选择解释器 如果需要修改解释器可以进入project structure&#xff0c;在SDKs中点击&#xff0c;选择add py…...

简单的Python烟花代码,跨年了

运行效果 这一份烟花代码还是很有水分的&#xff0c;运行效果也是抽象 源代码 import turtle import random# 设置窗口大小 turtle.setup(400, 500)# 设置画笔 t turtle.Turtle() t.speed(0) t.color("red")# 画烟花 for i in range(50):t.penup()t.goto(random.r…...

社区医院儿童疫苗接种管理系统设计与开发

社区医院儿童疫苗接种管理系统设计与开发 摘要 自建国以来我国一直注重于卫生健康的建设&#xff0c;而儿童的生命健康更得到重视。疫苗接种作为有效防御疾病的手段之一&#xff0c;一直被广泛应用在世界各地。目前&#xff0c;有相当一部分社区准备使用信息管理系统来进行优…...

Docker下安装Redis

如果我们在Docker上直接拉取redis并运行镜像&#xff0c;当容器删除之后&#xff0c;redis容器里的数据不会被保存&#xff0c;所以我们在运行容器的时候&#xff0c;需要使用数据卷进行挂载&#xff0c;按照如下操作即可。 安装步骤 新建目录/opt/redis [rootlocalhost data…...

【python笔记】与网络编程相关的知识总结

前言 菜某的笔记总结 内网IP与公网IP 首先&#xff0c;我们知道全球电脑数量众多&#xff0c;但是IP有限&#xff0c;所以我们无法每人分配一个IP。 应对这种情况&#xff0c;我们就出现了内网IP和外网IP。 首先我的公司为路由器注册了一个公网IP&#xff0c;那么外界对我…...

【libGDX】Mesh立方体贴图(6张图)

1 前言 本文通过一个立方体贴图的例子&#xff0c;讲解三维纹理贴图的应用&#xff0c;案例中使用 6 张不同的图片给立方体贴图&#xff0c;图片如下。 读者如果对 libGDX 不太熟悉&#xff0c;请回顾以下内容。 使用Mesh绘制三角形使用Mesh绘制矩形使用Mesh绘制圆形使用Mesh绘…...

数据爬取+数据可视化实战_哪里只得我共你(Dear Jane)_词云展示----网易云

一、前言 歌词上做文本分析&#xff0c;数据存储在网页上&#xff0c;需要爬取数据下来&#xff0c;词云展示在工作中也变得日益重要&#xff0c;接下来将数据爬虫与可视化结合起来&#xff0c;做个词云展示案例。 二、操作步骤 代码如下&#xff1a; # -*- coding:utf-8 -*-…...

spring事务管理快速入门(以转账为例)

spring事务管理&#xff08;以转账为例&#xff09; 概述 Spring事务管理提供了一种在应用程序中管理事务的机制&#xff0c;它抽象了底层的事务管理细节&#xff0c;使得开发者可以更加专注于业务逻辑的实现&#xff0c;而不必过多关心事务的处理。以下是Spring事务管理的一…...

如何在VS2022上的MFC项目中操作Excel(VS2010、VS2012、VS2015、VS2017、VS2019使用方法一样)

先决条件 本机安装office2003、2007、2010、2016及以后版本&#xff0c;总之必须安装office导入Excel库文件&#xff0c;导入方式可参考&#xff1a; 如何在vs2017及以前版本(vs2010、vs2015)上添加 添加类型库中的MFC类如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控…...

【Java8系列06】Java8数据计算

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...