目录

一、概述

二、YAML文件详解

三、企业应用案例

3.1 环境准备

3.2 扩缩容

3.3 滚动更新

3.4 回滚

四、自定义更新策略

4.1类型

4.2 设置方式

4.3 配置案例

一、 DaemonSet 概述

DaemonSet 工作原理

Daemonset 典型的应用场景

DaemonSet 与 Deployment 的区别

二、DaemonSet 资源清单文件编写技巧

清单模版

三、DaemonSet 使用案例


一、概述

Deployment为Pod和ReplicaSet提供了一个声明式定义(declarative)方法,用来替代以前的ReplicationController来方便的管理应用。

典型的应用场景包括:

  • 定义Deployment来创建Pod和ReplicaSet

  • 滚动升级和回滚应用

  • 扩容和缩容

  • 暂停和继续Deployment更新

Deployment表示用户对K8S集群的一次更新操作。Deployment是一个比RS( Replica Set, RS) 应用模型更广的 API 对象,可以是创建一个新的服务,更新一个新的服务,也可以是滚动升级一个服务。滚动升级一个服务,实际是创建一个新的RS,然后逐渐将新 RS 中副本数增加到理想状态,将旧RS中的副本数减少到0的复合操作。

这样一个复合操作用一个RS是不好描述的,所以用一个更通用的Deployment来描述。以K8S的发展方向,未来对所有长期伺服型的业务的管理,都会通过Deployment来管理。

二、YAML文件详解

apiVersion: apps/v1 #接口版本
kind: Deployment                 #接口类型
metadata:name: cango-demo               #Deployment名称namespace: cango-prd           #命名空间labels:app: cango-demo              #标签
spec:replicas: 3selector:matchLabels:app: cango-demo  #匹配模板中labelstrategy:rollingUpdate:  ##由于replicas为3,则整个升级,pod个数在2-4个之间maxSurge: 1      #滚动升级时会先启动1个podmaxUnavailable: 1 #滚动升级时允许的最大Unavailable的pod个数template:         metadata:labels:app: cango-demo  #模板名称必填sepc: #定义容器模板,该模板可以包含多个容器containers:                                                                   - name: cango-demo1                                                           #镜像名称image: swr.cn-east-2.myhuaweicloud.com/cango-prd/cango-demo:0.0.1-SNAPSHOT #镜像地址command: [ "/bin/sh","-c","cat /etc/config/path/to/special-key" ]    #启动命令args:                                                                #启动参数- '-storage.local.retention=$(STORAGE_RETENTION)'- '-storage.local.memory-chunks=$(STORAGE_MEMORY_CHUNKS)'- '-config.file=/etc/prometheus/prometheus.yml'- '-alertmanager.url=http://alertmanager:9093/alertmanager'- '-web.external-url=$(EXTERNAL_URL)'#如果command和args均没有写,那么用Docker默认的配置。#如果command写了,但args没有写,那么Docker默认的配置会被忽略而且仅仅执行.yaml文件的command(不带任何参数的)。#如果command没写,但args写了,那么Docker默认配置的ENTRYPOINT的命令行会被执行,但是调用的参数是.yaml中的args。#如果如果command和args都写了,那么Docker默认的配置被忽略,使用.yaml的配置。imagePullPolicy: IfNotPresent  #如果不存在则拉取livenessProbe:       #表示container是否处于live状态。如果LivenessProbe失败,LivenessProbe将会通知kubelet对应的container不健康了。随后kubelet将kill掉container,并根据RestarPolicy进行进一步的操作。默认情况下LivenessProbe在第一次检测之前初始化值为Success,如果container没有提供LivenessProbe,则也认为是Success;httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 60 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5readinessProbe:httpGet:path: /health #如果没有心跳检测接口就为/port: 8080scheme: HTTPinitialDelaySeconds: 30 ##启动后延时多久开始运行检测timeoutSeconds: 5successThreshold: 1failureThreshold: 5resources:              ##CPU内存限制requests:cpu: 2memory: 2048Milimits:cpu: 2memory: 2048Mienv:                    ##通过环境变量的方式,直接传递pod=自定义Linux OS环境变量- name: LOCAL_KEY     #本地Keyvalue: value- name: CONFIG_MAP_KEY  #局策略可使用configMap的配置Key,valueFrom:configMapKeyRef:name: special-config   #configmap中找到name为special-configkey: special.type      #找到name为special-config里data下的keyports:- name: httpcontainerPort: 8080 #对service暴露端口volumeMounts:     #挂载volumes中定义的磁盘- name: log-cachemountPath: /tmp/log- name: sdb       #普通用法,该卷跟随容器销毁,挂载一个目录mountPath: /data/media    - name: nfs-client-root    #直接挂载硬盘方法,如挂载下面的nfs目录到/mnt/nfsmountPath: /mnt/nfs- name: example-volume-config  #高级用法第1种,将ConfigMap的log-script,backup-script分别挂载到/etc/config目录下的一个相对路径path/to/...下,如果存在同名文件,直接覆盖。mountPath: /etc/config       - name: rbd-pvc                #高级用法第2中,挂载PVC(PresistentVolumeClaim)
​
#使用volume将ConfigMap作为文件或目录直接挂载,其中每一个key-value键值对都会生成一个文件,key为文件名,value为内容,volumes:  # 定义磁盘给上面volumeMounts挂载- name: log-cacheemptyDir: {}- name: sdb  #挂载宿主机上面的目录hostPath:path: /any/path/it/will/be/replaced- name: example-volume-config  # 供ConfigMap文件内容到指定路径使用configMap:name: example-volume-config  #ConfigMap中名称items:- key: log-script           #ConfigMap中的Keypath: path/to/log-script  #指定目录下的一个相对路径path/to/log-script- key: backup-script        #ConfigMap中的Keypath: path/to/backup-script  #指定目录下的一个相对路径path/to/backup-script- name: nfs-client-root         #供挂载NFS存储类型nfs:server: 10.42.0.55          #NFS服务器地址path: /opt/public           #showmount -e 看一下路径- name: rbd-pvc                 #挂载PVC磁盘persistentVolumeClaim:claimName: rbd-pvc1         #挂载已经申请的pvc磁盘

