接下来我们来看看第二个控制器:DaemonSet的讲解。
1、什么是DaemonSet?
DaemonSet是一个确保每个符合规则的node节点有且仅有一个对应Pod的控制器。
你要注意以下两点:
1.新节点加入集群,也会新增一个Pod
2.当节点下线后,相应Pod也会被回收
DaemonSet控制器的应用场景,就是解决日志收集、监控系统等客户端部署的刚需。
2、命令补充
我们可以使用kubectl get ds查看DaemonSet
[root@centos-1 mainfasts]# kubectl get ds -A
NAMESPACE NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kube-system kube-flannel-ds-amd64 3 3 3 3 3 <none> 4d1h
kube-system kube-flannel-ds-arm 0 0 0 0 0 <none> 4d1h
kube-system kube-flannel-ds-arm64 0 0 0 0 0 <none> 4d1h
kube-system kube-flannel-ds-ppc64le 0 0 0 0 0 <none> 4d1h
kube-system kube-flannel-ds-s390x 0 0 0 0 0 <none> 4d1h
kube-system kube-proxy 3 3 3 3 3 beta.kubernetes.io/os=linux 4d1h
上面的flannel控制器,正是我们初始化集群的时候作用的。
它先根据node机器特征,使用其对应架构的flannel控制器;
然后根据DaemonSet控制器的特性,在每个node节点部署一个,且只部署一个!
3、实战配置
正如我上文所述,日志收集的业务场景是C/S架构,我们需要在待收集的机器部署一个客户端应用。
那我们一起来看一下,如何通过DaemonSet控制器来做这个事情呢?
1、首先,编辑filebeat-daemonset.yaml,这里我们创建了一个filebeat的daemonset控制器,他们会和日常需求一样,在每个客户端node节点部署一个filebeat的pod容器。
你要注意:我们这里使用了一个节点的选择器:logcollecting: “on”,节点上默认是没有这个标签的!
还记得如何给节点打标签吗?
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat-ds
labels:
app: filebeat
spec:
selector:
matchLabels:
app: filebeat
template:
metadata:
labels:
app: filebeat
spec:
containers:
- name: filebeat
image: prima/filebeat:6.4.2
env:
- name: REDIS_HOST
value: test.com:6379
- name: LOG_LEVEL
value: info
nodeSelector: #节点选择器
logcollecting: "on" #自定义标签
2、使用apply -f载入yaml,并观察。
可以发现,由于自定义标签的定义,没有符合的node节点,所以pod一个都没有生成!
[root@centos-1 mainfasts]# kubectl apply -f filebeat-daemonset.yaml
daemonset.apps/filebeat-ds created
[root@centos-1 mainfasts]# kubectl get pod
NAME READY STATUS RESTARTS AGE
ngx-new-cb79d555-gqwf8 1/1 Running 0 29h
ngx-new-cb79d555-hcdr9 1/1 Running 0 30h
[root@centos-1 mainfasts]# kubectl get ds
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
filebeat-ds 0 0 0 0 0 logcollecting=on 8s
3、接下来,我们尝试给node01节点打上对应标签,发现pod已经开始调度至对应节点了
[root@centos-1 mainfasts]# kubectl label node centos-2.shared logcollecting="on" --overwrite
node/centos-2.shared labeled
[root@centos-1 mainfasts]# kubectl get pod
NAME READY STATUS RESTARTS AGE
filebeat-ds-dlxwn 0/1 CrashLoopBackOff 1 5s
ngx-new-cb79d555-gqwf8 1/1 Running 0 29h
ngx-new-cb79d555-hcdr9 1/1 Running 0 30h
[root@centos-1 mainfasts]# kubectl get node --show-labels
NAME STATUS ROLES AGE VERSION LABELS
centos-1.shared Ready master 4d v1.16.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=centos-1.shared,kubernetes.io/os=linux,node-role.kubernetes.io/master=
centos-2.shared Ready <none> 4d v1.16.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=centos-2.shared,kubernetes.io/os=linux,logcollceting=true,logcollecting=on
centos-3.shared Ready <none> 4d v1.16.3 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=centos-3.shared,kubernetes.io/os=linux
4、去除标签,你可以使用以下命令
kubectl label node centos-2.shared logcollceting-
4、知识点扩展
不知大家是否发现一个现象:
资源的部署创建始终没有在master节点上调度!为什么?
答案:Master节点有Taints污点(NoSchedule),所以未定义容忍度的资源是不会调度上来的!
Taints:node-role.kubernetes.io/master:NoSchedule
[root@centos-1 mainfasts]# kubectl describe node centos-1.shared
Name: centos-1.shared
Roles: master
Labels: beta.kubernetes.io/arch=amd64
beta.kubernetes.io/os=linux
kubernetes.io/arch=amd64
kubernetes.io/hostname=centos-1.shared
kubernetes.io/os=linux
node-role.kubernetes.io/master=
Annotations: flannel.alpha.coreos.com/backend-data: {"VtepMAC":"6a:82:c9:37:15:dd"}
flannel.alpha.coreos.com/backend-type: vxlan
flannel.alpha.coreos.com/kube-subnet-manager: true
flannel.alpha.coreos.com/public-ip: 192.168.0.104
kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
node.alpha.kubernetes.io/ttl: 0
volumes.kubernetes.io/controller-managed-attach-detach: true
CreationTimestamp: Mon, 25 Nov 2019 17:00:45 +0800
Taints: node-role.kubernetes.io/master:NoSchedule. #污点,pod调度的高级功能,不允许调度至master节点
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。