第2题:Daemonset:
题目:
- 确保在kubernetes集群的每个节点上运行一个Pod nginx实例,其中nginx还表示必须使用的镜像名称。
- 不要覆盖任何当前存在的污点( 不要有tolerations)
- 使用Daemonset 完成此任务,并使用ds.kusc00201作为Daemonset名称
解题思路:
本题考的是kubectl Deamon操作指令,DaemonSet 确保全部(或者某些)节点上运行一个 Pod 的副本。当有节点加入集群时, 也会为他们新增一个 Pod 。当有节点从集群移除时,这些 Pod 也会被回收。
具体可参考:https://kubernetes.io/zh/docs/concepts/workloads/controllers/daemonset/
解题步骤:
- 可以先使用kubectl run 生成一个 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: {}
运行结果:
image.png
注意:
必需字段
- 和其它所有 Kubernetes 配置一样,DaemonSet 需要 apiVersion、kind 和 metadata 字段。
Pod 模板
- .spec 中唯一必需的字段是 .spec.template
- 如果指定了
.spec.template.spec.nodeSelector
,DaemonSet Controller 将在能够与 Node Selector 匹配的节点上创建 Pod。类似这种情况,可以指定.spec.template.spec.affinity
,然后 DaemonSet Controller 将在能够与 node Affinity 匹配的节点上创建 Pod。 如果根本就没有指定,则 DaemonSet Controller 将在所有节点上创建 Pod。 - .spec.template
是一个 [Pod 模板](https://kubernetes.io/docs/concepts/workloads/pods/pod-overview/#pod-templates)。除了它是嵌套的,而且不具有
apiVersion或
kind` 字段,它与 Pod 具有相同的 schema。
除了 Pod 必需字段外,在 DaemonSet 中的 Pod 模板必须指定合理的标签(查看 Pod Selector)。
网友评论