溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Kubernetes 資源對(duì)象之DaemonSet

發(fā)布時(shí)間:2020-07-19 21:51:25 來(lái)源:網(wǎng)絡(luò) 閱讀:2826 作者:JasonMingHao 欄目:云計(jì)算

DaemonSet是在Kubernetes1.2 版本新增的一種資源對(duì)象

DaemonSet能夠讓所有(或者一些特定)的Node節(jié)點(diǎn)僅運(yùn)行一份Pod。當(dāng)節(jié)點(diǎn)加入到kubernetes集群中,Pod會(huì)被(DaemonSet)調(diào)度到該節(jié)點(diǎn)上運(yùn)行,當(dāng)節(jié)點(diǎn)從kubernetes集群中被移除,被(DaemonSet)調(diào)度的Pod會(huì)被移除,如果刪除DaemonSet,所有跟這個(gè)DaemonSet相關(guān)的pods都會(huì)被刪除。

在使用kubernetes來(lái)運(yùn)行應(yīng)用時(shí),很多時(shí)候我們需要在一個(gè)區(qū)域(zone)或者所有Node上運(yùn)行同一個(gè)守護(hù)進(jìn)程(pod),例如如下場(chǎng)景:

  • 每個(gè)Node上運(yùn)行一個(gè)分布式存儲(chǔ)的守護(hù)進(jìn)程,例如glusterd,ceph
  • 運(yùn)行日志采集器在每個(gè)Node上,例如fluentd,logstash
  • 運(yùn)行監(jiān)控的采集端在每個(gè)Node,例如prometheus node exporter,collectd等

DaemonSet的Pod調(diào)度策略與RC很類似,除了使用系統(tǒng)內(nèi)置的調(diào)度算法在每個(gè)Node上進(jìn)行調(diào)度,也可以在Pod定義中使用NodeSelector或NodeAffinity來(lái)指定滿足條件的Node范圍進(jìn)行調(diào)度

DaemonSet 資源文件格式

apiVersion: extensions/v1beta1
kind: DaemonSet
  metadata:

1.下面例子定義為在每個(gè)Node上都啟動(dòng)一個(gè)filebeat容器,其中掛載了宿主機(jī)目錄"/var/log/messages"

$ vi k8s-log-filebeat.yaml
apiVersion: v1
kind: ConfigMap # 定義一個(gè)config文件內(nèi)容
metadata:
  name: k8s-logs-filebeat-config
  namespace: kube-system
data:
  # 填寫filebeat讀取日志相關(guān)信息
  filebeat.yml: |-
    filebeat.prospectors:
      - type: log
        paths:
          - /messages
        fields:
          app: k8s
          type: module
        fields_under_root: true
    output.logstash:
      # specified logstash port (by default 5044)
      hosts: ['10.0.0.100:5044']
---
apiVersion: apps/v1
kind: DaemonSet  # DaemonSet 對(duì)象,保證在每個(gè)node節(jié)點(diǎn)運(yùn)行一個(gè)副本
metadata:
  name: k8s-logs
  namespace: kube-system
spec:
  selector:
    matchLabels:
      project: k8s
      app: filebeat
  template:
    metadata:
      labels:
        project: k8s
        app: filebeat
    spec:
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat:6.8.1
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
          limits:
            cpu: 500m
            memory: 500Mi
        securityContext:
          runAsUser: 0
        # 進(jìn)行實(shí)際掛載操作
        volumeMounts:
        # 將configmap里的配置掛載到 /etc/filebeat.yml 文件中
        - name: filebeat-config
          mountPath: /etc/filebeat.yml
          subPath: filebeat.yml

        # 將宿主機(jī)  /var/log/messages 路徑掛載到 /messages中
        - name: k8s-logs
          mountPath: /messages
      # 定義卷
      volumes:
      - name: k8s-logs
        hostPath:
          path: /var/log/messages
          type: File
      - name: filebeat-config
        configMap:
          name: k8s-logs-filebeat-config

2.使用kubectl create 命令創(chuàng)建該DeamonSet

$ kubectl create -f  k8s-log-filebeat.yaml
configmap/k8s-logs-filebeat-config created
daemonset.apps/k8s-logs created

3.查看創(chuàng)建好的DeamonSet和Pod,可以看到在每個(gè)Node上都創(chuàng)建了一個(gè)Pod

$ kubectl get ds -n kube-system | grep "k8s-logs"
NAME            DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                 AGE
k8s-logs                  2         2         0       2            0           <none>                        2m15s

$ kubectl get pods -n kube-system -o wide | grep "k8s-logs"  
k8s-logs-gw4bs                         0/1     Running   0          87s     <none>        k8s-node01     <none>           <none>
k8s-logs-p6r6t                         0/1     Running   0          87s     <none>        k8s-node02     <none>           <none>

在kubernetes 1.6以后的版本中,DaemonSet也能執(zhí)行滾動(dòng)升級(jí)了,即在更新一個(gè)DaemonSet模板的時(shí)候,舊的Pod副本會(huì)被自動(dòng)刪除,同時(shí)新的Pod副本會(huì)被自動(dòng)創(chuàng)建,此時(shí)DaemonSet的更新策略(updateStrategy)為RollingUpdate,如下:

apiVersion: apps/v1
kind: DaemonSet 
metadata:
  name: k8s-logs
  namespace: kube-system
spec:
  updateStrategy:
    type: RollingUpdate

updateStrategy 的另外一個(gè)值是OnDelete,即只有當(dāng)手工刪除了DaemonSet創(chuàng)建的Pod副本,新的Pod副本才會(huì)被創(chuàng)建出來(lái),如果不設(shè)置updateStrategy的值,則在kubernetes 1.6之后的版本中會(huì)被默認(rèn)設(shè)置為RollingUpdate(滾動(dòng)升級(jí))。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI