k8s实践总结

一、pod常用操作:

1、如何重启pod?

1.1 删除并重新创建Pod

这是最直接的方法。你可以通过kubectl命令行工具删除Pod,然后Kubernetes将基于其对应的Deployment、ReplicaSet或其他控制器自动重新创建它。

不建议并行删除全部pod,建议一个一个串行删除,至少保留一个pod可用,常用于删除一个pod(多pod情况下)。

复制代码
kubectl delete pod <pod-name>

确保你知道Pod所属的Deployment或其他控制器,因为这将触发控制器重新创建Pod。如果你只删除了Pod而没有对应的控制器来重新创建它,那么Pod将不会自动恢复。

1.2 使用kubectl rollout restart

对于由Deployment管理的Pod,你可以使用kubectl rollout restart命令来重启所有的Pod实例。

复制代码
kubectl rollout restart deployment/<deployment-name>

这个命令会触发Deployment的滚动更新,即使Deployment的配置没有改变也会如此。

1.3 缩放Deployment然后恢复

将Deployment的副本数(replicas)缩放到0,然后再恢复到原始值,也可以达到重启Pod的效果。

此方法存在风险,不建议使用。其流程是先将副本调成 0,然后再改回目的副本数,会中断服务。

复制代码
kubectl scale deployment/<deployment-name> --replicas=0  

kubectl scale deployment/<deployment-name> --replicas=<original-replica-count>

1.4 kubectl rollout restart

这个命令是比较推荐的,通过

复制代码
kubectl rollout restart deployment  -n 

kubectl rollout restart deployment <deployment_name> -n <namespace>

便可以重建这个deployment下的 pod,和滚动升级类似,并不会一次性杀死Pod,比较平滑。

1.5 kubectl replace

通过更新Pod ,从触发k8s pod 的更新。

复制代码
kubectl get pod <pod_name> -n <namespace> -o yaml | kubectl replace --force -f -

1.6 kubectl set env

通过 设置环境变量,其实也是更新pod spec 从而触发滚动升级。

复制代码
kubectl set env deployment <deployment name> -n <namespace> DEPLOY_DATE="$(date)"

只不过这里通过kubectl 命令行,当我们通过API 更新pod spec 后一样会触发滚动升级

注意事项

  • 在执行上述操作之前,请确保你已经备份了任何重要的数据或配置,以防止数据丢失。
  • 了解你的Pod是如何被管理的(比如通过Deployment、StatefulSet、DaemonSet等),以便选择最合适的方法。
  • 在生产环境中,避免直接删除Pod,因为这可能会导致服务中断。通常,使用滚动更新或修改配置来触发更新是更安全的做法。
  • 考虑到Kubernetes的调度和容错机制,Pod可能会在任何时候因为各种原因(如节点故障、资源不足等)被重新调度或替换。因此,设计应用程序时应该考虑到这一点,确保它们是状态无关的或能够处理状态的持久化。
相关推荐
zcz160712782114 小时前
nfs挂载pv,pvc
kubernetes
Cyber4K15 小时前
【Kubernetes专项】K8s集群1.31版本安装手册
linux·docker·云原生·容器·kubernetes
Exquisite.16 小时前
云原生高级前置复习
linux·云原生·云计算
bentengjiayou19 小时前
K8S是用来解决什么问题的?
云原生·容器·kubernetes
2501_9011644119 小时前
我们如何把“配环境一天”缩短到“3秒启动”?
kubernetes
大猫和小黄19 小时前
若依从零到部署:前后端分离和微服务版
java·微服务·云原生·架构·前后端分离·若依
oMcLin20 小时前
如何在Debian 11上使用Kubernetes网络策略,确保多租户环境下的网络安全与流量隔离?
kubernetes·debian
伞啊伞21 小时前
k8s(五)集群调度与PV和PVC
云原生·容器·kubernetes
海鸥8121 小时前
K8s 的 command/args 会覆盖 Dockerfile 的 CMD/ENTRYPOINT
云原生·容器·kubernetes