Node的扩缩容

在实际生产系统中经常遇到服务器容量不足的情况,这时候就需要购买新的服务器,对应用系统进行水平扩展以实现扩容。

在k8s中,对一个新的node的加入非常简单,只需要在node节点上安装docker、kubelet和kube-proxy服务,然后将kubelet和kube-proxy的启动参数中的master url指定为当前kubernetes集群master的地址,然后启动服务即可。基于kubelet的自动注册机制,新的node会自动加入现有的kubernetes集群中,如下图:

kubernetes master在接受了新node的注册之后,会自动将其纳入当前集群的调度范围内,在之后创建容器时,就可以向新的node进行调度了。

删除node节点

kubectl delete node k8s-node1

Node的隔离与恢复

在硬件升级、硬件维护的情况下,我们需要将某些Node进行隔离,脱离k8s的调度范围。k8s提供了一套机制,既可以将Node纳入调度范围,也可以将Node脱离调度范围。

通过配置文件实现

创建配置文件unschedule_node.yml,内容如下:

apiVersion: v1
kind: Node
metadata:
name: k8s-node1
labels:
namne: k8s-node1
spec:
unschedulable: true

然后执行该配置文件,即可将指定的node脱离调度范围:

kubectl replace -f unschedule_node.yml

通过命令行的方式实现

kubectl patch node k8s-node1 -p '{"spec":"{"unschedulable":"true"}"}'

恢复

无论上面哪一种方法,其实都是将unsechdulable的值改为true,实现 了隔离,同理,恢复时,只需要将unschedulable的值改为false即可。

当然这里还有另一种更简单的方式:

kubectl cordon k8s-node1	#将k8s-node1节点设置为不可调度模式
kubectl drain k8s-node1 #将当前运行在k8s-node1节点上的容器驱离 kubectl uncordon k8s-node1 #执行完维护后,将节点重新加入调度

更新资源对象的label

label作为用户可灵活定义的对象属性,在已创建的对象上仍然可以通过kubectl label命令对其进行增删改等操作

给一个node添加一个label

kubectl label node k8s-node1 role=backend

删除label,只需要在命令行最后指定label的key名,并加一个减号即可:

kubectl label node k8s-node1 role-

将pod调度到指定的node

我们知道,Kubernetes的Scheduler服务(kube-scheduler进程)负责实现Pod的调度,整个调度过程通过执行一系列复杂的算法最终为每个Pod计算出一个最佳的目标节点,这一过程是自动完成的,我们无法知道Pod最终会被调度到哪个节点上。有时我们可能需要将Pod调度到一个指定的Node上,此时,我们可以通过Node的标签(Label)和Pod的nodeSelector属性相匹配,来达到上述目的。

使用kubectl label给node打标签的用法如下:

kubectl label nodes <node-name> <label-key>=<label-value>

下面的示例,为k8s-node1打上一个project=gcxt的标签:

kubectl label nodes k8s-node1 project=gcxt

在pod中加入nodeSelector定义,示例如下:

apiVersion: v1
kind: ReplicationController
metadata:
name: memcached-gcxt
labels:
name: memcached-gcxt
spec:
replicas: 1
selector:
name: memcached-gcxt
template:
metadata:
labels:
name: memcached-gcxt
spec:
containers:
- name: memcached-gcxt
image: myhub.fdccloud.com/library/memcached
command:
- memcached
- -m 64
ports:
- containerPort: 11211
nodeSelector:
project: gcxt

运行kubectl create -f命令创建pod,scheduler就会将该pod调度到拥有project=gcxt标签的node上去。

这种基于Node标签的调度方式灵活性很高,比如我们可以把一组Node分别贴上“开发环境” “测试环境” “生产环境”这三组标签中的一种,此时一个Kubernetes集群就承载了3个环境,这将大大提高开发效率。

需要注意的是,如果我们指定了Pod的nodeSelector条件,且集群中不存在包含相应标签的Node时,即使还有其他可供调度的Node,这个Pod也最终会调度失败。

