我是kubernete的新手,对apply
和rollout
命令有一点困惑。如果我更新kubernete配置文件,我应该使用kubectl apply -f
还是kubectl rollout
如果我更新kubernete配置并运行kubectl apply -f
,它将终止正在运行的pod并创建一个新的pod。
但是rollout
也有用于重启pod的restart
命令。那么我什么时候应该使用rollout restart
呢?
发布于 2021-03-01 18:42:14
我能想到的一个主要区别是kubectl apply
可以用于所有Kubernetes对象(Pod
、Deployment
、ConfigMaps
、Secrets
等)。其中,as kubectl rollout
特别适用于处理某些计算的对象,如Deployments
、Statefulsets
等。
此外,在不需要对spec
字段进行任何更改的情况下,kubectl rollout restart
对于重新启动pods非常有用,而这在kubectl apply
中是不可能的。如果我们在spec
字段没有更改的情况下运行kubectl apply
,那么pods将不会更新,因为没有要更新的更改。
考虑这样一种场景,其中某些配置(例如,外部证书)作为ConfigMap
挂载到pods,并且ConfigMap
中的任何更改都不会导致pods自动更新。在这样的场景中,kubectl rollout restart
可以用于创建新的pods,然后这些pods可以从ConfigMap
读取更新的配置。
另外,来自docs的一个重要注意事项
注意:如果且仅当更改部署的Pod模板(即.spec.template)时,才会触发部署的卷展栏,例如更新模板的标签或容器镜像。其他更新,例如扩展部署,不会触发部署。
发布于 2021-03-01 18:36:38
用于应用配置文件kubernetes的kubectl apply -f
(部署所需应用程序的位置)。
并使用kubectl rollout
检查上述部署的应用程序
示例
假设您的部署配置文件如下所示,并将其保存在nginx.yaml文件中。现在,您希望从下面的yaml文件部署nginx应用程序。因此,您应该使用kubectl apply -f nginx.yaml
,现在您需要检查是否使用kubectl rollout status nginx
成功部署了应用程序
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
如果您在本地更新了yaml,并希望将其替换为现有的,则使用kubectl replace -f nginx.yaml
https://stackoverflow.com/questions/66420443
复制相似问题