目 录CONTENT

文章目录

Kubernetes-DaemonSet控制器

Administrator
2024-10-10 / 0 评论 / 0 点赞 / 1 阅读 / 5747 字

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端口

image-20231110140154620

image-20231110140332234

# 修改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
​
# 刷新查看

image-20231110140726380

image-20231110140737977

删除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 :指定命名空间

0

评论区