分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

kubernetes-控制器Deployment和DaemonSet(八)

发布时间:2023-09-06 02:27责任编辑:胡小海关键词:kubernetes

Pod与controllers的关系

?controllers:在集群上管理和运行容器的对象
?通过label-selector相关联
?Pod通过控制器实现应用的运维,如伸缩,升级等

控制器又称工作负载是用于实现管理pod的中间层,确保pod资源符合预期的状态,pod的资源出现故障时,会尝试 进行重启,当根据重启策略无效,则会重新新建pod的资源。

控制器有多种类型:

Deployment:工作在ReplicaSet之上,用于管理无状态应用,目前来说最好的控制器。支持滚动更新和回滚功能,还提供声明式配置。
DaemonSet:用于确保集群中的每一个节点只运行特定的pod副本,通常用于实现系统级后台任务。比如ELK服务
Job:只要完成就立即退出,不需要重启或重建。
Cronjob:周期性任务控制,不需要持续后台运行,
StatefulSet:管理有状态应用

ReplicaSet: 代用户创建指定数量的pod副本数量,确保pod副本数量符合预期状态,并且支持滚动式自动扩容和缩容功能。

Deployment

Deployment为Pod和Replica Set(下一代Replication Controller)提供声明式更新。

只需要在 Deployment 中描述想要的目标状态是什么,Deployment controller 就会帮您将 Pod 和ReplicaSet 的实际状态改变到您的目标状态。也可以定义一个全新的 Deployment 来创建 ReplicaSet 或者删除已有的 Deployment 并创建一个新的来替换。

典型的用例如下:

(1)使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。(2)然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。(3)如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。(4)扩容Deployment以满足更高的负载。(5)暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。(6)根据Deployment 的状态判断上线是否hang住了。(7)清除旧的不必要的 ReplicaSet。

创建deployment

[root@k8s-master1 demo]# vim deploy-demo.yaml apiVersion: apps/v1kind: Deploymentmetadata: ?name: nginx-deployment ?namespace: defaultspec: ?replicas: 3 ?selector: ???matchLabels: ?????app: nginx ?template: ???metadata: ?????labels: ???????app: nginx ???spec: ?????containers: ?????- name: nginx ???????image: nginx:1.14 ???????ports: ???????- containerPort: 80[root@k8s-master1 demo]# kubectl create -f deploy-demo.yaml deployment.apps/nginx-deployment created

查看Deployment已经创建了3个 replica ,刚创建的Replica Set将保证总是有3个副本的 pod 存在

[root@k8s-master1 demo]# kubectl get deploy,rs,pod -o wideNAME ????????????????????????????????????READY ??UP-TO-DATE ??AVAILABLE ??AGE ??CONTAINERS ??IMAGES ??????SELECTORdeployment.extensions/nginx-deployment ??3/3 ????3 ???????????3 ??????????8s ???nginx ???????nginx:1.14 ??app=nginxNAME ???????????????????????????????????????????????DESIRED ??CURRENT ??READY ??AGE ??CONTAINERS ??IMAGES ??????SELECTORreplicaset.extensions/nginx-deployment-75465b4f74 ??3 ????????3 ????????3 ??????8s ???nginx ???????nginx:1.14 ??app=nginx,pod-template-hash=75465b4f74NAME ???????????????????????????????????READY ??STATUS ???RESTARTS ??AGE ??IP ???????????NODE ???????????NOMINATED NODE ??READINESS GATESpod/nginx-deployment-75465b4f74-7qsh7 ??1/1 ????Running ??0 ?????????8s ???172.17.73.3 ??192.168.0.126 ??<none> ??????????<none>pod/nginx-deployment-75465b4f74-9p9kl ??1/1 ????Running ??0 ?????????8s ???172.17.73.4 ??192.168.0.126 ??<none> ??????????<none>pod/nginx-deployment-75465b4f74-r9snc ??1/1 ????Running ??0 ?????????8s ???172.17.32.2 ??192.168.0.125 ??<none> ??????????<none>

 ReplicaSet 的名字总是<Deployment的名字>-<pod template的hash值>

