k8s的ReplicaSet,DaemonSet及标签

发布时间:2020-03-01 17:19:27 作者:mb5cd21e691f31a
来源:网络 阅读:754

环境介绍

主机 IP地址 服务
master 192.168.1.21 k8s
node01 192.168.1.22 k8s
node02 192.168.1.23 k8s

基于[ https://blog.51cto.com/14320361/2464655]() 的实验继续进行

ReplicaSet简单介绍

1. RC:ReplicationController(老一代的pod控制器)

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

特点:

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

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

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

常用的标签分类:

标签要做到:见名知意。

3.测试

(1)编写一个pod的yaml文件

[root@master ~]# vim label.yaml 

kind: Pod
apiVersion: v1
metadata:
  name: labels
  labels:
    env: qa
    tier: frontend
spec:
  containers:
  - name: myapp
    image: httpd
<1>执行一下
[root@master ~]# kubectl apply -f label.yaml  --record 
<2>查看一下
[root@master ~]# kubectl get pod  --show-labels 
//通过--show-labels显示资源对象的

k8s的ReplicaSet,DaemonSet及标签

[root@master ~]# kubectl get po -L env,tier
//显示某个键对应的值

k8s的ReplicaSet,DaemonSet及标签

[root@master ~]# kubectl get po -l env,tier
//通过-l 查看仅包含某个标签的资源。

k8s的ReplicaSet,DaemonSet及标签

(2)添加标签

[root@master ~]# kubectl label pod  labels app=pc
//给pod资源添加标签

(3)修改标签

[root@master ~]# kubectl label pod labels env=dev --overwrite
//修改标签
[root@master ~]# kubectl get pod -l tier --show-labels 
//查看标签

k8s的ReplicaSet,DaemonSet及标签

(4)编写一个service的yaml文件

[root@master ~]# vim service.yaml
kind: Service
apiVersion: v1
metadata:
  name: service
spec:
  type: NodePort
  selector:
    env: qa
  ports:
  - protocol: TCP
    port: 90
    targetPort: 80
    nodePort: 30123
<1>执行一下
[root@master ~]# kubectl apply -f service.yaml 
<2>查看一下
[root@master ~]# kubectl describe svc

k8s的ReplicaSet,DaemonSet及标签

<3>访问一下
[root@master ~]# curl 127.0.0.1:30123

k8s的ReplicaSet,DaemonSet及标签

如果标签有多个,标签选择器选择其中一个,也可以关联成功。相反,如果选择器有多个,那么标签必须完全满足条件,才可以关联成功。

4. 标签选择器:标签的查询过滤条件。

[基于等值关系的(equality-based)]():“=”,“==”,“! =”前面两个都是相等,最后一个是不等于。

[基于集合关系(set-based)]():in、notin、exists三种。选择器列表间为“逻辑与”关系,使用ln或者NotIn操作时,其valuas不强制要求为非空的字符串列表,而使用Exists或DostNotExist时,其values必须为空

使用标签选择器的逻辑:

(1)例子

k8s的ReplicaSet,DaemonSet及标签

编写一个selector的yaml'文件
[root@master ~]# vim selector.yaml
selector:
  matchLabels:
    app: nginx
  mathExpressions:
    - {key: name,operator: In,values: [zhangsan,lisi]}
    - {key: age,operator: Exists,values:}

DaemonSet

它也是一种pod控制器。

RC,RS , deployment , daemonset.都是pod控制器。statfukSet,RBAC

1. 使用场景:

如果必须将pod运行在固定的某个或某几个节点,且要优先于其他的pod的启动。通常情况下,默认会将每一个节点都运行,并且只能运行一个pod。这种情况推荐使用DeamonSet资源对象。

[root@master ~]# kubectl get ds -n kube-system 
//查看一下DaemonSet

2. DaemonSet 与 Deployment 的区别

3. 运行一个web服务,在每一个节点运行一个pod。

[root@master ~]# vim daemonset.yaml

kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: test-ds
spec:
  template:
    metadata:
      labels:
        name: test-ds
    spec:
      containers:
      - name: test-ds
        image: httpd
<1>执行一下
[root@master ~]# kubectl apply -f daemonset.yaml 
<2>查看一下
[root@master ~]# kubectl get ds

k8s的ReplicaSet,DaemonSet及标签

总结

1)总结RC、RS、Deplyment、DaemonSet控制器的特点及使用场景。

<1>Replication Controller(RC)

介绍及使用场景

