[root@woker-cn-hangzhou-172-18-0-106 ]# kubectl set image deployment/flyby-hotel-channel flyby-hotel-channel=registry-vpc.cn-hangzhou.aliyuncs.com/flyby-test/flyby-hotel-channel:v250 --namespace=flyby-test --record
kubectl set image deployment/flight-hotel-v3 flight-hotel-v3=registry-vpc.cn-hangzhou.aliyuncs.com/flyby-test/flight-hotel-v3:v10059 --namespace=h5 --record
kubectl set image和kubectl apply都可以用于更新Kubernetes中的服务。其中,kubectl set image的作用是直接修改Deployment、ReplicationController等管理器中的镜像版本号,而kubectl apply则是将指定的YAML文件应用到Kubernetes集群中进行部署。
这两种方式各有优缺点。kubectl set image的优点是简单、快速,可以自动升级应用程序的镜像标签版本。当需要及时修补漏洞或紧急变更镜像标签时,使用该方法比较方便。不过由于直接修改了资源配置,会导致其与版本控制不一致,因此需要记录更改历史以备回溯,如添加 --record 参数。
而kubectl apply的优点在于可以比较灵活地对YAML文件进行编辑和管理,包括查看最新的状态、回滚到上一个版本、对已经存在的资源进行增加/删减/修改等操作,对于结构比较复杂或者需要动态进行调整的应用程序来说比较有优势。
从可用性角度来看,kubectl apply更加安全可靠。它能够确保新创建的Pod与旧的Pod之间进行排队替换而不影响整个服务的可用性;而kubectl set image在更新容器镜像后,会立即重启旧的Pod并创建新的Pod,可能会影响应用程序的可用性直至所有Pod都完成更新。因此,如果服务的可用性对业务非常关键,建议使用kubectl apply等较为谨慎的方式进行更新。