【K8S】k8s节点亲和性、Pod亲和性、污点与污点容忍学习理解

前言:边整理边学习,不然岁数大了理解不了
https://www.cnblogs.com/faberbeta/p/13967873.html,跟着学习
先整理目前学习阶段几个常用的kubectl命令

#生成一个yaml文件  --dry-run尝试运行
[root@k8smaster ~]# kubectl create deployment web --image=nginx --dry-run -o yaml >web.yaml 
W0810 11:30:39.508609   13538 helpers.go:553] --dry-run is deprecated and can be replaced with --dry-run=client.
[root@k8smaster ~]#
#通过yaml文件生成pod
[root@k8smaster ~]# kubectl apply -f web.yaml 
deployment.apps/web created
#对外暴露端口
[root@k8smaster ~]# kubectl expose deployment web --port=80 --type=NodePort --target-port=80 --name=web1 -o yaml > web1.yaml
[root@k8smaster ~]# kubectl apply -f web1.yaml 
###运行一个新的pod
[root@k8smaster ~]#kubectl create deployment nginx --image=nginx
###运行5个pod
[root@k8smaster ~]#kubectl scale deployment nginx --replicas=5

###删除Pod###############################
#查看rs和deployment以及pod
[root@k8smaster ~]# kubectl get pods
NAME                     READY   STATUS    RESTARTS   AGE
nginx-6799fc88d8-nzz2q   1/1     Running   0          18h
[root@k8smaster ~]# kubectl get rs
NAME               DESIRED   CURRENT   READY   AGE
nginx-6799fc88d8   1         1         1       18h
[root@k8smaster ~]# kubectl get deployment
NAME    READY   UP-TO-DATE   AVAILABLE   AGE
nginx   1/1     1            1           18h
[root@k8smaster ~]#
#删除deployment
[root@k8smaster ~]# kubectl delete deployment nginx
deployment.apps "nginx" deleted
[root@k8smaster ~]#
[root@k8smaster ~]# kubectl get pods
No resources found in default namespace.
[root@k8smaster ~]# kubectl get rs
No resources found in default namespace.
[root@k8smaster ~]#
##############################################
##########查看运行的Pod##########
[root@k8smaster ~]# kubectl get pods,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/nginx-6799fc88d8-nzz2q   1/1     Running   0          18h

NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubernetes   ClusterIP   10.96.0.1                443/TCP          51d
service/nginx        NodePort    10.104.177.209           80:31382/TCP     18h
service/tomcat       NodePort    10.109.195.112           8080:32734/TCP   51d
[root@k8smaster ~]#
####查看Pod调度到哪个集群节点#########
[root@k8smaster ~]#  kubectl get pod -o wide
NAME                     READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
nginx-6799fc88d8-nzz2q   1/1     Running   0          18h   10.244.1.3   k8snode1              
[root@k8smaster ~]#

以下都可以理解就是Scheduler对Pod分配到集群节点的策略,如果不进行策略限制,Scheduler会按调度算法自行分配,可能不满足实际生产使用需求,最终目的是可以灵活按要求对Pod进行调度分布。

分两个出发点考虑:
第一、从Pod考虑,分nodeAffinity和nodeSelector
第二、从node节点出发,

根据节点选择器选择node节点:
对节点进行分类:prod test dev

nodeSelector:
  env_role: dev

【K8S】k8s节点亲和性、Pod亲和性、污点与污点容忍学习理解_第1张图片
给对应的Node节点新增环境标签,供节点选择器配置

node节点添加标签语法:
#kubectl label nodes  = 
删除node节点标签语法:(后面的减号表示将该标签删除)
#kubectl label nodes  -
查看现有node及label
通过--show-labels 选项将节点的标签显示出来
kubectl get node --show-labels

一、节点亲和性(nodeAffinity)

节点亲和性和节点选择器功能基本一致,节点亲和性更强大。
首先引入两个参数:
preferredDuringSchedulingIgnoredDuringExecution(尽量满足):软亲和性
requiredDuringSchedulingIgnoredDuringExecution(必须满足):硬亲和性
键值运算关系

In:label 的值在某个列表中
NotIn:label 的值不在某个列表中
Gt:label 的值大于某个值
Lt:label 的值小于某个值
Exists:某个 label 存在
DoesNotExist:某个 label 不存在

二、Pod亲和性(podAffinity)

三、污点(Taints)与容忍(tolerations)

##创建污点
语法:kubectl taint nodes  key=value:
kubectl taint nodes k8snode2 key=value:NoSchedule
##查询污点值
kubectl describe nodes  k8snode2 |grep Taints
##删除污点
kubectl taint nodes k8snode2 key:NoSchedule-
##查看集群节点是否设置污点值##
[root@k8smaster ~]# kubectl describe nodes k8snode2 | grep Taint
Taints:             
[root@k8smaster ~]#

在这里插入图片描述
污点值:
NoSchedule:一定不会被调度,master节点默认为该值
PreferNoSchedule:尽量不调度
NoExecute:新的不能容忍的pod不能调度过来,老的pod也会被驱逐
【K8S】k8s节点亲和性、Pod亲和性、污点与污点容忍学习理解_第2张图片
【K8S】k8s节点亲和性、Pod亲和性、污点与污点容忍学习理解_第3张图片

你可能感兴趣的:(K8S,Docker)