三、企业应用案例

3.1 环境准备

创建my-blue.yaml

apiVersion: apps/v1
kind: Deployment
metadata:name: mydm
spec:replicas: 3selector:matchLabels:app: myapp-blue #匹配模板中labeltemplate:metadata:labels:app: myapp-bluespec:containers:- name: myapp-blueimage: janakiramm/myapp:v1imagePullPolicy: IfNotPresentports:- containerPort: 80

创建访问service my-blue-service.yaml

apiVersion: v1
kind: Service
metadata:name: service-blue
spec:selector:app: myapp-bluetype: NodePort ports:- port: 80nodePort: 30030targetPort: 80

提交对应的资源清单

[root@k8s-master01 ~]# kubectl apply -f my-blue.yaml
[root@k8s-master01 ~]# kubectl apply -f my-blue-service.yaml
#查看对应的资源
[root@k8s-master01 ~]# kubectl get pod
NAME                      READY   STATUS    RESTARTS        AGE
mydm-7755b9f55f-7h2nb     1/1     Running   0               69s
mydm-7755b9f55f-bj9gf     1/1     Running   0               69s
mydm-7755b9f55f-hjckc     1/1     Running   0               69s
mydm-7755b9f55f-lfvrd     1/1     Running   0               69s
mydm-7755b9f55f-lxzw4     1/1     Running   0               69s
mydm-7755b9f55f-v74w8     1/1     Running   0               69s
[root@k8s-master01 ~]# kubectl get svc
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service-blue         NodePort    10.10.157.201   <none>        80:30030/TCP     87s

3.2 扩缩容

修改对应的yaml文件中的replicas的数量

apiVersion: apps/v1
kind: Deployment
metadata:name: mydm
spec:replicas: 5selector:matchLabels:app: myapp-blue #匹配模板中labeltemplate:metadata:labels:app: myapp-bluespec:containers:- name: myapp-blueimage: janakiramm/myapp:v1imagePullPolicy: IfNotPresentports:- containerPort: 80

3.3 滚动更新

修改对应的yaml文件中的image信息

apiVersion: apps/v1
kind: Deployment
metadata:name: mydm
spec:replicas: 3selector:matchLabels:app: myapp-blue #匹配模板中labeltemplate:metadata:labels:app: myapp-bluespec:containers:- name: myapp-blueimage: janakiramm/myapp:v2imagePullPolicy: IfNotPresentports:- containerPort: 80

3.4 回滚

查看历史版本

[root@k8s-master01 ~]# kubectl  rollout history deployment name

回滚操作

[root@k8s-master01 ~]# kubectl rollout undo deployment name --to-revision=1

四、自定义更新策略

4.1类型

  • maxSurge:和期望的副本数比,超过期望副本数最大比例(或最大值),这个值调的越大,副本更新速度越快。

  • maxUnavailable:和期望的副本数比,不可用副本数最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑;

