内容简介:网上基本没有k8s client-go的使用资料,我实现了6个demo,项目地址:一共6个demo:最后一个完美实现了web ssh登录container调试的效果。
网上基本没有k8s client-go的使用资料,我实现了6个demo,项目地址: https://github.com/owenliang/k8s-client-go 。
一共6个demo:
- demo1: 连接k8s
- demo2: 解析yaml为json, 反序列化到deployment对象, 修改deployment.spec.replicas, 提交到k8s生效
- demo3: 更新deployment.Spec.Template.Spec.Containers, 升级镜像版本, 提交到k8s生效
- demo4: 更新deployment, 循环获取部署状态, 判定部署完成, 并获取最新pod列表与失败原因
- demo5: xterm.js的基本用法, 为后续web ssh访问k8s container做铺垫
- demo6: xterm.js+client-go remotecommand实现完美web ssh登录container
最后一个完美实现了web ssh登录container调试的效果。
demo6值得记录一下,免得时间久了容易忘记思路。
前端用xterm.js库,它只是模拟一个terminal在浏览器中,并没有通讯能力。
需要在前端建立websocket,连到自己开发的golang websocket服务端。
服务端会基于k8s的remotecommand包,建立与container的ssh长连接,所以服务端开发并不麻烦。
remotecommand包只需要我们提供3个回调,其中read是来获取terminal的输入,我们要做的就是读取websocket发来的数据,然后返回给read回调;write则是用来向terminal发送数据,我们要做的就是调用websocket把数据写到前端,然后前端把数据写给xterm即可;next是用来获取terminal的实际大小的,sshd服务端需要知道终端的大小,这样决定了它一行输出多少个字符就要输出一次换行符。所以,当浏览器窗口改变影响了terminal大小的时候,前端应该把最新的terminal大小发给服务端,然后在next回调中返回其大小。
xterm.js特别需要注意的就是需要apply一个addon,叫做fit。这个插件提供一个fit方法,调用它就可以让terminal的输出填满整个黑色视口,否则你可能会看到字符只输出了1/2的屏幕就换行了。
下面是真实的效果,和secureCrt等终端没什么区别,就是不带颜色而已。
具体大家看代码吧。
参考:
- xterm.js文档: https://xtermjs.org/docs/
以上所述就是小编给大家介绍的《k8s系列 – client-go详细用法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。