Kubernetes(K8S) Controller - StatefulSet、DaemonSet 介绍

kubernetes,k8s,controller,statefulset,daemonset,介绍 · 浏览次数 : 99

小编点评

无状态和有状态无状态Deployment的差异主要体现在两点: 1. **Pod 的生命周期:** * 无状态无状态Deployment 的 Pod 在 Kubernetes 中被视为一个不可中断的容器,这意味着它始终运行在相同的 node 上。 * 有状态无状态Deployment 的 Pod 可以被调度到不同的 node 上运行,但它在启动时会从 Kubernetes 的 API Server 中获取配置。 2. **Pod 的启动顺序:** * 无状态无状态Deployment 的 Pod 通常会启动在 Kubernetes 的 API Server 上。 * 有状态无状态Deployment 的 Pod 会根据配置从 Kubernetes 的 API Server 中获取启动参数。 **其他关键区别:** * **Pod 的身份:** * 无状态无状态Deployment 的 Pod 不会像有状态无状态Deployment 的 Pod那样具有自己的身份。 * 每个 Pod 都使用其主机名和端口来标识 itself。 * **Pod 的持久化:** * 无状态无状态Deployment 的 Pod 通常不会被持久化到 Kubernetes 的 API Server 中。 * 有状态无状态Deployment 的 Pod 会被持久化到 Kubernetes 的 API Server 中,并在任何 node 上启动。 * **Pod 的资源限制:** * 无状态无状态Deployment 的 Pod 通常具有与有状态无状态Deployment 相同的资源限制。 * 有状态无状态Deployment 的 Pod 可以根据其配置进行资源限制。 **总结:** 无状态和有状态无状态Deployment 是 Kubernetes 中两种截然不同的部署模式。无状态无状态Deployment 通常用于需要在多个 node 上运行相同的应用程序,而有状态无状态Deployment 通常用于需要从 Kubernetes 的 API Server 中获取配置的应用程序。

正文

无状态和有状态

无状态

Deployment

  • 认为Pod 都是一样的。javademo1-6fb64c4664-dj4dh、javademo1-6fb64c4664-dj54s 它们的内容是一样的。
  • 没有顺序要求,先启第一个还是启第二个无所谓
  • 不用考虑在哪个 node 上运行
  • 随意进行伸缩和扩展

有状态

  • 无状态的因素都要考虑到
  • 让每个 pod 独立,保持pod启动顺序和唯一性
  • 唯一的网络标识符,持久存储
  • 有些,比如MySQL 主从,先启主,再启从

部署有状态应用

无头的Service, ClusterIP: none

  • SatefulSet 部署无状态应用
    image

Deployment 和 Statefulset 区别:有身份的(唯一标识的)
根据主机名+一定规则生成域名
每个Pod有唯一主机名
唯一域名:
格式:主机名称.Service名称.命名空间.svc.cluster.local
nginx-statefulset-0.nginx.default.svc.cluster.local

部署守护进程 DaemonSet
在每一个 node 上运行一个 pod,新加入的 node 也同样运行在一个pod 里面
image

job(一次性任务)

image

[root@k8smaster ~]# kubectl get job

cronjob(定时任务)

image

与Kubernetes(K8S) Controller - StatefulSet、DaemonSet 介绍相似的内容:

Kubernetes(K8S) Controller - StatefulSet、DaemonSet 介绍

无状态和有状态 无状态 Deployment 认为Pod 都是一样的。javademo1-6fb64c4664-dj4dh、javademo1-6fb64c4664-dj54s 它们的内容是一样的。 没有顺序要求,先启第一个还是启第二个无所谓 不用考虑在哪个 node 上运行 随意进行伸缩和扩展 有

Kubernetes(K8S) Controller - Deployment 介绍

什么是controller 实际存在的,管理和运行容器的对象 Pod 和 Controller 关系 Pod 是通过 Controller 实现应用的运维,比如伸缩、滚动升级等等 Pod 和 Controller 之间通过 label 标签建立关系 Deployment 控制器应用场景 场景:Web

Kubernetes(K8S) 介绍

Master Api Server 统一入口,以 Restful 方式,交给 etcd 存储 Scheduler 节点调试,选择 Node 节点,做应用部署 Controller Manager 处理集群中常规后台任务,一个资源对应一个控制器 etcd 存储系统,用于保存集群相关的数据 Node k

二进制安装Kubernetes(k8s)v1.30.1

二进制安装Kubernetes(k8s)v1.30.1 https://github.com/cby-chen/Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes(k8s)二进制高可用安装部署,支持IPv4+IPv6双栈。 我使用IPV6的目的是在公网进行访问,所以

DevSecOps 需要知道的十大 K8s 安全风险及建议

Kubernetes (K8s)是现代云原生世界中的容器管理平台。它实现了灵活、可扩展地开发、部署和管理微服务。K8s 能够与各种云提供商、容器运行时接口、身份验证提供商和可扩展集成点一起工作。然而 K8s 的集成方法可以在任何基础设施上运行任何容器化应用程序,这使得围绕 K8s 和其上的应用程序堆

Kubernetes(K8S) Deployment 拉取阿里云镜像部署

Docker Image 推到阿里云仓库,可以看 SpringBoot Docker 发布到 阿里仓库 1. 阿里镜像仓库加了授权,所以 K8S 拉之前要做下授权处理 [root@k8smaster ~]# kubectl create secret docker-registry registry

Kubernetes(K8S) 拉取镜像 ImagePullBackOff pull access denied

K8S 拉取阿里云镜像 第一次用时,没注意 授权,所以在 kubectl apply 后一直出现 ImagePullBackOff [root@k8smaster ~]# kubectl apply -f javademo1.yaml deployment.apps/javademo1 create

Kubernetes(K8S) Deployment 升级和回滚

创建部署详见 Kubernetes(K8S) Deployment 部署 Pod 传统应用升级,一般是V1.0的jar包,有一个应对 1.0 的 shell 启动脚本。升级时,传 2.0 的 jar包,配置 2.0 的 shell 脚本。 执行顺序为,停1.0的服务,启2.0的服务,有问题时,把2.

Kubernetes(K8S) 镜像拉取策略 imagePullPolicy

镜像仓库,镜像已更新,版本没更新, K8S 拉取后,还是早的服务,原因:imagePullPolicy 镜像拉取策略 默认为本地有了就不拉取,需要修改 [root@k8smaster ~]# kubectl edit deployment/javademo1 ..... spec: containe

Kubernetes(K8S) Node NotReady 节点资源不足 Pod无法运行

k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务。 一个 Node 节点中是可以运行多个 Pod 容器,每个 Pod 容器可以运行多个实例 App 容器。Node 节点不可用,就会直接导致 Node 节点中所有的容器不可用,Node 节点是否