4.2 设置方式

  1. 按数量

  • maxUnavailable: [0, 副本数]

  • maxSurge: [0, 副本数]

  • 注两者不能同时为0。

  1. 按比例

  • maxUnavailable: [0%, 100%] 向下取整,比如10个副本,5%的话==0.5个,但计算按照0个;

  • maxSurge: [0%, 100%] 向上取整,比如10个副本,5%的话==0.5个,但计算按照1个;

  • 两者不能同时为0。

4.3 配置案例

apiVersion: apps/v1
kind: Deployment
metadata:name: myapp-v1
spec:replicas: 3selector:matchLabels:app: myappversion: v1strategy:rollingUpdate:maxSurge: 1maxUnavailable: 1template:metadata:labels:app: myappversion: v1spec:containers:- name: myappimage: janakiramm/myapp:v1imagePullPolicy: IfNotPresentports:- containerPort: 80

一、 DaemonSet 概述

     DaemonSet 控制器能够确保 k8s 集群所有的节点都运行一个相同的 pod 副本,当向 k8s 集群中增加 node 节点时,这个 node 节点也会自动创建一个 pod 副本,当 node 节点从 集群移除,这些 pod 也会自动删除;删除 Daemonset 也会删除它们创建的 pod

DaemonSet 工作原理

 daemonset 的控制器会监听 kuberntes 的 daemonset 对象、pod 对象、node 对象,这些被监听的对象之变动,就会触发 syncLoop 循环让 kubernetes 集群朝着 daemonset 对象描述的状态进行演进。

Daemonset 典型的应用场景

在集群的每个节点上运行存储,比如:glusterd 或 ceph。 在每个节点上运行日志收集组件,比如:flunentd 、 logstash、filebeat 等。 在每个节点上运行监控组件,比如:Prometheus、 Node Exporter 、collectd 等。

DaemonSet 与 Deployment 的区别

Deployment 部署的副本 Pod 会分布在各个 Node 上,每个 Node 都可能运行好几个副本。

DaemonSet 的不同之处在于:每个 Node 上最多只能运行一个副本。

二、DaemonSet 资源清单文件编写技巧

[root@k8s-master01 ~]# kubectl explain ds
字段作用
apiVersion当前资源使用的 api 版本,跟 VERSION: apps/v1 保持 一致
kind资源类型,跟 KIND: DaemonSet 保持一致
metadata元数据,定义 DaemonSet 名字的
spec定义容器的
status状态信息,不能改
[root@k8s-master01 ~]# kubectl  explain ds.spec
字段作用
minReadySeconds当新的 pod 启动几秒种后,再 kill 掉旧的 pod。
revisionHistoryLimit历史版本
selector -required-用于匹配 pod 的标签选择器
template -required-定义 Pod 的模板,基于这个模板定义的所有 pod 是一样的
updateStrategydaemonset 的升级策略
[root@k8s-master01 ~]# kubectl  explain ds.spec.template
字段作用
containers容器配置列表。每个元素都描述了一个要运行在Pod内的容器。
initContainers化容器配置列表。这些容器在主容器之前运行,用于设置环境或执行预备工作。
ephemeralContainers临时容器配置列表。这些容器是临时的,仅在Pod运行时存在。
restartPolicyPod的重启策略。可以是Always、OnFailure或Never。
terminationGracePeriodSeconds优雅终止周期,以秒为单位。在强制终止Pod前,系统将等待此周期内的终止。
activeDeadlineSecondsPod活动的截止时间,超过此时间系统将杀死Pod。
dnsPolicyPod的DNS策略,可以是ClusterFirst、ClusterFirstWithHostNet、Default或None。
ContextPod的安全上下文,用于设置Pod的安全相关属性,如RBAC规则、SELinux标签等。
schedulerName调度器名称,用于指定用于调度Pod的特定调度器。
tolerationsPod容忍的污点,用于允许Pod调度到有特定污点的节点上。
affinityPod的亲和性设置,用于指定Pod偏好或必须运行的节点属性。
hostNetwork如果设置为true,P将使用主机的网络命名空间。
imagePullSecrets用于获取镜像的密钥,这些密钥会被注入到Pod中。
configMapConfigMap的名称和键值对列表,用于注入配置数据到Pod
secretSecret的名称和键值对列表,用于注入敏感数据到Pod。
volumeMounts卷挂载配置列表,用于指定Pod中容器如何挂载卷。
volumes卷配置列表,为Pod中的容器存储卷。

清单模版

