副本集和部署都有属性replica: 3
,部署和副本集有什么区别?部署是否通过底层的副本集进行?
部署配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
labels:
my-label: my-value
spec:
replicas: 3
selector:
matchLabels:
my-label: my-value
template:
metadata:
labels:
my-label: my-value
spec:
containers:
- name: app-container
image: my-image:latest
Run Code Online (Sandbox Code Playgroud)
副本集的配置
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: my-replicaset
labels:
my-label: my-value
spec:
replicas: 3
selector:
matchLabels:
my-label: my-value
template:
metadata:
labels:
my-label: my-value
spec:
containers:
- name: app-container
image: my-image:latest
Run Code Online (Sandbox Code Playgroud)
何时使用 ReplicaSet
ReplicaSet 可确保在任何给定时间运行指定数量的 Pod 副本。然而,部署是一个更高级别的概念,它管理 ReplicaSet 并为 Pod 提供声明性更新以及许多其他有用的功能。因此,我们建议使用 Deployments 而不是直接使用 ReplicaSet,除非您需要自定义更新编排或根本不需要更新。
这实际上意味着您可能永远不需要操作 ReplicaSet 对象:而是使用 Deployment,并在规范部分定义您的应用程序。
Far*_*arz 77
部署资源使您可以更轻松地将 pod 更新到新版本。
假设您使用ReplicaSet-A来控制您的 pod,那么您希望将您的 pod 更新到较新的版本,现在您应该创建Replicaset-B,缩小ReplicaSet-A并扩大ReplicaSet-B重复一步(此过程称为滚动更新)。虽然这可以完成工作,但这不是一个好的做法,最好让 K8S 来完成这项工作。
部署资源会自动执行此操作,无需任何人工交互,并将抽象程度提高一级。
注意:部署不直接与 Pod 交互,它只是使用 ReplicaSet 进行滚动更新。
Tho*_*mas 58
ReplicaSet 确保集群中创建一定数量的 Pod。Pod 称为副本,是 Kubernetes 中的可用性机制。但更改 ReplicaSet 不会对现有 Pod 生效,因此无法轻易更改,例如镜像版本。
部署是一种更高的抽象,它管理一个或多个 ReplicaSet 以提供新版本的受控部署。当 Deployment 中的镜像版本发生更改时,将为该版本创建一个新的 ReplicaSet,最初的副本数为零。然后会缩容为一个副本,运行后旧的ReplicaSet会缩容。(新创建的 Pod 数量,即步长,可以调整。)
只要您没有进行中的部署,部署就会生成一个复制集,其复制因子由部署管理。
我建议始终使用 Deployment 而不是裸露的 ReplicaSet。
Pav*_*ulu 21
Deployments 和 ReplicaSet 之间的区别之一是创建 ReplicaSet 后对容器所做的更改不会反映出来
例如:这是我的replicaset.yaml
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-replicaset
spec:
selector:
matchLabels:
app: nginx
replicas: 5 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.13.2
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
我将使用此命令应用此副本集
kubectl apply -f replicaset.yaml
kubectl get pods
kubectl describe pod <<name_of_pod>>
Run Code Online (Sandbox Code Playgroud)
因此,从 pod 定义中,我们可以观察到 nginx 使用的是 1.13.2。现在让我们在replicaset.yaml中将镜像版本更改为1.14.2 再次应用更改
kubectl apply -f replicaset.yaml
kubectl get pods
kubectl describe pod <<name_of_pod>>
Run Code Online (Sandbox Code Playgroud)
现在我们没有看到 Pod 发生任何变化,他们仍在使用旧镜像。
现在让我们对部署重复相同的操作 (deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 5 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.13.2
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
我将使用此命令应用此部署
kubectl apply -f deployment.yaml
kubectl get pods
kubectl describe pod <<name_of_pod>>
Run Code Online (Sandbox Code Playgroud)
将deployment.yaml文件更改为其他版本的nginx镜像
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 5 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Run Code Online (Sandbox Code Playgroud)
我将使用此命令再次应用此部署
kubectl apply -f deployment.yaml
kubectl get pods
kubectl describe pod <<name_of_pod>>
Run Code Online (Sandbox Code Playgroud)
现在我们可以看到这些 pod,并且可以在 pod 的描述中看到更新后的图像
总而言之:
\n部署管理 \xe2\x86\x92 副本集管理 \xe2\x86\x92 pod 抽象 \xe2\x86\x92 容器(例如 docker 容器)
\n部署一个更高级别的抽象,代表应用程序的一组副本。它确保您所需数量的应用程序副本正在运行且可用。
\n副本集另一方面,ReplicaSet 是一种较低级别的资源,负责维护应用程序的一组稳定的ReplicaSet 确保指定数量的副本正在运行且可用。
\n示例:\n假设您有一个 Web 应用程序想要在 3 个副本上运行以实现高可用性。
\n您将在 Kubernetes 中创建一个部署资源,并将所需的副本数量指定为 3 个 Pod。然后,部署将创建并管理 ReplicaSet,而 ReplicaSet 又将创建并管理 Web 应用程序 Pod 的 3 个副本。
总之,Deployment 为扩展、滚动更新和回滚提供了更高级别的抽象,而 ReplicaSet 提供了较低级别的机制来确保指定数量的应用程序副本正在运行。
\n 归档时间: |
|
查看次数: |
45485 次 |
最近记录: |