[root@k8s-master1 demo]# kubectl get pods --show-labelsNAME ???????????????????????????????READY ??STATUS ???RESTARTS ??AGE ??LABELSnginx-deployment-75465b4f74-7qsh7 ??1/1 ????Running ??0 ?????????70s ??app=nginx,pod-template-hash=75465b4f74nginx-deployment-75465b4f74-9p9kl ??1/1 ????Running ??0 ?????????70s ??app=nginx,pod-template-hash=75465b4f74nginx-deployment-75465b4f74-r9snc ??1/1 ????Running ??0 ?????????70s ??app=nginx,pod-template-hash=75465b4f74

DaemonSet

DaemonSet 确保全部(或者一些)Node 上运行一个 Pod 的副本。当有 Node 加入集群时,也会为他们新增一个 Pod 。当有 Node 从集群移除时,这些 Pod 也会被回收。删除 DaemonSet 将会删除它创建的所有 Pod。

使用 DaemonSet 的一些典型用法:

  • 运行集群存储 daemon,例如在每个 Node 上运行 ,应用场景:Agent。
  • 在每个 Node 上运行日志收集 daemon,例如fluentdlogstash
  • 在每个 Node 上运行监控 daemon,例如 Prometheus Node Exporter、collectd、Datadog 代理、New Relic 代理,或 Ganglia gmond
DaemonSet示例

创建redis-filebeat的yaml文件

[root@k8s-master1 demo]# vim ds-demo.yamlapiVersion: apps/v1kind: Deploymentmetadata: ?name: redis ?namespace: defaultspec: ?replicas: 1 ?selector: ???matchLabels: ?????app: redis ?????role: logstor ?template: ???metadata: ?????labels: ???????app: redis ???????role: logstor ???spec: ?????containers: ?????- name: redis ???????image: redis:4.0-alpine ???????ports: ???????- name: redis ?????????containerPort: 6379---apiVersion: apps/v1kind: DaemonSetmetadata: ?name: filebeat-ds ?namespace: defaultspec: ?selector: ???matchLabels: ?????app: filebeat ?????release: stable ?template: ???metadata: ?????labels: ????????app: filebeat ???????release: stable ???spec: ?????containers: ?????- name: filebeat ???????image: ikubernetes/filebeat:5.6.5-alpine ???????env: ???????- name: REDIS_HOST ?????????value: redis.default.svc.cluster.local ???????- name: REDIS_LOG_LEVEL ?????????value: info

创建pod

[root@k8s-master1 demo]# kubectl apply -f ds-demo.yaml deployment.apps/redis createddaemonset.apps/filebeat-ds created

暴露端口

[root@k8s-master1 demo]# kubectl expose deployment redis --port=6379service/redis exposed[root@k8s-master1 demo]# kubectl get svcNAME ????????????????TYPE ???????CLUSTER-IP ??EXTERNAL-IP ??PORT(S) ???AGEservice/kubernetes ??ClusterIP ??10.0.0.1 ????<none> ???????443/TCP ???5d19hservice/redis ???????ClusterIP ??10.0.0.150 ??<none> ???????6379/TCP ??19s

查看pod  ,DaemonSet在每个node上运行一个filebeat的pod

[root@k8s-master1 demo]# kubectl get pod -o wideNAME ????????????????????READY ??STATUS ???RESTARTS ??AGE ??IP ???????????NODE ???????????NOMINATED NODE ??READINESS GATESfilebeat-ds-dndjq ???????1/1 ????Running ??0 ?????????17m ??172.17.32.3 ??192.168.0.125 ??<none> ??????????<none>filebeat-ds-k6d6b ???????1/1 ????Running ??0 ?????????17m ??172.17.73.3 ??192.168.0.126 ??<none> ??????????<none>redis-85b846ff9c-wlxcg ??1/1 ????Running ??0 ?????????17m ??172.17.32.2 ??192.168.0.125 ??<none> ??????????<none>

kubernetes-控制器Deployment和DaemonSet(八)

原文地址:https://www.cnblogs.com/yuezhimi/p/10167695.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved