Deployment 和 ReplicaSet 通常使用多個 replica 時候,都是建在各 nodes 隨機安裝。
DaemonSet 可以讓每一台 node 運行 Pod。
感覺這個跟 docker swarm 的 agent mode :global 一樣 docker swarm 一些指令相關整理 | 程式狂想筆記
立馬實作看看
DaemonSet
使用 DaemonSet 會在所有 node 建立 Pod。如先前所講,跟 Docker Swarm 很像的 agent mode :global 很像
也可以針對 nodename 來建立 Pod。
後記
確保每個節點都會有一份運行的Pod。
- Storage daemon 每台機器都要裝
- CNI daemon
- 日誌收集
- 監控收集
taint 的 NoSchedule 可以阻擋 DaemonSet 部屬。
DaemonSet 概念圖
原有兩台節點(Node)
後面加上一個Node就會部屬Pod
建立 DaemonSet
examples/9-1-fluentd.yaml at master · kubernetes-up-and-running/examples
這邊版本太舊
no matches for kind “DaemonSet” in version “extensions/v1beta1
no matches for kind “DaemonSet” in version “extensions/v1beta1” · Issue #627 · gluster/gluster-kubernetes
notes:
changed apiVersion to "apps/v1"
added selector
最後還是套用官方文件DaemonSet | Kubernetes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:
# this toleration is to have the daemonset runnable on master nodes
# remove it if your masters can't run pods
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
|
1
|
kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml
|
查看狀況,這邊namespace 要調整
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
kubectl describe daemonsets fluentd-elasticsearch --namespace kube-system
# Name: fluentd-elasticsearch
# Selector: name=fluentd-elasticsearch
# Node-Selector: <none>
# Labels: k8s-app=fluentd-logging
# Annotations: deprecated.daemonset.template.generation: 1
# Desired Number of Nodes Scheduled: 6
# Current Number of Nodes Scheduled: 6
# Number of Nodes Scheduled with Up-to-date Pods: 6
# Number of Nodes Scheduled with Available Pods: 6
# Number of Nodes Misscheduled: 0
# Pods Status: 6 Running / 0 Waiting / 0 Succeeded / 0 Failed
# Pod Template:
# Labels: name=fluentd-elasticsearch
# Containers:
# fluentd-elasticsearch:
# Image: quay.io/fluentd_elasticsearch/fluentd:v2.5.2
# Port: <none>
# Host Port: <none>
# Limits:
# memory: 200Mi
# Requests:
# cpu: 100m
# memory: 200Mi
# Environment: <none>
# Mounts:
# /var/lib/docker/containers from varlibdockercontainers (ro)
# /var/log from varlog (rw)
# Volumes:
# varlog:
# Type: HostPath (bare host directory volume)
# Path: /var/log
# HostPathType:
# varlibdockercontainers:
# Type: HostPath (bare host directory volume)
# Path: /var/lib/docker/containers
# HostPathType:
# Events:
# Type Reason Age From Message
# ---- ------ ---- ---- -------
# Normal SuccessfulCreate 2m53s daemonset-controller Created pod: fluentd-elasticsearch-rqpth
# Normal SuccessfulCreate 2m53s daemonset-controller Created pod: fluentd-elasticsearch-g5r57
# Normal SuccessfulCreate 2m53s daemonset-controller Created pod: fluentd-elasticsearch-bzv6c
# Normal SuccessfulCreate 2m53s daemonset-controller Created pod: fluentd-elasticsearch-sjt9l
# Normal SuccessfulCreate 2m53s daemonset-controller Created pod: fluentd-elasticsearch-vfs9w
# Normal SuccessfulCreate 2m53s daemonset-controller Created pod: fluentd-elasticsearch-wxf6v
|
1
2
3
4
5
6
7
8
|
kubectl get pods -o wide --namespace kube-system
# NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
# fluentd-elasticsearch-bzv6c 1/1 Running 0 6m38s 10.244.2.2 kind-control-plane3 <none> <none>
# fluentd-elasticsearch-g5r57 1/1 Running 0 6m38s 10.244.0.2 kind-control-plane <none> <none>
# fluentd-elasticsearch-rqpth 1/1 Running 0 6m38s 10.244.1.5 kind-control-plane2 <none> <none>
# fluentd-elasticsearch-sjt9l 1/1 Running 0 6m38s 10.244.5.2 kind-worker3 <none> <none>
# fluentd-elasticsearch-vfs9w 1/1 Running 0 6m38s 10.244.3.2 kind-worker <none> <none>
# fluentd-elasticsearch-wxf6v 1/1 Running 0 6m38s 10.244.4.2 kind-worker2 <none> <none>
|
node 新增一個 Label
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 查看 nodes 名稱有哪些
kubectl get nodes
# NAME STATUS ROLES AGE VERSION
# kind-control-plane Ready master 34m v1.19.1
# kind-control-plane2 Ready master 33m v1.19.1
# kind-control-plane3 Ready master 32m v1.19.1
# kind-worker Ready <none> 32m v1.19.1
# kind-worker2 Ready <none> 32m v1.19.1
# kind-worker3 Ready <none> 32m v1.19.1
# 新增一個 label
kubectl label nodes kind-control-plane ssd=true
# 查看 selector ssd=true nodes
kubectl get nodes --selector ssd=true
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
apiVersion: apps/v1
kind: "DaemonSet"
metadata:
labels:
app: nginx
ssd: "true"
name: nginx-fast-storage
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
ssd: "true"
spec:
tolerations:
# this toleration is to have the daemonset runnable on master nodes
# remove it if your masters can't run pods
- key: node-role.kubernetes.io/master
effect: NoSchedule
nodeSelector:
ssd: "true"
containers:
- name: nginx
image: nginx:1.10.0
|
這邊有實作Day-25 認識DaemonSet - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天
Pod 都沒有出來
不知道是不是 Kind 出問題??
1
2
3
4
5
|
tolerations:
# this toleration is to have the daemonset runnable on master nodes
# remove it if your masters can't run pods
- key: node-role.kubernetes.io/master
effect: NoSchedule
|
這行家這個就能跑了…
在研究什麼原因
刪除 DaemonSet
1
|
kubectl delete daemonset nginx-fast-storage
|
DaemonSet Tree
DaemonSet -> ControllerRevision -> Pod
DaemonSet因為有ControllerRevision 可以控制版本。但無法做到Replica一樣功能。
kube-system 有用到 DaemonSet
1
|
kubectl -n kube-system get ds
|
1
2
3
|
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
kindnet 3 3 3 3 3 <none> 10d
kube-proxy 3 3 3 3 3 kubernetes.io/os=linux 10d
|
StatefulSets
有狀態的Pod。
常運用儲存、網路結合。
Network
StatefulSet -> Pod-1
-> Pod-2
-> Pod-3
每個Pod都有個自Dns。
Storage
Pod-1 -> Volume-1
Pod-2 -> Volume-2
更新策略
從後面先動作,先關掉再建立Pod。
Tree
StatefulSet->ControllerRevision->Pod