专门做2k名单的网站在线做c 题的网站
专门做2k名单的网站,在线做c 题的网站,个人网站开发技术要求,网站建设大约需要多少钱一#xff1a;Deployment控制器Deployment 是 Kubernetes 中用于控制 Pod 的核心资源对象#xff0c;提供声明式应用更新与回滚能力#xff0c;简化应用部署、副本管理与自动化运维。修改了资源清单文件之后#xff0c;apply -f 所有pod都可以滚动更新#xff0c;也可以设…一Deployment控制器Deployment 是 Kubernetes 中用于控制 Pod 的核心资源对象提供声明式应用更新与回滚能力简化应用部署、副本管理与自动化运维。修改了资源清单文件之后apply -f 所有pod都可以滚动更新也可以设置先创建新的新的提供好服务之后在删除掉旧的。1工作方式定义 Pod 模板配置 Pod 运行所需参数容器镜像、副本数、环境变量、资源限制、启动命令等。创建与管理 Pod基于模板创建指定数量的 Pod 副本确保集群中始终保持目标副本数。滚动更新与升级更新配置时基于新模板逐步创建新 Pod、终止旧 Pod实现无中断滚动更新同时支持快速回滚到历史版本。维持应用状态Deployment 控制器会检查所创建 Pod 的运行状态和可用性并根据应用监控功能检查这些 Pod 是否工作正常。如果 Pod 出现故障控制器会自动重新创建运行中的 Pod 集合。提供更新和回滚策略Deployment 控制器提供了自动化的更新和回滚策略能够更好地适应应用开发和运维的需求。可以使用新版本镜像将 Pod 版本逐步升级至新版本并能够快速、回滚至升级之前的版本信息从而降低整个应用因升级操作而造成的可用性中断。2总结综上所述Deployment 控制器是 Kubernetes 中重要的控制器之一能够提供应用的自动化部署和回滚功能。可以管理和维护应用程序的运行状态保证应用的稳定性、可用性和可靠性。Kubernetes 中 DaemonSet、Deployment、StatefulSet 这三个核心控制器是我们平时玩的最多的。二deployment是如何管理Replicaset的当你创建一个 Deployment 资源对象时它基于定义的 Pod 模板创建对应的 ReplicaSet 控制器因此可以把 Deployment 视为 ReplicaSet 的一个高级封装提供更高级别的 Pod 缩放、滚动更新等控制。Deployment 通过使用 ReplicaSet 控制器来维持一组目标 Pod 副本的数量。当你更新 Deployment 资源中的 Pod 模板时Deployment 控制器会使用新的 Pod 模板创建一个新的 ReplicaSet然后逐步将原先的 ReplicaSet 中的 Pod 副本转换为新 ReplicaSet 中的 Pod 副本以实现滚动更新或回滚功能在该过程中自动保证目标 Pod 副本数量不过多或过少。更新策略先删除后创建先创建后删除这个更新策略都是可以定义的。通过这种方式Deployment 能够实现自动化、流程化的部署、升级和回滚提供简单而灵活的管理方式同时也保证了 Pod 的高可用性和稳定性。除此之外Deployment 还能够应对突发事件如故障恢复能够自动扩展和缩减 Pod 副本数量从而在更大范围应用场景下提供给应用更强的处理能力。三Delopyment更新节奏和更新逻辑比如部署 Deployment 控制 5 个 pod 副本pod 的期望数量是 5 个但是在升级的时候需要额外多几个 pod那么这个控制器可以控制在 5 个 pod 副本之外还能多增加几个 pod 副本。比如说最多多一个但是是不能少的那么升级的时候就是先增加一个再删除一个增加一个再删除一个始终保持 pod 副本数是 5 个。还有一种情况最多最多多一个最少最少少一个也就是最多 6 个最少 4 个。第一次增加一个再删除两个第二次增加两个再删除两个以此类推可以自由控制更新方式。这种滚动更新需要加 readinessProbe 和 livenessProbe 探测确保 pod 中容器里的应用正常后才删除之前的 pod。四Deployment定义详解字段类型说明apiVersionStringAPI 版本kindString资源类型metadataObject元数据metadata.nameString控制器名称metadata.namespaceString所属命名空间默认 defaultmetadata.labels[]List自定义标签列表spec.annotationsObject自定义注解spec.replicasIntegerPod 副本数量spec.revisionHistoryLimitInteger保留历史版本数默认 10spec.minReadySecondsInteger新 Pod 就绪等待时间再删除旧 Podspec.strategyObject更新策略spec.strategy.typeString更新类型Recreate重建、RollingUpdate滚动更新spec.strategy.rollingUpdateObject滚动更新配置spec.strategy.rollingUpdate.maxSurgeString最大额外副本数绝对值 / 百分比spec.strategy.rollingUpdate.maxUnavailableString最大不可用 Pod 数绝对值 / 百分比spec.selectorObject标签选择器spec.selector.matchLabelsmap[string]string匹配 Pod 标签需与 template.labels 一致spec.templateObjectPod 模板spec.template.metadataObjectPod 元数据spec.template.metadata.labelsmap[string]stringPod 标签定义五Pod中添加域名解析和DNS1Pod中添加域名解析hostAliases 字段用于为一些主机设置别名Pod 内的容器可以通过这些别名来访问主机上的服务。目标给 Pod 容器增加域名解析实现修改容器内的 /etc/hosts。就是给Pod容器添加本地域名解析。apiVersion: apps/v1 kind: Deployment metadata: name: nginx-hosts labels: app: web spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx-hosts image: nginx:latest imagePullPolicy: IfNotPresent hostAliases: - ip: 192.168.128.11 hostnames: - zyf.qq.com - zyf.test.com查看结果如下2Pod中添加DNS配置目标在Pod容器中天啊及dns解析实际操作容器的/etc/resolv.conf文件。apiVersion: apps/v1 kind: Deployment metadata: name: nginx-hosts labels: app: web spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx-hosts image: nginx:latest imagePullPolicy: IfNotPresent dnsPolicy: None dnsConfig: nameservers: - 192.168.128.71 searches: - natvsc.cluster.local - my.dns.search.natapiVersion: apps/v1 kind: Deployment metadata: name: nginx-hosts labels: app: web spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx-hosts image: nginx:latest imagePullPolicy: IfNotPresent # 新增设置Pod的DNS策略为None表示不使用集群默认的DNS配置完全使用下面自定义的dnsConfig dnsPolicy: None # 新增自定义DNS配置块替代集群默认DNS设置 dnsConfig: # 自定义DNS服务器地址列表Pod解析域名时会优先使用这些DNS服务器 nameservers: - 192.168.128.71 # 自定义DNS搜索域当解析短域名时会自动拼接这些搜索域进行完整域名解析 searches: - natvsc.cluster.local # 集群内部DNS搜索域 - my.dns.search.nat # 自定义业务DNS搜索域3总结我们单纯使用Pod配置域名解析和DNS配置也是生效的。Pod 的dnsPolicy默认值是ClusterFirst此时Pod 的/etc/resolv.conf会自动指向 CoreDNS 的 ClusterIP通常是10.96.0.10所有域名解析请求都会先发给 CoreDNSCoreDNS 负责解析集群内域名如xxx.default.svc.cluster.local集群外域名则转发到宿主机 DNS。你配置的dnsPolicy: None场景这个配置会完全绕过 CoreDNSPod 不会再使用 CoreDNS 的地址Pod 的/etc/resolv.conf会被你配置的dnsConfig覆盖只包含192.168.128.71和对应的搜索域此时 Pod 的所有域名解析请求都会直接发给192.168.128.71和 CoreDNS 没有任何关系集群内的 Service 域名如nginx.default.svc也无法解析除非192.168.128.71能处理这些域名。补充常用的 dnsPolicy 与 CoreDNS 的关系dnsPolicy 类型与 CoreDNS 的关系ClusterFirst默认优先使用 CoreDNS集群外域名转发ClusterFirstWithHostNet主机网络的 Pod 优先用 CoreDNSDefault使用宿主机 DNS不使用 CoreDNSNone完全自定义 DNS和 CoreDNS 无关你的场景六Deployment控制创建一个web站点Deployment 是一个三层结构Deployment 管理 ReplicaSetReplicaSet 管理 Pod。1编写资源文件apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 802查看结果-rw-r--r--. 1 root root 384 Mar 11 12:18 test-nginx.yaml [rootk8s-node1 deployment]# kubectl apply -f test-nginx.yaml deployment.apps/nginx created [rootk8s-node1 deployment]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 22s [rootk8s-node1 deployment]# kubectl get rs NAME DESIRED CURRENT READY AGE nginx-b4cbbbbf9 2 2 2 35s [rootk8s-node1 deployment]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-b4cbbbbf9-6nbnc 1/1 Running 0 43s nginx-b4cbbbbf9-j5pc2 1/1 Running 0 43s [rootk8s-node1 deployment]#replicaset的namedeployment.name 字符串pod的namereplicaset的name字符串。3动态扩容1通过yaml文件来实现推荐修改资源文件将数量改成3个。apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 3 selector: matchLabels: app: web template: metadata: labels: app: web spec: containers: - name: nginx image: nginx:latest imagePullPolicy: IfNotPresent ports: - containerPort: 80多开几个视口-w进行监视。[rootk8s-node1 deployment]# kubectl apply -f test-nginx.yaml deployment.apps/nginx configured [rootk8s-node1 deployment]#[rootk8s-node1 ~]# kubectl get deployment -w NAME READY UP-TO-DATE AVAILABLE AGE nginx 2/2 2 2 8m6s nginx 2/3 2 2 10m nginx 2/3 2 2 10m nginx 2/3 2 2 10m nginx 2/3 3 2 10m nginx 3/3 3 3 10m[rootk8s-node1 ~]# kubectl get rs -w NAME DESIRED CURRENT READY AGE nginx-b4cbbbbf9 2 2 2 8m17s nginx-b4cbbbbf9 3 2 2 10m nginx-b4cbbbbf9 3 2 2 10m nginx-b4cbbbbf9 3 3 2 10m nginx-b4cbbbbf9 3 3 3 10m[rootk8s-node1 ~]# kubectl get pods -w NAME READY STATUS RESTARTS AGE nginx-b4cbbbbf9-6nbnc 1/1 Running 0 8m30s nginx-b4cbbbbf9-j5pc2 1/1 Running 0 8m30s nginx-b4cbbbbf9-ffrsj 0/1 Pending 0 0s nginx-b4cbbbbf9-ffrsj 0/1 Pending 0 0s nginx-b4cbbbbf9-ffrsj 0/1 ContainerCreating 0 0s nginx-b4cbbbbf9-ffrsj 0/1 ContainerCreating 0 0s nginx-b4cbbbbf9-ffrsj 1/1 Running 0 1s2通过edit编辑来实现^C[rootk8s-node1 ~]# kubectl get rs -w NAME DESIRED CURRENT READY AGE nginx-b4cbbbbf9 4 4 4 15m nginx-test-587f4bd885 2 2 2 12ddeployment和rs和pod都翻倍了。3总结核心差异YAML 文件方式以 “文件为源”可追溯、低风险、符合 IaCedit方式是直接改集群状态即时生效但无记录、易出错适用场景YAML 适合规范运维 / 团队协作edit仅适合临时应急操作关键原则无论用哪种方式扩容最终都要保证集群配置和本地 YAML 文件一致避免 “配置漂移”。4动态缩容跟上边一样就是修改副本数量即可。5滚动升级部署的时候使用的镜像myapp:v1,更新的时候修改deployment文件修改镜像为myapp:v2kubectl apply -f deply-demo.yaml之后我们观察下。查看控制器所有的历史版本[rootk8s-node1 ~]# kubectl get deployment NAME READY UP-TO-DATE AVAILABLE AGE nginx 4/4 4 4 28m nginx-test 2/2 2 2 12d [rootk8s-node1 ~]# kubectl rollout history deployment nginx deployment.apps/nginx REVISION CHANGE-CAUSE 1 none [rootk8s-node1 ~]# ^C6版本回退kubectl rollout undo deployment myapp--to-reversion1更新的时候没有将rs的旧版本进行删除如果删除了就会滚不了了。7自定义滚动更新策略在 Kubernetes 中可通过设置 Deployment 的spec.strategy来自定义滚动更新策略。Kubernetes 默认的滚动更新策略是 RollingUpdate在更新新版本 Pod 的同时逐步关闭和删除旧 Pod保证服务在整个更新期间保持可用。RollingUpdate 有两个可选值maxSurge和maxUnavailable用来控制滚动更新的具体策略。maxSurge新增实例数值可以是整数或百分比。例如 10 个副本5% 即 0.5 个计算按 0 个。maxUnavailable可用实例最大数值可以是整数或百分比。例如 10 个副本5% 即 0.5 个计算按 1 个。注意maxSurge 和 maxUnavailable 两者不能同时为 0。当我有 10 个副本maxSurge1maxUnavailable 为 0 时实例总数最大为 10那么现在只有 10 个副本无法删除。maxSurge 为 1 表示新增实例数那么会先创建 1 个 pod现在就有 11 个 pod。maxUnavailable 保证有 10 个实例就会删除一个然后反复直到完成。