- 前提条件
0.0 环境准备
0.1 安装docker
0.2 安装k8s - 使用DaemonSet在每个节点上运行一个pod
- 要在所有集群节点上运行一个pod,需要创建一个DaemonSet对象。DaemonSet确保创建足够的pod,并在自己的节点上部署每个pod。
- 当一个新节点添加到集群中时,DamnonSet会立刻部署一个新的pod实例
- 有人无意中删除一个pod,会重新建立一个新的pod
- DaemonSet从配置的pod模板创建pod
- 使用DaemonSet只在特定的节点上运行pod
- DaemonSet将pod部署到集群中的所有节点上,除非指定这些pod只在部分节点上运行。这是通过pod模板中的nodeSelector属性指定的。
- 节点可以被设置为不可调度,防止pod被部署到节点上。DaemonSet甚至会将pod部署到这些节点上,因为无法调度的属性只会被调度器使用,而DaemonSet管理的pod则完全绕过调度器。这是预期的,因为DaemonSet的目的是运行系统服务,即使在不可调度的节点上。
- 创建一个DaemonSet YAML定义文件(只在标签为disk=ssd的node上运行)
- 查询所有node的disk标签值(此时应该没有disk的标签)(获取到的node name:iz0jl292pbpfbh34wo7707z)
kubectl get no -L disk
- 创建文件kubia-ds.yaml
apiVersion: apps/v1 kind: DaemonSet metadata: name: kubia-ds spec: selector: matchLabels: app: ssd-monitor template: metadata: labels: app: ssd-monitor spec: nodeSelector: disk: ssd containers: - name: kubia image: nuptaxin/kubia
- 创建ds
kubectl create -f kubia-ds.yaml
- 查看ds(查到有一个ds)
kubectl get ds
- 查看pod(查到无pod)
kubectl get po
- 查询节点信息
kubectl get no
- 向节点添加标签(使用1中的node name)
kubectl label no iz0jl292pbpfbh34wo7707z disk=ssd
- 查看pod(查到一个pod)
kubectl get po
- 从节点删除标签(使用1中的node name)
kubectl label no iz0jl292pbpfbh34wo7707z disk-
- 查看pod(pod会自动终止)
kubectl get po
- 删除ds
kubectl delete ds kubia-ds
- 查询所有node的disk标签值(此时应该没有disk的标签)(获取到的node name:iz0jl292pbpfbh34wo7707z)