ReplicationController(老一代的Pod控制器)简称:RC

用于确保由其掌控的Pod对象副本数量,能够满足用户期望,多则删除,少则通过模板创建。

特点:

  • 确保Pod资源的对象的数量精准
  • 确保Pod健康运行
  • 弹性伸缩

同样,他也可以通过yaml或json格式的资源清单来创建。其中spec字段一般嵌套以下字段:

  • replicas:期望的Pod对象副本数量
  • selector:当前控制器匹配Pod对象副本的标签选择器
  • template:Pod副本的模板

与RC相比而言,RS不仅支持基于等值的标签选择器,而且还支持基于集合的标签选择器。

标签:解决同类型的资源对象越来越多,为了更好的管理,按照标签分组。

常用标签分类:
release(版本):stable(稳定版)、canary(金丝雀版本)、beta(测试版)
environment(环境变量):dev(开发)、qa(测试)、production(生产)
application(应用):ui、as(application software 应用软件)、pc、sc
tier(架构层级):frontend(前端)、backend(后端)、cache(缓存)
partition(分区):customerA(客户A)、customerB(客户B)
track(品控级别):daily(每天)、weekly(每周)
注:标签要做到,见名知意

#举个栗子,运行一个labels的yaml文件
[root@docker-k8s01 ~]# cat labels.yaml 
kind: Pod
apiVersion: v1
metadata: 
  name: pod-labels
  labels:
    env: qa
    tier: frontend
spec: 
  containers: 
  - name : myapp
    image: httpd
// --show-labels显示资源对象的标签
[root@docker-k8s01 ~]# kubectl get pod --show-labels
NAME         READY   STATUS    RESTARTS   AGE     LABELS
pod-labels   1/1     Running   0          2m19s   env=qa,tier=frontend
// -l 查看仅包含某个标签的资源
#就比如说-l后面加上env就是只查看包含env这个标签的资源
[root@docker-k8s01 ~]# kubectl get pod -l env
NAME         READY   STATUS    RESTARTS   AGE
pod-labels   1/1     Running   0          3m41s
# -L 最后会显示出这个标签的值
[root@docker-k8s01 ~]# kubectl get pod -L env
NAME         READY   STATUS    RESTARTS   AGE     ENV
pod-labels   1/1     Running   0          5m39s   qa
#给pod资源添加标签
[root@docker-k8s01 ~]# kubectl label pod labels app=pc
#删除标签
[root@docker-k8s01 ~]# kubectl label pod labels app-
#修改标签
[root@docker-k8s01 ~]# kubectl get pod -l tier --show-labels 

标签选择器:标签的查询过滤条件。
基于等值关系的(equality-based):“=”、“==”是相等,“!=”是不等。
基于集合关系的(set-based):in、notin、exists三种。

如果标签有多个,标签选择器选择其中一个,也可已关联成功。相反,如果选择器有多个,那么标签必须完全满足条件,才可以关联成功 !
ReplicaSet && DaemonSet 资源对象

//举个栗子
selector:
    matchLabels:
             app:nginx
        matchExpressions:
      // pod中有name这个关键字的,并且对应的值是:zhangsan或者lisi,那么此处会关联到PodA、PodB
                 - {key:name,operator:In,values:[zhangsan,lisi]}
      // 所有关键字是age的,并且忽略他的值,都会被选中,此处会关联到PodA、PodB、PodC
                 - {key:age,operator:Exists,values:}

matchLabels:指定键值对表示的标签选择器。
matchExpressions:基于表达式来指定的标签选择器。选择器列表间为“逻辑与”关系;使用in或者Notin操作时,其values不强制要求为非空的字符串列表,而使用Exists或DostNotExist时,其values必须为空。

.

使用标签选择器的逻辑:
1、同时指定的多个选择器之间的逻辑关系为“与”操作
2、使用空值的标签选择器意味着每个资源对象都将被选中。
3、空的标签选择器无法选中任何资源。

RS的资源清单和RC和Deployment并无二致,所以在此不再过多介绍。
.

DaemonSet,也是一种pod控制器
特点:他会在每一个node节点上都会生成并且只能生成一个pod资源。
如果必须需将Pod运行在固定的某个或某几个节点,且要优先于其他Pod的启动。通常情况下,默认会每一个节点都会运行,并且只能运行一个Pod。这种情况推荐使用DaemonSet资源对象。

监控程序;
日志收集程序;

//运行一个web服务,在每一个节点上都运行一个Pod
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: test-ds
spec:
  template:
    metadata:
      labels:
        name: test-ds
    spec:
      containers:
      - name: test-ds
        image: httpd
[root@docker-k8s01 ~]# kubectl apply -f daemonset.yaml 
daemonset.extensions/test-ds created
[root@docker-k8s01 ~]# kubectl get ds          # 可以看到已经运行两个
NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
test-ds   2         2         1       2            1           <none>          16s
#查看pod运行情况,可以看到两个已经分别运行在02和03 节点上了
[root@docker-k8s01 ~]# kubectl get pod -o wide             
NAME            READY   STATUS    RESTARTS   AGE   IP            NODE           NOMINATED NODE   READINESS GATES
test-ds-4h8sx   1/1     Running   0          49s   10.244.2.11   docker-k8s03   <none>           <none>
test-ds-qbbmx   1/1     Running   0          49s   10.244.1.10   docker-k8s02   <none>           <none>

RC、RS、Deployment、DaemonSet。Pod控制器 最终目的---> controller-manager(维护集群状态,保证Pod处于期望的状态。)