实验手册05-DaemonSet

目录
实验简介
本节我们了解一下 K8S 的另一个 Controller: DaemonSet
Deployment 和 DaemonSet 的主要区别是:
- Deployment 部署的副本 Pods 会分布到各个节点上,而且一个节点可以运行好几个副本
- DaemonSet 只允许一个节点最多运行一个副本
实验步骤
任务一:看一看 K8S 中由 DaemonSet 管理的 Pods
前面说到“DaemonSet 只允许一个节点最多运行一个副本”
,这种特性非常适合一些系统组件,比如我们之用安装过的 flannel 网络插件,它和各个节点的通信有关,直观感受上,一个节点拥有一个副本是最合适的
步骤1 验证(主节点)
kubectl get pods --namespace kube-flannel -o wide
如图所示,每个节点都运行着一个 flannel 副本
任务二:回头看一下 kube-flannel-ds
今天只是回头看一下,粗略了解,我们后面还会深入了解它
对比一下上节课的 nginx.yaml
文件和几天以前上课分发的文件 kube-flannel.yml
以下是 kube-flannel.yml
的节选内容:
apiVersion: apps/v1
kind: DaemonSet # nginx.yaml 中是 Deployment
metadata:
name: kube-flannel-ds # 另外一个文件中是 nginx-deployment
namespace: kube-flannel # 另外一个文件中没有这个,所以它在 default 空间里面
labels:
tier: node
app: flannel
k8s-app: flannel
spec:
selector:
matchLabels:
app: flannel
template:
metadata:
labels:
tier: node
app: flannel
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values:
- linux
hostNetwork: true # 直接使用宿主机的网络,相当于 docker run --network=host
priorityClassName: system-node-critical
tolerations:
- operator: Exists
effect: NoSchedule
serviceAccountName: flannel
initContainers:
- name: install-cni-plugin
image: docker.io/flannel/flannel-cni-plugin:v1.2.0
command:
- cp
args:
- -f
- /flannel
- /opt/cni/bin/flannel
volumeMounts:
- name: cni-plugin
mountPath: /opt/cni/bin
- name: install-cni
image: docker.io/flannel/flannel:v0.22.2
command:
- cp
args:
- -f
- /etc/kube-flannel/cni-conf.json
- /etc/cni/net.d/10-flannel.conflist
volumeMounts:
- name: cni
mountPath: /etc/cni/net.d
- name: flannel-cfg
mountPath: /etc/kube-flannel/
containers:
- name: kube-flannel # 昨天那个是 nginx
image: docker.io/flannel/flannel:v0.22.2 # 昨天那个是 nginx:1.7.9
command:
- /opt/bin/flanneld
args:
- --ip-masq
- --kube-subnet-mgr
resources:
requests:
cpu: "100m"
memory: "50Mi"
我们现在只需要知道,这两个文件的结构很像就可以了,或者换句话说,flannel 这一系统组件和我们昨天自己运行的 nginx-deployment 并没有本质上的区别
任务三:运行自己的 DaemonSet
步骤1 修改上节课的 nginx.yaml
,要求如下:
- kind 改成
DaemonSet
- metadata 中的 name 改成
nginx-daemonset
- 删除 replicas 这一行
- 删除 nodeSelector 和 star: five 这两行
具体操作:
cp nginx.yaml nginx-ds.yaml
vim nginx-ds.yaml
修改后的文件是右侧这样的:
大家修改文件时,要注意缩进
我们可以使用 Sublime Text 这类编辑器辅助我们修改文件,利用下图中出现的“竖线”来判断缩进是不是对齐了

步骤2 主节点执行以下命令,应用我们修改后的配置文件
kubectl apply -f nginx-ds.yaml
步骤3 验证一下是不是创建了 DaemonSet
kubectl get daemonset

步骤4 验证一个是不是创建了对应的 Pods(我们预期是每个节点上都有一个 Pod 副本)
kubectl get pods -o wide
0914修改:增加 -o wide 参数

符合我们的预期