Kubernetes-DaemonSet控制器
概念
每节点一个Pod实例:
DaemonSet确保在集群的每个节点上运行一个Pod的副本。当新的节点加入集群或者现有节点的标签发生变化时,DaemonSet会自动在新的节点上启动Pod实例,或者在标签变化的节点上重新调度Pod。
- 节点亲和性(Affinity):
你可以通过节点亲和性来定义DaemonSet在哪些节点上运行。这可以通过标签选择器来实现,确保DaemonSet只在满足特定标签条件的节点上运行。
- 自动调度和替换:
DaemonSet具有自动调度和替换的能力。当新节点加入集群时,DaemonSet会在新节点上启动Pod。如果一个节点被标记为不可调度,DaemonSet会尝试将其上的Pod重新调度到其他节点。
- Pod的生命周期和管理:
DaemonSet负责Pod的生命周期。如果节点上的Pod因为某种原因终止,DaemonSet将负责启动一个新的Pod实例,以保持在每个节点上运行一个Pod的要求。
- 滚动更新和版本管理:
类似于其他控制器,DaemonSet也支持滚动更新。你可以逐步将新版本的Pod引入到集群中,确保不会一次性中断所有节点上的服务。
DaemonSet是一种非常有用的控制器类型,特别适用于在整个Kubernetes集群中运行一些需要在每个节点上都有一个实例的服务。
参考文档
https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/daemonset/
使用DaemonSet控制器创建资源对象
[root@kubernetes-master controller]# cat nginx-daemonset.yaml
---
apiVersion: v1
kind: Namespace
metadata:
name: nginx-daemonset # 创建的命名空间
---
apiVersion: apps/v1
kind: DaemonSet # 创建的资源对象为daemonset控制器
metadata:
namespace: nginx-daemonset # 所在命名空间
name: nginx-daemonset # 控制器名
labels:
app: nginx # 控制器标签
spec: #属性
selector:
matchLabels:
app: nginx # 控制器管理使用标签该标签的资源
template:
metadata:
labels:
app: nginx # pod使用控制器标签
spec:
containers:
- name: nginx # 容器名
image: daocloud.io/library/nginx # 镜像
ports:
- name: nginx
containerPort: 80 # 容器内使用端口
hostPort: 8090 # host模式 可以通过宿主机加端口的方式访问该pod
protocol: TCP
# 创建
[root@kubernetes-master controller]# kubectl apply -f nginx-daemonset.yaml
namespace/nginx-daemonset created
daemonset.apps/nginx-daemonset created
# 查看pod信息
[root@kubernetes-master controller]# kubectl get pod -n nginx-daemonset -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-daemonset-fv22r 1/1 Running 0 27s 10.10.20.225 kubernetes-node1 <none> <none>
nginx-daemonset-mkjgn 1/1 Running 0 27s 10.10.20.67 kubernetes-node2 <none> <none>
# 访问测试
node节点ip:hostPort端口
# 修改nginx信息
[root@kubernetes-master controller]# kubectl exec -it nginx-daemonset-fv22r -n nginx-daemonset bash
root@nginx-daemonset-fv22r:/# echo "This is node 10.10.10.22 " > /usr/share/nginx/html/index.html
root@nginx-daemonset-mkjgn:/# exit
[root@kubernetes-master controller]# kubectl exec -it nginx-daemonset-mkjgn -n nginx-daemonset bash
root@nginx-daemonset-mkjgn:/# echo "This is node 10.10.10.23 " > /usr/share/nginx/html/index.html
root@nginx-daemonset-mkjgn:/# exit
# 刷新查看
删除Pod
# 删除同意可以使用两张方式 yaml文件方式或者命令行方式 演示就只使用yaml方式了
[root@kubernetes-master controller]# kubectl delete -f nginx-daemonset.yaml
namespace "nginx-daemonset" deleted
daemonset.apps "nginx-daemonset" deleted
# 命令行方式
[root@kubernetes-master controller]# kubectl delete daemonset nginx-daemonset -n nginx-daemonset
注:
- kubectl delete daemonset nginx-daemonset : 删除名为nginx-daemonset的daemonset控制器
- -n nginx-daemonset :指定命名空间
评论区