什么时候使用“apply”,什么时候使用“rollout”?

Zha*_* Yi 7 kubernetes

apply我是 kubernete 的新手,对命令有点困惑rollout。如果我更新 kubernete 配置文件,我应该使用kubectl apply -f还是kubectl rollout

如果我更新 kubernete 配置并运行kubectl apply -f,它将终止正在运行的 pod 并创建一个新的 pod。

而且rollout还有restart用于重新启动 pod 的命令。那么我应该什么时候使用rollout restart

Kri*_*sia 10

我能想到的一个主要区别是kubectl apply可以用于所有 Kubernetes 对象(PodDeploymentConfigMapsSecrets等),其中kubectl rollout专门适用于处理某些计算的对象Deployments,例如Statefulsets、 等。

此外,kubectl rollout restart无需对字段进行任何更改即可重新启动 Pod,spec这是kubectl apply. 如果我们kubectl apply在字段中没有更改的情况下运行spec,则 Pod 将不会更新,因为没有要更新的更改。

考虑这样的场景:某些配置(例如,外部证书)安装到 Pod ConfigMap,并且任何更改都ConfigMap不会导致 Pod 自动更新。kubectl rollout restart在这种情况下创建新的 pod 非常有用,然后这些 pod 可以从ConfigMap.

另外,文档中的一个重要说明:

注意:当且仅当 Deployment 的 Pod 模板(即 .spec.template)发生更改(例如,模板的标签或容器映像更新)时,才会触发 Deployment 的推出。其他更新(例如扩展部署)不会触发部署。


Das*_*kar 6

用于kubectl apply -f应用配置文件 kubernetes(您部署所需应用程序的位置)。

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
Run Code Online (Sandbox Code Playgroud)

如果您在本地更新了 yaml 并且想要将其替换为现有的,则使用kubectl replace -f nginx.yaml