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

参考文档:

  1. https://github.com/kvaps/kubectl-node-shell/

K8S node-shell相关推荐

  1. 开发测试环境 k8s node节点磁盘不足运维

    开发测试环境 k8s node节点磁盘不足运维 开发测试环境 k8s node节点磁盘不足运维 排查服务器pod 问题 解决服务器节点磁盘问题 开发测试环境 k8s node节点磁盘不足运维 在开发测 ...

  2. k8s入坑之报错(9)k8s node节点加入到集群时卡住 “[preflight] Running pre-flight checks”...

    参考文档k8s node节点加入到集群时卡住 "[preflight] Running pre-flight checks"报错: k8s node节点加入到集群时卡住 " ...

  3. 【博客558】k8s node为什么需要关闭selinux与swap

    k8s node为什么需要关闭selinux与swap 1.关闭selinux centos关闭方法: setenforce 0 && sed -i 's/^SELINUX=.*/SE ...

  4. 二进制安装K8S - NODE 节点的安装

    二进制安装K8S - NODE 节点的安装 安装系统 Linux node02 3.10.0-1062.el7.x86_64 #1 SMP Wed Aug 7 18:08:02 UTC 2019 x8 ...

  5. K8S node节点not ready

    部署K8s node 节点not ready root@n226-060-152:/opt/cni/bin# kubectl get node NAME STATUS ROLES AGE VERSIO ...

  6. K8s Node节点ROLES显示修改

    K8s Node节点ROLES为<none> 添加label语法: kubectl label nodes <node-name> <label-key>=< ...

  7. k8s node节点重启后遇到的问题及解决

    有一个node节点因为主机原因进行了重启, 主机启动之后,通过执行以下命令恢复了节点状态. systemctl start docker systemctl start kubelet 在主节点查看所 ...

  8. k8s node节点停机维护,pod如何迁移?

    需求 k8s集群中的node节点要升级内存,以应对服务迁入.pod扩缩容导致的资源短缺,需要对node节点进行停机维护,那么此时node节点上的pod应该如何处理呢? 下面我们来看一下. 默认迁移 当 ...

  9. 如何调整 k8s Node节点的最大可运行Pod数量

    环境介绍: Ubuntu 20.04.3 LTS kubeadm安装的k8s集群1.21.8 Kubernetes Node节点默认允许最多创建110个Pod,如何调整Node节点的最大可运行Pod数 ...

  10. K8S node亲和与反亲和:affinity应用

    简介: affinity是K8S 1.2版本后引入的新特性,类似于nodeSelector,允许使用者指定一些pod在Node间调度的约束,目前支持两种形式: 1. requireDuringSche ...

最新文章

  1. 读Zepto源码之操作DOM
  2. 程序猿悲喜录:魔都,想说爱你不容易
  3. 我发起了一个 用 物理服务器 和 .Net 平台 构建云平台 的 .Net 开源项目
  4. DrawerLayout + Toolbar + ViewPager
  5. python基础教程:函数作用域
  6. python 两个乘号是什么_(2)Python 变量和运算符
  7. java amf3_Java AMF3 反序列化漏洞分析
  8. python 将数据写入csv文件
  9. html点线面制作,利用HTML5绘制点线面组成的3D图形的示例_html5教程技巧
  10. LeetCode刷题——64. 最小路径和
  11. Global.asax取绝对路径
  12. (CFD)投影法求解二维不可压缩N-S方程
  13. java获取微信用户信息(UnionID)
  14. 13.软件架构设计:大型网站技术架构与业务架构融合之道 --- 业务意识
  15. 常见的集合的面试题总结
  16. window10_vs2015安装教程
  17. Element UI修改message控件显示的时间
  18. jupyter notebook误删怎么办
  19. MeVisLab模块化医学图像处理可视化软件
  20. 国际贸易术语解释通则(DAF 边境交货(……指定地点))

热门文章

  1. PGPCA、PHPCA、PLPCA去噪代码解析
  2. 微信分享(微信好友、微信朋友圈、新浪微博、QQ好友、QQ空间)
  3. cobaltstrike的安装与基础使用
  4. 向未来飞驰:武汉推开了AI产业化和产业AI化的三重门
  5. 马自达新CX-5卡尔福安卓智能车载导航一体机评测
  6. CUDA程序基本优化--以规约算法为例
  7. 早8点到12点,seo新手4小时解决网站链接
  8. 记录 “Thinkphp 3.2及以上版本实现支付宝担保交易、即时到账接口类、函数和使用方法”
  9. 大数据:关于分布式,集群,机架和节点的关系
  10. excel导入数据时null值的处理