apiVersion: apps/v1
kind: DaemonSet
metadata:name: pod-controller                      # ds名称                      labels:                                   # 给ds打标签controller: daemonset
spec:revisionHistoryLimit: 3                   # 保留历史版本数量,默认为10updateStrategy:                           # Pod更新策略,默认是RollingUpdatetype: RollingUpdate                     # 滚动更新策略。另一种是OnDelete,其没有子属性配置参数 rollingUpdate:                          # 当type为RollingUpdate的时候生效,为其配置参数maxSurge: 25%                         # 升级过程中可以超过期望的Pod的最大数量,可以为百分比,也可以为整数。默认是25%maxUnavailable: 25%                   # 升级过程中最大不可用状态的Pod数量,可以为百分比,也可以为整数。默认是25%selector:                                 # 选择器,通过该控制器管理哪些podmatchLabels:                            # Labels匹配规则。和matchExpressions类似app: nginx-pod                        ###或者matchExpressions:                     # Expressions匹配规则。和matchLabels类似 - {key: app, operator: 'In', values: ["nginx-pod"]} template:                                 # pod副本创建模板。属性和Pod的属性一样metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCP

三、DaemonSet 使用案例

[root@k8s-master01 ~]# cat pod-controller.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:name: pod-controllerlabels:controller: daemonset
spec:selector:matchLabels:app: nginx-podtemplate:metadata:labels:app: nginx-podspec:containers:- name: nginximage: nginx:latestports:- name: nginx-portcontainerPort: 80protocol: TCP 
##查看
[root@k8s-master01 ~]# kubectl apply -f pod-controller.yaml 
daemonset.apps/pod-controller created

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93255.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93255.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93255.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Celery在Django中的应用

Celery在Django中的应用一、项目配置二、异步任务2.1 普通用法2.1.1 通过delay2.1.2 通过apply_async2.2 高级用法2.2.1 任务回调&#xff08;Callback&#xff09;2.2.2 任务链&#xff08;Chaining&#xff09;2.2.3 任务组&#xff08;Group&#xff09;2.2.4 任务和弦&…

DeepSeek生成的高精度大数计算器

# 高精度计算器&#xff08;精确显示版&#xff09;1. **精确显示优化**&#xff1a;- 新增print_mpfr()函数专门处理MPFR数值的打印- 自动移除多余的尾随零和小数点- 确保所有浮点结果都以完整十进制形式显示&#xff0c;不使用科学计数法2. **浮点精度修复**&#xff1a;- 所…

08--深入解析C++ list:高效操作与实现原理

1. list介绍1.1. list概述template < class T, class Alloc allocator<T> > class list;Lists are sequence containers that allow constant time insert and erase operations anywhere within the sequence, and iteration in both directions.概述&#xff1…

GraphQL从入门到精通完整指南

目录 什么是GraphQLGraphQL核心概念GraphQL Schema定义语言查询(Queries)变更(Mutations)订阅(Subscriptions)Schema设计最佳实践服务端实现客户端使用高级特性性能优化实战项目 什么是GraphQL GraphQL是由Facebook开发的一种API查询语言和运行时。它为API提供了完整且易于理…

使用 Dockerfile 与 Docker Compose 结合+Docker-compose.yml 文件详解

使用 Dockerfile 与 Docker Compose 结合的完整流程 Dockerfile 用于定义单个容器的构建过程&#xff0c;而 Docker Compose 则用于编排多个容器。以下是结合使用两者的完整方法&#xff1a; 1. 创建 Dockerfile 在项目目录中创建 Dockerfile 定义应用镜像的构建过程&#xff1…

15 ABP Framework 开发工具

ABP Framework 开发工具 概述 该页面详细介绍了 ABP Framework 提供的开发工具和命令行界面&#xff08;CLI&#xff09;&#xff0c;用于创建、管理和定制 ABP 项目。ABP CLI 是主要开发工具&#xff0c;支持项目脚手架、模块添加、数据库迁移管理及常见开发任务自动化。 ABP …

力扣top100(day02-01)--链表01

