kubernetes 集群资源管理

为了管理异构和不同配置的主机,为了便于pod的运维管理,kubernetes中提供了很多集群的配置信息管理功能,通过namespace划分空间,通过为node节点创建label和taint用于pod的调度

Node:  node是kubernetes集群的工作节点,可以是物理机也可以是虚拟机。

Node的状态:address、condition、capacity、info

 

Node包括如下状态信息:

  • Address
    • HostName:可以被kubelet中的--hostname-override参数替代。
    • ExternalIP:可以被集群外部路由到的IP地址。
    • InternalIP:集群内部使用的IP,集群外部无法访问。
  • Condition
    • OutOfDisk:磁盘空间不足时为True
    • Ready:Node controller 40秒内没有收到node的状态报告为Unknown,健康为True,否则为False。
    • MemoryPressure:当node没有内存压力时为True,否则为False。
    • DiskPressure:当node没有磁盘压力时为True,否则为False。
  • Capacity
    • CPU
    • 内存
    • 可运行的最大Pod个数
  • Info:节点的一些版本信息,如OS、kubernetes、docker等

 Node管理

禁止pod调度到该节点上

kubectl  cordon  <node>

驱逐该节点上的所有pod

kubectl  drain   <node>

该命令会删除该节点上的所有Pod(DaemonSet除外),在其他node上重新启动它们,通常该节点需要维护时使用该命令。直接使用该命令会自动调用kubectl cordon <node>命令。当该节点维护完成,启动了kubelet后,再使用kubectl uncordon <node>即可将该节点添加到kubernetes集群中。

 

===============================================================================================================================================================================

Namespace:

在一个Kubernetes集群中可以使用namespace创建多个“虚拟集群”,这些namespace之间可以完全隔离,也可以通过某种方式,让一个namespace中的service可以访问到其他的namespace中的服务

哪些情况下适合使用多个namespace

因为namespace可以提供独立的命名空间,因此可以实现部分的环境隔离。当你的项目和人员众多的时候可以考虑根据项目属性,例如生产、测试、开发划分不同的namespace。

namespace的使用:

获取集群中的namespace:    kubectl  get  ns

集群中默认会有default和kube-system这两个namespace。

在执行kubectl命令时可以使用-n指定操作的namespace。

用户的普通应用默认是在default下,与集群管理相关的为整个集群提供服务的应用一般部署在kube-system的namespace下,例如我们在安装kubernetes集群时部署的kubedns、heapseter、EFK等都是在这个namespace下面。

另外,并不是所有的资源对象都会对应namespace,node和persistentVolume就不属于任何namespace。

 

==============================================================================================================================================================================

label:

如Service通过label selector将同一类型的pod作为一个服务expose出来。

 

动机:

posted on 2018-04-09 18:49  步行者811  阅读(163)  评论(0)    收藏  举报

导航