我是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
复制相似问题