Replication Controller简称RCRCKubernetes系统中的核心概念之一,简单来说,RC可以保证在任意时间运行Pod的副本数量,能够保证Pod总是可用的。如果实际Pod数量比指定的多那就结束掉多余的,如果实际数量比指定的少就新启动一些Pod,当Pod失败、被删除或者挂掉后,RC都会去自动创建新的Pod来保证副本数量,所以即使只有一个Pod,我们也应该使用RC来管理我们的Pod

主要功能

<2>Replication Set(RS)

被认为 是“升级版”的RC。RS也是用于保证与label selector匹配的pod数量维持在期望状态。

实际上RSRC的功能基本一致,目前唯一的一个区别就是RC只支持基于等式的selector(env=dev或app=nginx),但RS还支持基于集合的selector(version in (v1, v2)),这对复杂的运维管理就非常方便了。

kubectl命令行工具中关于RC的大部分命令同样适用于我们的RS资源对象。不过我们也很少会去单独使用RS,它主要被Deployment这个更加高层的资源对象使用,除非用户需要自定义升级功能或根本不需要升级Pod,在一般情况下,我们推荐使用Deployment而不直接使用Replica Set

区别在于

1、RC只支持基于等式的selector(env=dev或environment!=qa),但RS还支持新的,基于集合的selector(version in (v1.0, v2.0)或env notin (dev, qa)),这对复杂的运维管理很方便。

2、升级方式

<3>DaemonSet

1. 特点:

如果必须将pod运行在固定的某个或某几个节点,且要优先于其他的pod的启动。通常情况下,默认会将每一个节点都运行,并且只能运行一个pod。这种情况推荐使用DeamonSet资源对象。

一个DaemonSet对象能确保其创建的Pod在集群中的每一台(或指定)Node上都运行一个副本。如果集群中动态加入了新的Node,DaemonSet中的Pod也会被添加在新加入Node上运行。删除一个DaemonSet也会级联删除所有其创建的Pod。

2. 使用环境

<4>Deployment

1. 什么是Deployment

Kubernetes Deployment提供了官方的用于更新Pod和Replica Set(下一代的Replication Controller)的方法,您可以在Deployment对象中只描述您所期望的理想状态(预期的运行状态),Deployment控制器为您将现在的实际状态转换成您期望的状态,例如,您想将所有的webapp:v1.0.9升级成webapp:v1.1.0,您只需创建一个Deployment,Kubernetes会按照Deployment自动进行升级。现在,您可以通过Deployment来创建新的资源(pod,rs,rc),替换已经存在的资源等。

你只需要在Deployment中描述你想要的目标状态是什么,Deployment controller就会帮你将Pod和Replica Set的实际状态改变到你的目标状态。你可以定义一个全新的Deployment,也可以创建一个新的替换旧的Deployment。

2. 典型的用例
3. 使用环境

Deployment集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本(成功/稳定)的Deployment等功能,在某种程度上,Deployment可以帮我们实现无人值守的上线,大大降低我们的上线过程的复杂沟通、操作风险。

3. DaemonSet 与 Deployment 的区别

2)使用DaemonSet控制器运行httpd服务,要求名称以自己的名称命名。标签为:tier=backend,env=dev.

[root@master ~]# vim daemonset.yaml 
kind: DaemonSet
apiVersion: extensions/v1beta1
metadata:
  name: xgp-ds
spec:
  template:
    metadata:
      labels:
        tier: backend
        env: dev
    spec:
      containers:
      - name: xgp-ds
        image: httpd

查看一下

[root@master ~]# kubectl get pod  --show-labels 

k8s的ReplicaSet,DaemonSet及标签

[root@master ~]# kubectl get pod -L env,tier

k8s的ReplicaSet,DaemonSet及标签

3) 创建service资源对象与上述资源进行关联,要有验证。

[root@master ~]# vim service.yaml 
kind: Service
apiVersion: v1
metadata:
  name: service
spec: 
  type: NodePort
  selector: 
    env: dev
  ports:    
  - protocol: TCP
    port: 90 
    targetPort: 80
    nodePort: 30123 

执行一下

[root@master ~]# kubectl apply -f service.yaml 

查看一下

[root@master ~]# kubectl describe svc

k8s的ReplicaSet,DaemonSet及标签

访问一下

[root@master ~]# curl 127.0.0.1:30123

k8s的ReplicaSet,DaemonSet及标签

4)整理关于标签和标签选择器都有什么作用?

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

<2>标签选择器:标签的查询过滤条件。

推荐阅读:
  1. ReplocaSet,DaemonSet
  2. daemonset 和 service服务

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

replicaset daemonset 标签

上一篇:2018-09-03期 Hive 分区表

下一篇:hbase 安装与讲解

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》