kubernetes node管理的更多相关文章

  1. 三、安装并配置Kubernetes Node节点

    1. 安装并配置Kubernetes Node节点 1.1 安装Kubernetes Node节点所需服务 yum -y install kubernetes   通过yum安装kubernetes服 ...

  2. Kubernetes 对象管理的三种方式

    Kubernetes 中文文档 1. Kubernetes 对象管理的三种方式对比 Kubernetes 中的对象管理方式,根据对象配置信息的位置不同可以分为两大类: 命令式:对象的参数通过命令指定 ...

  3. f2fs解析(八)node 管理器中的node_info

    free_info 功成身退,node_info顺利接班. // 这里还是蛮复杂的一件事,如果不搞清除的话,这个历史性的接班工作我们就接不上 上面说到 alloc_nid 和 alloc_nid_do ...

  4. f2fs解析(七)node管理器中的 free_nid 结构体

    除了node_info之外, node管理器中还有还有个重要的数据结构: struct free_nid { struct list_head list; /* for free node id li ...

  5. f2fs源码解析(五) node管理结构梳理

    node是f2fs重要的管理结构, 它非常重要! 系统挂载完毕后, 会有一个f2fs_nm_info结构的node管理器来管理node的分配. f2fs_nm_info中最让人疑惑的是几颗基数树: s ...

  6. Gravitational Teleport 开源的通过ssh && kubernetes api 管理linux 服务器集群的网关

    Gravitational Teleport 是一个开源的通过ssh && kubernetes api 管理linux 服务器集群的网关 支持以下功能: 基于证书的身份认证 ssh ...

  7. 阿里巴巴 Kubernetes 应用管理实践中的经验与教训

    作者 | 孙健波(阿里巴巴技术专家).赵钰莹 导读:云原生时代,Kubernetes 的重要性日益凸显.然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自 ...

  8. Kubernetes Ingress管理

    目录 Ingress介绍 1.Pod漂移问题 2.端口管理问题 3.域名分配及动态更新问题 Nginx Ingress配置 1.部署默认后端 2.部署Ingress Controller 3.部署In ...

  9. Kubernetes应用管理器OpenKruise之CloneSet

    OpenKruise OpenKruise 是 Kubernetes 的一个标准扩展,它可以配合原生 Kubernetes 使用,并为管理应用容器.sidecar.镜像分发等方面提供更加强大和高效的能 ...

随机推荐

  1. oracle和mysql在sql中生成uuid的方法

    1,oracle sys_guid() 2,mysql uuid()

  2. Bing词典vs有道词典比对测试报告——功能篇之辅助功能,差异化功能及软件的效能

    1.辅助功能: 和有道相比,必应的词典加入了换肤功能,用户可以选择喜欢的颜色,而且必应的皮肤也比较多,这一点设计给必应增色不少. 相对而言,有道则加入了调节客户端字体的大小,如下,也比较人性化 2.差 ...

  3. Scrum Meeting 11.05

    成员 今日任务 明日计划 用时 徐越 代码移植 学习ListView+simpleAdapter,actionBar.阅读并修改前端代码 4h 赵庶宏 服务器配置,代码移植  构建后端数据库,进行完善 ...

  4. 任务看板-Monday

    工作照

  5. 复杂PC问题——信号量与共享存储区

    #include <stdio.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.h ...

  6. linshi18

    #include<iostream> using namespace std; int n,m,k; #define max 100 char mmap[max][max]; int mm ...

  7. srTCM和trTCM介绍

    本文是用于QoS Meter功能的算法的RFC的阅读笔记.DPDK的QoS_meter示例程序用的就是这个算法. srTCM srTCM的英文全称是Single Rate Three Color Ma ...

  8. [二叉树建树&完全二叉树判断] 1110. Complete Binary Tree (25)

    1110. Complete Binary Tree (25) Given a tree, you are supposed to tell if it is a complete binary tr ...

  9. <构建之法>第一二三章感悟

    第一章: 看了大概了解软件从一个想法到最终成品的一个过程.软件先是由一个想法引出的,有那个想法,你需要一个工具去做什么,根据自己想要的功能大概做一个能实现基本功能的软件,对客户提出的要求进行完善,实现 ...

  10. Scrum 冲刺博客链接集合

    DAY1 http://www.cnblogs.com/qiaokeliweibaba/p/8901187.html DAY2 http://www.cnblogs.com/qiaokeliweiba ...