Kubernetes Handbook:从Docker到kubectl的平滑过渡指南

Kubernetes Handbook:从Docker到kubectl的平滑过渡指南

kubernetes-handbook Kubernetes中文指南/云原生应用架构实战手册 - https://jimmysong.io/kubernetes-handbook kubernetes-handbook 项目地址: https://gitcode.com/gh_mirrors/ku/kubernetes-handbook

前言

对于熟悉Docker的开发者来说,Kubernetes的学习曲线可能显得有些陡峭。本文将作为Docker用户向Kubernetes过渡的桥梁,详细对比Docker命令与kubectl命令的对应关系,帮助开发者快速掌握Kubernetes的核心操作。

核心概念差异

在开始命令对比之前,我们需要理解Docker和Kubernetes在设计理念上的关键区别:

  1. 单机与集群:Docker主要管理单机容器,而Kubernetes设计用于管理跨多节点的容器集群
  2. 直接与声明式:Docker命令通常是直接操作,而Kubernetes更倾向于声明式管理
  3. 容器与Pod:Kubernetes的基本调度单位是Pod(可包含多个容器),而非单个容器

命令对比详解

运行应用

Docker方式

docker run -d --restart=always -e DOMAIN=cluster --name nginx-app -p 80:80 nginx

kubectl方式

# 创建Deployment
kubectl run --image=nginx nginx-app --port=80 --env="DOMAIN=cluster"

# 创建Service暴露端口
kubectl expose deployment nginx-app --port=80 --name=nginx-http

关键区别

  • Kubernetes将运行应用分为两个步骤:创建Deployment和创建Service
  • Deployment确保指定数量的Pod副本始终运行(类似Docker的--restart=always但更强大)
  • Service提供稳定的访问入口和负载均衡

查看运行状态

Docker方式

docker ps

kubectl方式

kubectl get pods

扩展命令

  • kubectl get deployments 查看部署状态
  • kubectl get services 查看服务状态
  • kubectl get all 查看所有资源

与容器交互

附加到运行中容器

Docker方式

docker attach <container-id>

kubectl方式

kubectl attach -it <pod-name>
在容器中执行命令

Docker方式

docker exec -it <container-id> /bin/sh

kubectl方式

kubectl exec -it <pod-name> -- /bin/sh

注意事项

  • kubectl需要在命令前加上--分隔符
  • 对于多容器Pod,需指定容器名:kubectl exec -it <pod-name> -c <container-name> -- /bin/sh

日志查看

Docker方式

docker logs -f <container-id>

kubectl方式

kubectl logs -f <pod-name>

高级用法

  • kubectl logs --previous 查看前一个容器的日志(当容器崩溃重启时特别有用)
  • kubectl logs -c <container-name> 查看Pod中特定容器的日志

停止和删除资源

Docker方式

docker stop <container-id>
docker rm <container-id>

kubectl方式

kubectl delete deployment <deployment-name>

重要区别

  • 在Kubernetes中,通常不直接删除Pod,而是删除管理Pod的Deployment
  • 直接删除Pod会导致Deployment重新创建新的Pod

环境信息查询

版本信息

Docker方式

docker version

kubectl方式

kubectl version

环境信息

Docker方式

docker info

kubectl方式

kubectl cluster-info

扩展命令

  • kubectl get nodes 查看集群节点状态
  • kubectl describe node <node-name> 查看节点详细信息

特殊场景处理

私有镜像仓库

Kubernetes处理私有镜像仓库的方式与Docker不同,需要通过Secret来配置访问凭证:

  1. 创建docker-registry secret:
kubectl create secret docker-registry my-registry-key \
  --docker-server=DOCKER_REGISTRY_SERVER \
  --docker-username=DOCKER_USER \
  --docker-password=DOCKER_PASSWORD \
  --docker-email=DOCKER_EMAIL
  1. 在Pod定义中引用该secret:
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: my-registry-key

最佳实践建议

  1. 从Deployment开始:总是使用Deployment来管理Pod,而不是直接创建Pod
  2. 善用标签(Label):使用一致的标签策略方便资源管理
  3. 理解控制器模式:Kubernetes通过控制器模式实现期望状态管理,这与Docker的直接操作有本质区别
  4. 日志收集策略:考虑使用集群级日志收集方案,而非依赖单个容器日志
  5. 监控与健康检查:充分利用Kubernetes的Liveness和Readiness探针

总结

从Docker过渡到Kubernetes需要思维模式的转变:从直接管理容器到声明式管理集群资源。通过本文的命令对比,开发者可以快速找到与Docker命令对应的kubectl操作,同时理解背后的设计理念差异。掌握这些基础命令后,可以进一步探索Kubernetes更高级的特性,如ConfigMap、Volume、Horizontal Pod Autoscaler等。

记住,Kubernetes的强大之处在于它的抽象能力和自动化管理,合理利用这些特性可以大大简化容器化应用的管理工作。

kubernetes-handbook Kubernetes中文指南/云原生应用架构实战手册 - https://jimmysong.io/kubernetes-handbook kubernetes-handbook 项目地址: https://gitcode.com/gh_mirrors/ku/kubernetes-handbook

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯海莎Eliot

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值