基础概念
Pod
Pod 是Kubernetes 最重要的基本概念,是Kubernetes的最小调度单位。
每个Pod都有一个特殊的被称 为“根容器”的Pause容器。除了Pause跟容器外,每个Pod还包含了一个或多个紧密相关的用户业务容器。
- 在实际情况下,存在多个紧密相关的业务容器需要部署为一组容器,那么pod支持将多个容器部署在一个pod,pod里的多个业务容器共享pause的IP和Volume,解决了密切关联的容器之间的通信问题,数据共享问题。
- 一个pod里面包含多个业务容器,在这种情况下,Kubernetes无法对pod这个整体的状态做出正确的判断。所以引入了Pause根容器,以pause根容器的状态来代表pod的状态。例如:pod是否死亡的问题。
Kubernetes为每个Pod都分配了唯一的IP地址,称之为Pod IP。
一个Pod里的多个容器共享PodIP地址。
Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信。例如:flannel、Open vSwitch等。因此,我们需要记住一个pod里的容器与另外主机上的Pod容器能够直接通信。Pod有两种类型:
- 普通pod:pod被创建后,会被存放到etcd中,随后被调度到具体的node节点上运行。在默认情况下,当pod里的某个容器停止运行时,Kubernetes会自动检测到这个问题并重新启动这个pod,如果pod所在node机器出现宕机,就会将这个node上的pod重新调度到其他node上。
- 静态pod:静态pod被存放到某个具体的Node上的具体的文件当中,并且只在该node上启动、运行,不能被调度到其他节点。例如:master节点组件均是以静态pod的方式运行,文件存放目录为:/etc/kubernetes/manifests/
另外,对于绝大多数容器来说,一个CPU的资源配额相当大,所以在Kubernetes里通常以千分之一的CPU配额为最小单位,用m来表示。通常一个容器的CPU配个被定义为100-300m,即占用0.1~0.3个 CPU。
spec:
containers:
- name: db
image: mysql
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
通常,Requests被设置为一个较小的值,表示容器平时的工作负载情况下的资源需求,而limits设置为峰值负载情况下资源占用的最大值。
Label
Label(标签)是Kubernetes系统中另外一个核心概念。一个Label是一个key=value的键值对,其中key 与value由用户自己指定。Label可以被附加到各种资源对象上,例如:Node、Pod、Service、RC等。 一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。通过给 指定资源对象绑定Label从而实现资源对象的分组管理,方便Kubernetes进行资源分配、调度和部署等工作。通过给指定的资源对象绑定一个或多个不同的Label来实现多维度的资源分组管理功能,以便灵活、方便地进行资源分配、调度、部署等管理工作。例如:版本标签:release:stable、release:beta 环境标签:environment:dev、environment:qa、environment:production 通过Label为资源对象贴上相对应的标签,随后通过Label Selector(标签选择器)查询和筛选拥有某些 Label的资源对象。当前有两种Label Selector 表达式:
1. 基于等式:name=myweb,env!=production
2. 基于集合:name in (myweb,myweb1),name not in (myweb,myweb1)
可通过多个Label Selector 表达式的组