K8S node-shell
1 背景
对于云上K8S node我们一般会禁止ssh登录,但有时又不得不登录到node节点查看和debug,这时就可以通过node-shell的方式获得对应node的root shell。
2 安装
我们直接使用kubectl krew命令,
kubectl krew index add kvaps https://github.com/kvaps/krew-index
kubectl krew install kvaps/node-shell
3 使用
查询集群node,然后直接使用node名称,就可以创建一个root shell,
[root@master ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
master Ready control-plane,master 179d v1.21.2
node1 Ready <none> 179d v1.21.2
node2 Ready <none> 179d v1.21.2
[root@master ~]# kubectl node-shell node1
spawning "nsenter-br9ly1" on "node1"
If you don't see a command prompt, try pressing enter.
[root@node1 /]# whoami
root
[root@node1 /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@node1 /]# exit
logout
^Cpod "nsenter-br9ly1" deleted
4 原理
通过查看node-shell的源码,https://github.com/kvaps/kubectl-node-shell/blob/master/kubectl-node_shell,其实就是一个bash脚本,所做的就是起一个特权容器,然后使用nsenter进入到宿主机,从而获取到root shell,关于nsenter命令,可以参考——《K8S调试工具之–nsenter》
kubectl --context=kubernetes-admin@kubernetes --namespace= run --image docker.io/library/alpine --restart=Never '--overrides={"spec": {"nodeName": "node1","hostPID": true,"hostNetwork": true,"containers": [{"securityContext": {"privileged": true},"image": "docker.io/library/alpine","name": "nsenter","stdin": true,"stdinOnce": true,"tty": true,"command": [ "nsenter", "--target", "1", "--mount", "--uts", "--ipc", "--net", "--pid", "--", "bash", "-l" ],"resources": {"limits": {"cpu": "100m","memory": "256Mi"},"requests": {"cpu": "100m","memory": "256Mi"}}}],"tolerations": [{"key": "CriticalAddonsOnly","operator": "Exists"},{"effect": "NoExecute","operator": "Exists"}]}
}' --labels= -t -i nsenter-h3m5fy
参考文档:
- https://github.com/kvaps/kubectl-node-shell/
K8S node-shell相关推荐
- 开发测试环境 k8s node节点磁盘不足运维
开发测试环境 k8s node节点磁盘不足运维 开发测试环境 k8s node节点磁盘不足运维 排查服务器pod 问题 解决服务器节点磁盘问题 开发测试环境 k8s node节点磁盘不足运维 在开发测 ...
- k8s入坑之报错(9)k8s node节点加入到集群时卡住 “[preflight] Running pre-flight checks”...
参考文档k8s node节点加入到集群时卡住 "[preflight] Running pre-flight checks"报错: k8s node节点加入到集群时卡住 " ...
- 【博客558】k8s node为什么需要关闭selinux与swap
k8s node为什么需要关闭selinux与swap 1.关闭selinux centos关闭方法: setenforce 0 && sed -i 's/^SELINUX=.*/SE ...
- 二进制安装K8S - NODE 节点的安装
二进制安装K8S - NODE 节点的安装 安装系统 Linux node02 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x8 ...
- K8S node节点not ready
部署K8s node 节点not ready root@n226-060-152:/opt/cni/bin# kubectl get node NAME STATUS ROLES AGE VERSIO ...
- K8s Node节点ROLES显示修改
K8s Node节点ROLES为<none> 添加label语法: kubectl label nodes <node-name> <label-key>=< ...
- k8s node节点重启后遇到的问题及解决
有一个node节点因为主机原因进行了重启, 主机启动之后,通过执行以下命令恢复了节点状态. systemctl start docker systemctl start kubelet 在主节点查看所 ...
- k8s node节点停机维护,pod如何迁移?
需求 k8s集群中的node节点要升级内存,以应对服务迁入.pod扩缩容导致的资源短缺,需要对node节点进行停机维护,那么此时node节点上的pod应该如何处理呢? 下面我们来看一下. 默认迁移 当 ...
- 如何调整 k8s Node节点的最大可运行Pod数量
环境介绍: Ubuntu 20.04.3 LTS kubeadm安装的k8s集群1.21.8 Kubernetes Node节点默认允许最多创建110个Pod,如何调整Node节点的最大可运行Pod数 ...
- K8S node亲和与反亲和:affinity应用
简介: affinity是K8S 1.2版本后引入的新特性,类似于nodeSelector,允许使用者指定一些pod在Node间调度的约束,目前支持两种形式: 1. requireDuringSche ...
最新文章
- 读Zepto源码之操作DOM
- 程序猿悲喜录:魔都,想说爱你不容易
- 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目
- DrawerLayout + Toolbar + ViewPager
- python基础教程:函数作用域
- python 两个乘号是什么_(2)Python 变量和运算符
- java amf3_Java AMF3 反序列化漏洞分析
- python 将数据写入csv文件
- html点线面制作,利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧
- LeetCode刷题——64. 最小路径和
- Global.asax取绝对路径
- (CFD)投影法求解二维不可压缩N-S方程
- java获取微信用户信息(UnionID)
- 13.软件架构设计:大型网站技术架构与业务架构融合之道 --- 业务意识
- 常见的集合的面试题总结
- window10_vs2015安装教程
- Element UI修改message控件显示的时间
- jupyter notebook误删怎么办
- MeVisLab模块化医学图像处理可视化软件
- 国际贸易术语解释通则(DAF 边境交货(……指定地点))