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可能会在任何时候因为各种原因(如节点故障、资源不足等)被重新调度或替换。因此,设计应用程序时应该考虑到这一点,确保它们是状态无关的或能够处理状态的持久化。
相关推荐
条纹布鲁斯42 分钟前
dockerdsktop修改安装路径/k8s部署wordpress和ubuntu
docker·kubernetes
登云时刻4 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(一)
redis·kubernetes·bootstrap
运维&陈同学4 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
吴半杯5 小时前
gateway漏洞(CVE-2022-22947)
docker·kubernetes·gateway
Code_Artist7 小时前
使用Portainer来管理并编排Docker容器
docker·云原生·容器
灼烧的疯狂9 小时前
K8S + Jenkins 做CICD
容器·kubernetes·jenkins
wenyue112110 小时前
Revolutionize Your Kubernetes Experience with Easegress: Kubernetes Gateway API
容器·kubernetes·gateway
梅见十柒12 小时前
wsl2中kali linux下的docker使用教程(教程总结)
linux·经验分享·docker·云原生
Python私教13 小时前
ubuntu搭建k8s环境详细教程
linux·ubuntu·kubernetes
运维&陈同学14 小时前
【zookeeper01】消息队列与微服务之zookeeper工作原理
运维·分布式·微服务·zookeeper·云原生·架构·消息队列