Linux云计算 |【第五阶段】CLOUD-DAY8

主要内容:

掌握DaemonSet控制器、污点策略(NoSchedule、Noexecute)、Job / CronJob资源对象、掌握Service服务、服务名解析CluterIP(服务名自动发现)、(Nodeport、Headless)、Ingress控制器

一、DaemonSet控制器

DaemonSet在每个机器都要启动运行Pod时,确保全部或一些Node上运行Pod副本当有Node节点加入集群时,也会为他新增Pod副本,当Node从集群移除时,这些Pod也会被回收;(有多少个Node节点,就在每个节点上运行Pod副本)

删除DaemonSet控制器时,将删除所有它创建的Pod副本;

典型应用:Ceph节点、监控节点、Filebeat日志收集等;

系统服务:Kube-proxy和Flannel就是这种类型;

DaemonSet与Deployment在编写配置文件时非常相似,区别是不需要配置replicas参数POD副本数,因为DaemonSet是每节点启动Pod副本;

  • 格式:kubectl -n kube-system get daemonsets.apps     //查看DaemonSet控制器

补充:查询daemonsets.apps发现flannel和proxy的每个节点都创建了Pod副本,且没有二级控制器RS;(架构:daemonset-pod)

DaemonSet资源文件模板


编写DaemonSet资源文件示例:

[root@master ~]# vim mynginx.yaml
---                     //资源定义起始标志
kind: DaemonSet         //创建资源的类型(DaemontSet控制器,注意大小写)
apiVersion: apps/v1     //控制器资源类型的版本
metadata:               //控制器资源的元数据
  name: mynginx         //控制器资源的名称(mynginx)
spec:                   //控制器资源的详细定义
  selector:             //声明资源匹配选择器
    matchLabels:        //资源方式:匹配标签
      myapp: nginx     //为服务的后端选择标签(具体匹配的标签,与labels要一致)
  template:            //POD资源模板定义
    metadata:          //POD资源的元数据
      labels:          //声明定义标签
        myapp: nginx   //标签名(与matchLabels要一致)
    spec:              //容器的详细定义
      containers:             //容器定义
      - name: nginxcluster    //容器名称
        image: 192.168.1.100:5000/myos:nginx    //启动容器的镜像地址
        stdin: false        //标准输入,默认false
        tty: false          //终端,默认false
        ports:              //服务端口定义
        - protocol: TCP      //服务使用的协议
          containerPort: 80   //容器监听的端口号
      restartPolicy: Always    //容器的死亡策略

[root@master ~]# kubectl apply -f mynginx.yaml
daemonset.apps/mynginx created
[root@master ~]# kubectl get pod -o wide

# DaemonSet控制器自动为所有节点上运行Pod副本;

[root@master ~]# kubectl get daemonsets.apps
NAME      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
mynginx   3         3         3       3            3           <none>          12m

# 测试效果

[root@master ~]# curl http://10.244.2.13
this is nginx
[root@master ~]# curl http://10.244.1.11
this is nginx
[root@master ~]# curl http://10.244.3.19
this is nginx

思考:

在查询Pod资源时,发现Proxy和Flannel的Pod资源是有4个Pod副本;而执行编写的daemonset资源文件时,只有3个副本;DaemonSet调度器调度到除Master以外的所有节点,因希望Master节点除了一些系统服务以外,不会再有其它的POD副本,防止其它消耗高的POD抢占资源;而默认在Master上设置了污点策略,所以其它POD副本不会在Master上部署;

二、污点策略

1、污点标签

NoSchedule:不会被调度(容器创建时有效)

PreferNoSchedule:尽量不调度(容器创建时有效)

NoExecute:驱逐节点(容器创建、运行时都有效),针对不同控制器有不同效果;

1)查看污点标签

  • - 格式:kubectl describe nodes | grep -P "^Taints"
  • - 格式:kubectl describe node [node-name]    //查看节点详细信息(Taints)

2)设置污点标签

- 格式:kubectl taint node =

删除污点标签

- 格式:kubectl taint node -


示例1:污点标签NoSchedule配置(创建容器时有效)

① 设置污点标签(在daemonset的资源文件上测试)

[root@master ~]# kubectl delete -f mynginx.yaml    //删除资源,重新创建
daemonset.apps "mynginx" deleted
[root@master ~]# kubectl describe nodes | grep -P "^Taints"

[root@master ~]# kubectl taint node node-0001 k1=v1:NoSchedule   //设置污点标签
node/node-0001 tainted
[root@master ~]# kubectl describe nodes | grep -P "^Taints"

[root@master ~]# kubectl apply -f mynginx.yaml
daemonset.apps/mynginx created
[root@master ~]# kubectl get pods   //设置污点标签后,只有2节点有POD副本
NAME            READY   STATUS    RESTARTS   AGE
mynginx-6j8h4   1/1     Running   0          9s
mynginx-8g2wc   1/1     Running   0          9s

② 删除污点标签

[root@master ~]# kubectl taint node node-0001 k1-
node/node-0001 untainted

[root@master ~]# kubectl get pods   //移除污点标签后,3节点都有POD副本
NAME            READY   STATUS    RESTARTS   AGE
mynginx-6j8h4   1/1     Running   0          68s
mynginx-8g2wc   1/1     Running   0          68s
mynginx-z4k4k   1/1     Running   0          39s

解释:为node-0001节点设置NoSchedule污点标签后,在创建容器时,不会对该节点调度创建Pod副本;移除NoSchedule污点标签后,会自动重新调度分配Pod副本;


示例2:污点标签NoExecute配置(创建、运行容器时都有效)

针对不同的控制器配置污点标签NoExecute会有不同效果

[root@master ~]# kubectl get pod    //当前运行的Pod容器(DaemonSet控制器)
NAME            READY   STATUS    RESTARTS   AGE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值