160. 相交链表 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public class Solution {/*** 查找两个链表的相交节点* param headA 第一个…

LLM 中 语音编码与文本embeding的本质区别

直接使用语音编码,是什么形式,和文本的区别 直接使用语音编码的形式 语音编码是将模拟语音信号转换为数字信号的技术,其核心是对语音的声学特征进行数字化表征,直接承载语音的物理声学信息。其形式可分为以下几类: 1. 基于波形的编码(保留原始波形特征) 脉冲编码调制…

模型选择与调优

一、模型选择与调优在机器学习中&#xff0c;模型的选择和调优是一个重要的步骤&#xff0c;它直接影响到最终模型的性能1、交叉验证在任何有监督机器学习项目的模型构建阶段&#xff0c;我们训练模型的目的是从标记的示例中学习所有权重和偏差的最佳值如果我们使用相同的标记示…

vue+Django农产品推荐与价格预测系统、双推荐+机器学习预测+知识图谱

vueflask农产品推荐与价格预测系统、双推荐机器学习价格预测知识图谱文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站&#xff0c;有好处&#xff01;编号: D010 技术架构: vueflaskmysqlneo4j 核心技术&#xff1a; 基…

数据分析小白训练营:基于python编程语言的Numpy库介绍(第三方库)(下篇)

衔接上篇文章&#xff1a;数据分析小白训练营&#xff1a;基于python编程语言的Numpy库介绍&#xff08;第三方库&#xff09;&#xff08;上篇&#xff09;&#xff08;十一&#xff09;数组的组合核心功能&#xff1a;一、生成基数组np.arange().reshape() 基础运算功能&…

负载因子(Load Factor) :哈希表(Hash Table)中的一个关键性能指标

负载因子&#xff08;Load Factor&#xff09; 是哈希表&#xff08;Hash Table&#xff09;中的一个关键性能指标&#xff0c;用于衡量哈希表的空间利用率和发生哈希冲突的可能性。一&#xff1a;定义负载因子&#xff08;通常用希腊字母 λ 表示&#xff09;的计算公式为&…

监控插件SkyWalking(一)原理

一、介绍 1、简介 SkyWalking 是一个 开源的 APM&#xff08;Application Performance Monitoring&#xff0c;应用性能监控&#xff09;和分布式追踪系统&#xff0c;主要用于监控、追踪、分析分布式系统中的调用链路、性能指标和日志。 它由 Apache 基金会托管&#xff0c;…

【接口自动化测试】---自动化框架pytest

目录 1、用例运行规则 2、pytest命令参数 3、pytest配置文件 4、前后置 5、断言 6、参数化---对函数的参数&#xff08;重要&#xff09; 7、fixture 7.1、基本用法 7.2、fixture嵌套&#xff1a; 7.3、请求多个fixture&#xff1a; 7.4、yield fixture 7.5、带参数…

Flink Stream API 源码走读 - socketTextStream

概述 本文深入分析了 Flink 中 socketTextStream() 方法的源码实现&#xff0c;从用户API调用到最终返回 DataStream 的完整流程。 核心知识点 1. socketTextStream 方法重载链 // 用户调用入口 env.socketTextStream("hostname", 9999)↓ 补充分隔符参数 env.socket…

待办事项小程序开发

1. 项目规划功能需求&#xff1a;添加待办事项标记完成/未完成删除待办事项分类或标签管理&#xff08;可选&#xff09;数据持久化&#xff08;本地存储&#xff09;2. 实现功能添加待办事项&#xff1a;监听输入框和按钮事件&#xff0c;将输入内容添加到列表。 标记完成/未完…

【C#】Region、Exclude的用法

在 C# 中&#xff0c;Region 和 Exclude 是与图形编程相关的概念&#xff0c;通常在使用 System.Drawing 命名空间进行 GDI 绘图时出现。它们主要用于定义和操作二维空间中的区域&#xff08;几何区域&#xff09;&#xff0c;常用于窗体裁剪、控件重绘、图形绘制优化等场景。 …

机器学习 - Kaggle项目实践(3)Digit Recognizer 手写数字识别

Digit Recognizer | Kaggle 题面 Digit Recognizer-CNN | Kaggle 下面代码的kaggle版本 使用CNN进行手写数字识别 学习到了网络搭建手法学习率退火数据增广 提高训练效果。 使用混淆矩阵 以及对分类出错概率最大的例子单独拎出来分析。 最终以99.546%正确率 排在 86/1035 …

新手如何高效运营亚马逊跨境电商:从传统SP广告到DeepBI智能策略

"为什么我的广告点击量很高但订单转化率却很低&#xff1f;""如何避免新品期广告预算被大词消耗殆尽&#xff1f;""为什么手动调整关键词和出价总是慢市场半拍&#xff1f;""竞品ASIN投放到底该怎么做才有效&#xff1f;""有没有…

【论文阅读 | CVPR 2024 | UniRGB-IR:通过适配器调优实现可见光-红外语义任务的统一框架】

论文阅读 | CVPR 2024 | UniRGB-IR&#xff1a;通过适配器调优实现可见光-红外语义任务的统一框架​1&&2. 摘要&&引言3.方法3.1 整体架构3.2 多模态特征池3.3 补充特征注入器3.4 适配器调优范式4 实验4.1 RGB-IR 目标检测4.2 RGB-IR 语义分割4.3 RGB-IR 显著目…