第2題:Daemonset:
題目:
- 確保在kubernetes集群的每個(gè)節(jié)點(diǎn)上運(yùn)行一個(gè)Pod nginx實(shí)例,其中nginx還表示必須使用的鏡像名稱。
- 不要覆蓋任何當(dāng)前存在的污點(diǎn)( 不要有tolerations)
- 使用Daemonset 完成此任務(wù)儡首,并使用ds.kusc00201作為Daemonset名稱
解題思路:
本題考的是kubectl Deamon操作指令马昙,DaemonSet 確保全部(或者某些)節(jié)點(diǎn)上運(yùn)行一個(gè) Pod 的副本。當(dāng)有節(jié)點(diǎn)加入集群時(shí), 也會(huì)為他們新增一個(gè) Pod 嘀粱。當(dāng)有節(jié)點(diǎn)從集群移除時(shí),這些 Pod 也會(huì)被回收辰狡。
具體可參考:https://kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/
解題步驟:
- 可以先使用kubectl run 生成一個(gè) YAML 文件中描述 DaemonSet
sudo kubectl run ds.kusc00201 --generator=run-pod/v1 --image=nginx -n ns-ehj --dry-run -o yaml > daeminset.yaml
生成的yaml如下:
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: ds.kusc00201
name: ds.kusc00201
spec:
containers:
- image: nginx
name: ds.kusc00201
resources: {}
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
顯然锋叨,需要修改后才能apply:
apiVersion: apps/v1
kind: DaemonSet
metadata:
creationTimestamp: null
labels:
run: nginx
name: ds.kusc00201
namespace: ns-ehj
spec:
selector:
matchLabels:
run: nginx
template:
metadata:
labels:
run: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
運(yùn)行結(jié)果:
image.png
注意:
必需字段
- 和其它所有 Kubernetes 配置一樣,DaemonSet 需要 apiVersion宛篇、kind 和 metadata 字段娃磺。
Pod 模板
- .spec 中唯一必需的字段是 .spec.template
- 如果指定了
.spec.template.spec.nodeSelector
,DaemonSet Controller 將在能夠與 Node Selector 匹配的節(jié)點(diǎn)上創(chuàng)建 Pod叫倍。類似這種情況偷卧,可以指定.spec.template.spec.affinity
,然后 DaemonSet Controller 將在能夠與 node Affinity 匹配的節(jié)點(diǎn)上創(chuàng)建 Pod吆倦。 如果根本就沒有指定听诸,則 DaemonSet Controller 將在所有節(jié)點(diǎn)上創(chuàng)建 Pod。 - .spec.template
是一個(gè) [Pod 模板](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pod-templates)蚕泽。除了它是嵌套的晌梨,而且不具有
apiVersion或
kind` 字段,它與 Pod 具有相同的 schema。
除了 Pod 必需字段外仔蝌,在 DaemonSet 中的 Pod 模板必須指定合理的標(biāo)簽(查看 Pod Selector)泛领。