Kubernetes实践:常用命令
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