一、Node的隔离与恢复
在硬件升级、维护等情况下,我们需要将某些Node进行隔离,脱离k8s集群的调度范围。k8s提供了一种机制,既可以将Node纳入调度范围,也可以将Node脱离调度范围。
创建配置文件unschedule_node.yaml,在spec部分指定unschedulable 问true:

[root@master node]# cat unschedule_node.yaml 
apiVersion: v1
kind: Node
metadata:
  name: 192.168.0.222
  labels:
    kubernetes.io/hostname: k8s-node-1
spec: 
  unschedulable: true

然后,通过 kubectl replace 命令完成对Node 状态的修改:

[root@master node]# kubectl replace -f unschedule_node.yaml 
node/192.168.0.222 replaced
[root@master node]# kubectl get nodes
NAME            STATUS                     ROLES     AGE       VERSION
192.168.0.144   Ready                      <none>    25d       v1.11.6
192.168.0.148   Ready                      <none>    25d       v1.11.6
192.168.0.222   Ready,SchedulingDisabled   <none>    5d        v1.11.6

查看Node的状态,可以观察到在Node的状态中增加了一项SchedulingDisabled,对于后续创建的Pod,系统将不会再向该Node进行调度。也可以不使用配置文件,直接使用 kubectl patch 命令完成:
kubectl patch node k8s-node-1 -p '{"spec": {"unschedulaable": true}}'
需要注意的是,将某个Node脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在改Node是上运行的pod.
同样,如果需要将某个node重新纳入集群调度范围,则将unschedulable 设置为false,再次执行 kubectl replace 或者kubectl  patch 命令就能恢复系统对改node的调度。

第三种方法:
使用kubectl cordon <node_name> 对某个Node 进行隔离调度操作
[root@master node]# kubectl cordon 192.168.0.148
node/192.168.0.148 cordoned
[root@master node]# kubectl get nodes
NAME            STATUS                     ROLES     AGE       VERSION
192.168.0.144   Ready                      <none>    25d       v1.11.6
192.168.0.148   Ready,SchedulingDisabled   <none>    25d       v1.11.6
192.168.0.222   Ready,SchedulingDisabled   <none>    5d        v1.11.6

恢复调度操作:
[root@master node]# kubectl uncordon 192.168.0.222
node/192.168.0.222 uncordoned
[root@master node]# kubectl get nodes
NAME            STATUS    ROLES     AGE       VERSION
192.168.0.144   Ready     <none>    25d       v1.11.6
192.168.0.148   Ready     <none>    25d       v1.11.6
192.168.0.222   Ready     <none>    5d        v1.11.6

二、Node扩容
在k8s集群中,一个新node的加入是非常简单的。在新的node节点上安装Docker、kubelet和kube-proxy服务,然后配置kubelet和kube-proxy的启动参数,拷贝证书,最后启动这些服务。通过kubelet默认的自动注册机制,新的node将会自动加入现有的k8s集群中。
k8s master在接受了新Node的注册之后,会自动将其纳入当前集群的调度范围内,在之后创建容器时,就可以像新的Node进行调度了。
通过这种机制,实现集群中Node的扩容。
三、Namespace: 集群环境共享与隔离
1.创建namespace

[root@master yaml]# kubectl create namespace test
namespace/test created
[root@master yaml]# kubectl get namespace
NAME          STATUS    AGE
default       Active    55d
kube-public   Active    55d
kube-system   Active    55d
quizii        Active    42d
test          Active    9s
[root@master yaml]# kubectl delete namespace test
namespace "test" deleted

[root@master yaml]cat  namespace-devlopment.yaml
   apiVersion: v1
   kind: Namespace
   metadata:
        name: development
        
 # kubectl create -f namespace-development.yaml
    namespaces/developmentx
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