您好,登錄后才能下訂單哦!
DaemonSet是在Kubernetes1.2 版本新增的一種資源對象
DaemonSet
能夠讓所有(或者一些特定)的Node
節點僅運行一份Pod
。當節點加入到kubernetes集群中,Pod會被(DaemonSet)調度到該節點上運行,當節點從kubernetes集群中被移除,被(DaemonSet)調度的Pod會被移除,如果刪除DaemonSet,所有跟這個DaemonSet相關的pods都會被刪除。
在使用kubernetes來運行應用時,很多時候我們需要在一個區域(zone)
或者所有Node
上運行同一個守護進程(pod)
,例如如下場景:
DaemonSet的Pod調度策略與RC很類似,除了使用系統內置的調度算法在每個Node上進行調度,也可以在Pod定義中使用NodeSelector或NodeAffinity來指定滿足條件的Node范圍進行調度
DaemonSet 資源文件格式
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
1.下面例子定義為在每個Node上都啟動一個filebeat
容器,其中掛載了宿主機目錄"/var/log/messages"
$ vi k8s-log-filebeat.yaml
apiVersion: v1
kind: ConfigMap # 定義一個config文件內容
metadata:
name: k8s-logs-filebeat-config
namespace: kube-system
data:
# 填寫filebeat讀取日志相關信息
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 對象,保證在每個node節點運行一個副本
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
# 進行實際掛載操作
volumeMounts:
# 將configmap里的配置掛載到 /etc/filebeat.yml 文件中
- name: filebeat-config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
# 將宿主機 /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 命令創建該DeamonSet
$ kubectl create -f k8s-log-filebeat.yaml
configmap/k8s-logs-filebeat-config created
daemonset.apps/k8s-logs created
3.查看創建好的DeamonSet和Pod,可以看到在每個Node上都創建了一個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也能執行滾動升級了,即在更新一個DaemonSet模板的時候,舊的Pod副本會被自動刪除,同時新的Pod副本會被自動創建,此時DaemonSet的更新策略(updateStrategy)為RollingUpdate,如下:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: k8s-logs
namespace: kube-system
spec:
updateStrategy:
type: RollingUpdate
updateStrategy 的另外一個值是OnDelete,即只有當手工刪除了DaemonSet創建的Pod副本,新的Pod副本才會被創建出來,如果不設置updateStrategy的值,則在kubernetes 1.6之后的版本中會被默認設置為RollingUpdate(滾動升級)。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。