DaemonSet控制器简述:

DaemonSet在整个集群的每一个节点上运行指定pod的一个副本并且只能是一个副本,或者是在集群中某些符合选择器的节点上运行一个指定的pod副本,用于实现系统级的管理功能,可以把节点上的某个目录作为存储卷关联到pod中,让pod实现某些管理功能

一:创建一个DaemonSet实例

[root@k8s-master manifests]# vim ds-demo.yaml  
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: filebeat-ds
  namespace: default
spec:
  selector:
    matchLabels:
      app: filebeat
      release: stable
  template:
    metadata:
      labels:
        app: filebeat
        release: stable
    spec:
      containers:
      - name: filebeat
        image: ikubernetes/filebeat:5.6.5-alpine
        env:
        - name: REDIS_HOST
          value: redis.default.svc.cluster.local
        - name: REDIS_LOG_LEVEL
          value: info
[root@k8s-master manifests]# kubectl apply -f ds-demo.yaml  声明一个yaml文件。
[root@k8s-master manifests]# kubectl get ds    查看daemonset创建 
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
filebeat-ds   2         2         2       2            2           <none>          6d19h

[root@k8s-master manifests]# kubectl get pods -l app=filebeat -o wide   这里可以看出一个节点只运行一个pod副本。
NAME                READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
filebeat-ds-75zx9   1/1     Running   0          6d19h   10.244.1.31   k8s-node1   <none>           <none>
filebeat-ds-8tcn7   1/1     Running   0          6d19h   10.244.2.17   k8s-node2   <none>           <none>

[root@k8s-master manifests]# kubectl explain ds.spec.updateStrategy  查看daemonSet的更新策略
支持两种更新策略:RollingUpdate(滚动更新),  OnDelete(表示一删除就更新)
KIND:     DaemonSet
VERSION:  apps/v1

RESOURCE: updateStrategy <Object>

DESCRIPTION:
     An update strategy to replace existing DaemonSet pods with new pods.

     DaemonSetUpdateStrategy is a struct used to control the update strategy for
     a DaemonSet.

FIELDS:
   rollingUpdate	<Object>
     Rolling update config params. Present only if type = "RollingUpdate".

   type	<string>
     Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is
     RollingUpdate.

[root@k8s-master manifests]# 

二:修改daemonset控制器镜像版本,进行版本更新

[root@k8s-master manifests]# kubectl set image daemonSet filebeat-ds filebeat=ikubernetes/filebeat:5.6.6-alpine
daemonset.apps/filebeat-ds image updated
[root@k8s-master manifests]# 
[root@k8s-master manifests]# kubectl get pods -l app=filebeat -o wide
NAME                READY   STATUS              RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
filebeat-ds-75zx9   1/1     Running             0          6d19h   10.244.1.31   k8s-node1   <none>           <none>
filebeat-ds-dgk75   0/1     ContainerCreating   0          20s     <none>        k8s-node2   <none>           <none>
[root@k8s-master manifests]# kubectl get ds -o wide  查看到镜像已经变动到5.6.6版本了
NAME          DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE     CONTAINERS   IMAGES                              SELECTOR
filebeat-ds   2         2         1       2            1           <none>          6d19h   filebeat     ikubernetes/filebeat:5.6.6-alpine   app=filebeat,release=stable

[root@k8s-master manifests]# kubectl rollout history daemonset    查看daemonset的历史版本
daemonset.apps/filebeat-ds 
REVISION  CHANGE-CAUSE
1         <none>
2         <none>
[root@k8s-master manifests]# kubectl rollout undo daemonset --to-revision=1  让镜像版本重新回滚到v1版,回滚只回滚到上一个版本。
daemonset.apps/filebeat-ds rolled back

[root@k8s-master manifests]# kubectl rollout history daemonset  当回滚到v1版在查看历史版本变成23。
daemonset.apps/filebeat-ds 
REVISION  CHANGE-CAUSE
2         <none>
3         <none>
[root@k8s-master manifests]# kubectl explain pod.spec
hostNetwork:pod可以直接使用主机的名称空间,那么当我们使用Daemonset控制器来创建pod时,可以指明让pod共享主机的网络名称空间,因为daemonset状态是一个节点只运行一个pod副本。
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