前言:边整理边学习,不然岁数大了理解不了
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 <none> 443/TCP 51d
service/nginx NodePort 10.104.177.209 <none> 80:31382/TCP 18h
service/tomcat NodePort 10.109.195.112 <none> 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 <none> <none>
[root@k8smaster ~]#
以下都可以理解就是Scheduler对Pod分配到集群节点的策略,如果不进行策略限制,Scheduler会按调度算法自行分配,可能不满足实际生产使用需求,最终目的是可以灵活按要求对Pod进行调度分布。
分两个出发点考虑:
第一、从Pod考虑,分nodeAffinity和nodeSelector
第二、从node节点出发,
根据节点选择器选择node节点:
对节点进行分类:prod test dev
nodeSelector:
env_role: dev
给对应的Node节点新增环境标签,供节点选择器配置
node节点添加标签语法:
#kubectl label nodes <node-name> <label-key>=<label-value>
删除node节点标签语法:(后面的减号表示将该标签删除)
#kubectl label nodes <node-name> <label-key>-
查看现有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 <node-name> key=value:<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: <none>
[root@k8smaster ~]#
污点值:
NoSchedule:一定不会被调度,master节点默认为该值
PreferNoSchedule:尽量不调度
NoExecute:新的不能容忍的pod不能调度过来,老的pod也会被驱逐