前面2个章节,了解了pod的创建过程和生命周期。但是在实际应用中,直接创建pod是很少见的,因为一旦这个pod挂掉了。整个服务就宕机了。所以 kubernetes 提供了一个Deployment
的概念,可以让 Deployment
来管理一组 POD 的副本,也就是副本集,这样就可以保证一定数量的副本一直可用的,不会因为一个 POD 挂掉导致整个服务挂掉。
Deployment是Kubernetes中的一个核心概念,它是一种高级别的控制器,用于管理Pod和ReplicaSet,确保应用程序的高可用性和稳定性。Deployment通过声明式配置来创建和更新Pod和ReplicaSet,从而管理应用程序的生命周期。
Deployment
: 管理 ReplicaSet 的创建和更新。Deployment 允许用户声明希望运行的应用状态,包括 Pod 的模板、副本数量和更新策略。通过 Deployment,用户可以轻松实现滚动更新和回滚。
ReplicaSet
: 确保指定数量的 Pod 实例在任何时候都在运行。它通过监控 Pod 的状态来管理 Pod 的创建和删除。如果某个 Pod 异常终止,ReplicaSet 会创建一个新的 Pod 来替代它。
Pod:一个或多个容器的集合。Pod 共享存储、网络和上下文。
Deployment
主要功能和特点
副本管理:Deployment确保在集群中有指定数量的Pod副本运行。如果Pod副本数量少于期望值,Deployment会自动创建新的Pod;如果副本数量超过期望值,则会删除多余的Pod。
滚动更新:Deployment支持滚动更新策略,逐步替换旧版本的Pod为新版本,保障业务的连续性,避免一次性更新导致的服务中断。
版本回滚:如果应用程序升级后出现问题,可以通过Deployment回滚到之前的版本。
高可用性:当Pod失效时,Deployment会自动创建新的Pod以替换失效的Pod,保证服务的连续运行。
Deployment
使用场景和示例
Deployment的使用场景包括但不限于:
应用部署:将构建好的容器镜像部署到Kubernetes集群中,并提供服务。
应用升级:通过更新容器镜像并重新部署Deployment来实现应用的更新。
回滚操作:当应用升级出现问题时,可以回滚到之前的稳定版本。
以下是一个Deployment资源清单的示例:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: front-end
image: m.daocloud.io/docker.io/nginx
ports:
- containerPort: 80
上述内容看起来和之前的pod创建的yaml文件有点类似,尤其是template下面一部分,其实就是对pod的定义,和之前的pod的yaml文件写的是一样的。
-
apiVersion,这里它的值是 apps/v1,这个版本号需要根据我们安装的 kubernetes 版本和资源类型进行变化的,记住不是写死的
-
kind,这里我们创建的是一个 Deployment
-
metadata:包含了我们定义的 Deployment的一些 meta 信息,比如名称、namespace、namede信息。
-
spec:
-
replicas:会创建几个pod的副本,上面的例子写了2个副本,就会生成2个pod
-
selector:pod标签选择器,和下面的template里面的labels是对应关系,表名这个deployment通过app: web 这一组标签,进行pod的选择,而下面的template中labels也提供的pod的标签也是app: web。
-
-
template: 描述pod的一些属性
查看此时的deployment和pod的状态
可以看到有2个pod已经启动,和之前设置的replicas保持一致。