Kubernetes实践:常用命令

发布于 2017-10-20 · 本文总共 2400 字 · 阅读大约需要 7 分钟

kubectl

kubernetes通过kube-apiserver作为整个集群管理的入口。 Apiserver是整个集群的主管理节点,用户通过Apiserver配置和组织集群,同时集群中各个节点同etcd存储的交互也是通过Apiserver进行交互。 Apiserver实现了一套RESTfull的接口,用户可以直接使用API同Apiserver交互。 另外官方还提供了一个客户端kubectl随工具集打包,用于可直接通过kubectl以命令行的方式同集群交互。

help

get

列出集群所有resource的详细。resource包括集群节点、运行的pod,ReplicationController,service等。

  • -o yaml

以yawl格式输出pod的详细信息

  • -o json

以jison格式输出pod的详细信息。

describe

get获得的是更详细的resource个性的详细信息,describe获得的是resource集群相关的信息

replace

replace命令用于对已有资源进行更新、替换。如前面create中创建的nginx,当我们需要更新resource的一些属性的时候,如果修改副本数量,增加、修改label,更改image版本,修改端口等。都可以直接修改原yaml文件,然后执行replace命令。

attach

attach命令类似于docker的attach命令,可以直接查看容器中以daemon形式运行的进程的输出,效果类似于logs -f,退出查看使用ctrl-c。 如果一个pod中有多个容器,要查看具体的某个容器的的输出,需要在pod名后使用-c containers name指定运行的容器。

exec

exec命令同样类似于docker的exec命令,为在一个已经运行的容器中执行一条shell命令,如果一个pod容器中,有多个容器,需要使用-c选项指定容器。

patch

kubectl patch pod rc-nginx-2-kpiqt -p '{"metadata":{"labels":{"app":"nginx-3"}}}'

如果一个容器已经在运行,这时需要对一些容器属性进行修改,又不想删除容器,或不方便通过replace的方式进行更新。 kubernetes还提供了一种在容器运行时,直接对容器进行修改的方式,就是patch命令。

edit

kubectl edit po rc-nginx-btv4j
-------
kubectl get po rc-nginx-btv4j -o yaml >> /tmp/nginx-tmp.yaml   
vim /tmp/nginx-tmp.yaml   
/*do some changes here */   
kubectl replace -f /tmp/nginx-tmp.yaml

edit提供了另一种更新resource源的操作,通过edit能够灵活的在一个common的resource基础上,发展出更过的significant resource。

logs

logs命令用于显示pod运行中,容器内程序输出到标准输出的内容。跟docker的logs命令类似。如果要获得tail -f 的方式,也可以使用-f选项。

kubectl -n testing logs -f xxx-xxxx-deployment-6cbd58779f-t2pdm

rollout

升级

通过kubectl rollout status 可以查看deployment的更新过程

在Deployment的定义中,可以通过spec.strategy指定Pod更新的策略:

1.Recreate(重建): 设置spec.strategy.type=Recreate,表示Deployment在更新Pod时,会先杀掉所有正在运行的Pod,然后创建新的Pod.

2.RollingUpdate(滚动更新):以滚动更新的方式来逐个更新Pod,可以通过设置spec.strategy.rollingUpdate下的两个参数(maxUnavailable和maxSurge)来控制滚动更新的过程。

通常来说,不鼓励更新Deployment的标签选择器,因为这样会导致Deployment选择的Pod列表发生变化,也可能与其它控制器产生冲突。

升级策略有recreate和rollingUpdate。
recreate:删除所有已存在的pod,重新创建新的;
rollingUpdate:滚动升级,逐步替换的策略,同时滚动升级时,支持更多的附加参数,例如设置最大不可用pod数量,最小升级间隔时间等等。

如何使用哪种策略,需要看应用场景。 recreate策略将会在升级过程中,停止服务,但会保证应用版本一致; 使用rollingUpdate不会中断服务,但会导致调用时出现应用版本不一致的情况,输出内容不一致。

查看升级状态 kubectl rollout status

Deployment的回滚

所有Deployment的发布历史记录都保留在系统中,如果要进行回滚:

1.用kubectl rollout history命令检查这个Deployment部署的历史记录

2.用kubectl rollout undo deployment/nginx-deployment 撤销本次发布回滚到上一个部署版本

3.用kubectl rollout undo deployment/nginx-deployment –to-revision=2 回滚到指定版本

  • 暂停和恢复Deployment的部署操作,以完成复杂的修改

对应一次复杂的Deployment配置修改,为了避免频繁触发Deployment的更新操作,可以暂停Deployment的更新操作,然后进行配置修改,再回复Deployment.一次性触发完整的更新操作。

使用命令:kubectl rollout pause deployment/nginx-deployment




本博客所有文章采用的授权方式为 自由转载-非商用-非衍生-保持署名 ,转载请务必注明出处,谢谢。
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:邱文奇(qiuwenqi)的博客;
内容系本人学习、研究和总结,如有雷同,实属荣幸!
阅读次数:

文章评论

comments powered by Disqus


章节列表