简单做网站深圳网站建设小程序

diannao/2026/1/19 20:22:58/文章来源:
简单做网站,深圳网站建设小程序,属于您自己的网站建设,云南网站建设哪个好背景容器技术的一个最佳实践是构建尽可能精简的容器镜像。但这一实践却会给排查问题带来麻烦#xff1a;精简后的容器中普遍缺失常用的排障工具#xff0c;部分容器里甚至没有 shell (比如 FROM scratch #xff09;。在这种状况下#xff0c;我们只能通过日志或者到宿主机… 背景容器技术的一个最佳实践是构建尽可能精简的容器镜像。但这一实践却会给排查问题带来麻烦精简后的容器中普遍缺失常用的排障工具部分容器里甚至没有 shell (比如 FROM scratch 。在这种状况下我们只能通过日志或者到宿主机上通过 docker-cli 或 nsenter 来排查问题效率很低。Kubernetes 社区也早就意识到了这个问题在 16 年就有相关的 Issue Support for troubleshooting distroless containers[1] 并形成了对应的 Proposal[2]。遗憾的是由于改动的涉及面很广相关的实现至今还没有合并到 Kubernetes 上游代码中。而在 一个偶然的机会下PingCAP 一面要求实现一个 kubectl 插件实现类似的功能我开发了 kubectl-debug[2]通过启动一个安装了各种排障工具的容器来帮助诊断目标容器。工作原理我们先不着急进入 Quick Start 环节。kubectl-debug 本身非常简单因此只要理解了它的工作原理你就能完全掌握这个工具并且还能用它做 debug 之外的事情。我们知道容器本质上是带有 Cgroup 资源限制和 Namespace 隔离的一组进程。因此我们只要启动一个进程并且让这个进程加入到目标容器的各种 Namespace 中这个进程就能 “进入容器内部”注意引号与容器中的进程”看到”相同的根文件系统、虚拟网卡、进程空间了——这也正是 docker exec 和 kubectl exec 等命令的运行方式。现在的状况是我们不仅要 “进入容器内部”还希望带一套工具集进去帮忙排查问题。那么想要高效管理一套工具集又要可以跨平台最好的办法就是把工具本身都打包在一个容器镜像当中。接下来我们只需要通过这个”工具镜像”启动容器再指定这个容器加入目标容器的的各种 namespace自然就实现了 “携带一套工具集进入容器内部”。事实上使用 docker-cli 就可以实现这个操作export TARGET_ID666666666 # 加入目标容器的 network, pid 以及 ipc namespace docker run -it --networkcontainer:$TARGET_ID --pidcontainer:$TARGET_ID --ipccontainer:$TARGET_ID busybox这就是 kubectl-debug 的出发点用工具容器来诊断业务容器 。背后的设计思路和 sidecar 等模式是一致的每个容器只做一件事情。具体到实现上一条 kubectl debug命令背后是这样的步骤分别是插件查询 ApiServerdemo-pod 是否存在所在节点是什么ApiServer 返回 demo-pod 所在所在节点插件请求在目标节点上创建 Debug Agent PodKubelet 创建 Debug Agent Pod插件发现 Debug Agent 已经 Ready发起 debug 请求长连接Debug Agent 收到 debug 请求创建 Debug 容器并加入目标容器的各个 Namespace 中创建完成后与 Debug 容器的 tty 建立连接接下来客户端就可以开始通过 56 这两个连接开始 debug 操作。操作结束后Debug Agent 清理 Debug 容器插件清理 Debug Agent一次 Debug 完成。效果如下图开始使用Mac 可以直接使用 brew 安装brew install aylei/tap/kubectl-debug所有平台都可以通过下载 binary 安装export PLUGIN_VERSION0.1.1 # linux x86_64 curl -Lo kubectl-debug.tar.gz https://github.com/aylei/kubectl-debug/releases/download/v${PLUGIN_VERSION}/kubectl-debug_${PLUGIN_VERSION}_linux_amd64.tar.gz # macos curl -Lo kubectl-debug.tar.gz https://github.com/aylei/kubectl-debug/releases/download/v${PLUGIN_VERSION}/kubectl-debug_${PLUGIN_VERSION}_darwin_amd64.tar.gz tar -zxvf kubectl-debug.tar.gz kubectl-debug sudo mv kubectl-debug /usr/local/bin/Windows 用户可以在 Release 页面[4]进行下载。下载完之后就可以开始使用 debug 插件kubectl debug target-pod --agentless --port-forwardkubectl 从 1.12 版本之后开始支持从 PATH 中自动发现插件。1.12 版本之前的 kubectl 不支持这种插件机制但也可以通过命令名 kubectl-debug 直接调用。可以参考项目的中文 README[5]来获得更多文档和帮助信息。典型案例基础排障kubectl debug 默认使用 nicolaka/netshoot[6] 作为默认的基础镜像里面内置了相当多的排障工具包括使用 iftop 查看容器网络流量➜ ~ kubectl debug demo-pod root / [2] ? → iftop -i eth0 interface: eth0 IP address is: 10.233.111.78 MAC address is: 86:c3:ae:9d:46:2b # (图片略去)使用 drill 诊断 DNS 解析root / [3] ? → drill -V 5 demo-service ;; -HEADER- opcode: QUERY, rcode: NOERROR, id: 0 ;; flags: rd ; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; demo-service. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 0 msec ;; WHEN: Sat Jun 1 05:05:39 2019 ;; MSG SIZE rcvd: 0 ;; -HEADER- opcode: QUERY, rcode: NXDOMAIN, id: 62711 ;; flags: qr rd ra ; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;; demo-service. IN A ;; ANSWER SECTION: ;; AUTHORITY SECTION: . 30 IN SOA a.root-servers.net. nstld.verisign-grs.com. 2019053101 1800 900 604800 86400 ;; ADDITIONAL SECTION: ;; Query time: 58 msec ;; SERVER: 10.233.0.10 ;; WHEN: Sat Jun 1 05:05:39 2019 ;; MSG SIZE rcvd: 121使用 tcpdump 抓包root / [4] ? → tcpdump -i eth0 -c 1 -Xvv tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes 12:41:49.707470 IP (tos 0x0, ttl 64, id 55201, offset 0, flags [DF], proto TCP (6), length 80) demo-pod.default.svc.cluster.local.35054 10-233-111-117.demo-service.default.svc.cluster.local.8080: Flags [P.], cksum 0xf4d7 (incorrect - 0x9307), seq 1374029960:1374029988, ack 1354056341, win 1424, options [nop,nop,TS val 2871874271 ecr 2871873473], length 28 0x0000: 4500 0050 d7a1 4000 4006 6e71 0ae9 6f4e E..P....nq..oN 0x0010: 0ae9 6f75 88ee 094b 51e6 0888 50b5 4295 ..ou...KQ...P.B. 0x0020: 8018 0590 f4d7 0000 0101 080a ab2d 52df .............-R. 0x0030: ab2d 4fc1 0000 1300 0000 0000 0100 0000 .-O............. 0x0040: 000e 0a0a 08a1 86b2 ebe2 ced1 f85c 1001 .............\.. 1 packet captured 11 packets received by filter 0 packets dropped by kernel访问目标容器的根文件系统容器技术如 Docker利用了 /proc 文件系统提供的 /proc/{pid}/root/ 目录实现了为隔离后的容器进程提供单独的根文件系统root filesystem的能力就是 chroot 一下。当我们想要访问 目标容器的根文件系统时可以直接访问这个目录root / [5] ? → tail -f /proc/1/root/log_ Hello, world!这里有一个常见的问题是 free top 等依赖 /proc 文件系统的命令会展示宿主机的信息这也是容器化过程中开发者需要适应的一点当然了各种 runtime 也要去适应比如臭名昭著的 Java 8u121 以及更早的版本不识别 cgroups 限制[7]问题就属此列。诊断 CrashLoopBackoff排查 CrashLoopBackoff 是一个很麻烦的问题Pod 可能会不断重启 kubectl exec 和 kubectl debug 都没法稳定进行排查问题基本上只能寄希望于 Pod 的日志中打印出了有用的信息。为了让针对 CrashLoopBackoff 的排查更方便 kubectl-debug 参考 oc debug 命令添加了一个 --fork 参数。当指定 --fork 时插件会复制当前的 Pod Spec做一些小修改 再创建一个新 Pod新 Pod 的所有 Labels 会被删掉避免 Service 将流量导到 fork 出的 Pod 上新 Pod 的 ReadinessProbe 和 LivnessProbe 也会被移除避免 kubelet 杀死 Pod新 Pod 中目标容器待排障的容器的启动命令会被改写避免新 Pod 继续 Crash接下来我们就可以在新 Pod 中尝试复现旧 Pod 中导致 Crash 的问题。为了保证操作的一致性可以先 chroot 到目标容器的根文件系统中➜ ~ kubectl debug demo-pod --fork root / [4] ? → chroot /proc/1/root root / [#] ? → ls bin entrypoint.sh home lib64 mnt root sbin sys tmp var dev etc lib media proc run srv usr root / [#] ? → ./entrypoint.sh # 观察执行启动脚本时的信息并根据信息进一步排障结尾的碎碎念kubectl-debug 一开始只是 PingCAP 在面试时出的 homework第一版完成在去年年底。当时整个项目还非常粗糙不仅文档缺失很多功能也都有问题不支持诊断 CrashLoopBackoff 中的 Pod强制要求预先安装一个 Debug Agent 的 DaemonSet不支持公有云节点没有公网 IP 或公网 IP 因为防火墙原因无法访问时就无法 debug没有权限限制安全风险很大而让我非常兴奋的是在我无暇打理项目的情况下隔一两周就会收到 Pull Request 的通知邮件一直到今天大部分影响基础使用体验的问题都已经被解决 kubectl-debug 也发布了 4 个版本0.0.1, 0.0.2, 0.1.0, 0.1.1。尤其要感谢 tkanngTA 在第一个 PR 时还表示之前没有写过 Go 而在 0.1.1 版本中已经是这个版本绝大部分 feature 的贡献者解决了好几个持续很久的 issue感谢最后再上一下项目地址https://github.com/aylei/kubectl-debug假如在使用上或者对项目本身有任何问题欢迎提交 issue也可以在 文章评论区留言讨论。相关链接https://github.com/kubernetes/kubernetes/issues/27140https://github.com/kubernetes/community/blob/master/contributors/design-proposals/node/troubleshoot-running-pods.mdhttps://github.com/aylei/kubectl-debughttps://github.com/aylei/kubectl-debug/releases/tag/v0.1.1https://github.com/aylei/kubectl-debug/blob/master/docs/zh-cn.mdhttps://github.com/nicolaka/netshoothttps://blog.softwaremill.com/docker-support-in-new-java-8-finally-fd595df0ca54原文链接https://aleiwu.com/post/kubectl-debug-intro/.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5做宠物饲养网站包括哪些内容

jdk10 换成jdk8JDK 10通过发行JDK-8173425 引入了Javadoc标签{summary} (“ Javadoc需要一个新标签来指定摘要。”)。 这个新标签允许开发人员显式指定Javadoc注释的哪一部分出现在“摘要”中,而不是依靠Javadoc的默认处理来寻找一段时间和空…

广州哪个网站建设公司好pc网站优势

软件可靠性基础 软件可靠性基本概念串并联系统可靠性计算软件可靠性测试软件可靠性建模软件可靠性管理软件可靠性设计容错,检错的技术 选择题考基本概念(MTBF),很少考 非重点 软件可靠性基本概念 这个章节中,第一个…

帮助做APP的网站公司网站服务器停止响应是什么意思

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有…

成都网站定制中心天津电力建设公司怎么样

数据手册Datasheet解读笔记1-肖特基二极管 数据手册大体结构共包含10个部分肖特基二极管-SS14第一重点关注点:极限值第二重点关注点:电气特性 数据手册大体结构共包含10个部分 1.Features一特性 2.Application一应用 3.Description一说明4.Pin Configur…

python网站建设叮咚影视在线观看免费完整版

本文面向已经了解/熟悉git基本命令但是并不熟悉如何使用GitHub进行多人协作开发项目的同学。 为了简单起见,这里假设只有两个开发人员,HuanianLi 和 DaxiangLi。他们在GitHub上的地址和角色为: HuanianLi: https://github.com/huanianli # M…

网站建设捌金手指花总八建设旅游景点的网站的好处

题目描述 原题来自:HAOI 2008 有 n个小朋友坐成一圈,每人有 ai 颗糖果。每人只能给左右两人传递糖果。每人每次传递一颗糖果的代价为 1 。求使所有人获得均等糖果的最小代价。 输入格式 第一行有一个整数 ,n表示小朋友个数; …

重庆网站查询海南直聘网

Alt← 前一个编辑的页面 Alt→ 下一个编辑的页面 AltEnter 显示当前选择文件的属性 CtrlF11运行Run As CtrlM 当前窗口最大化 CtrlF7 视窗口切换 CtrlF8 模式切换 CtrlQ 定位到最后编辑的地方 CtrlL 定位在具体某行 CtrlK 选中的Word快速定位到下一个 ctrl.及ctrl1 当某行出错时…

徐州网站建设 网站推广怎样备份网站

这篇文章不是介绍DOCKER是什么,也不是阐述DOCKER的核心:镜像/容器和仓库之间的关系,它只是一篇让刚刚接触DOCKER的初学者,在没有完全了解DOCKER是什么之前,也能尽快的在Linux系统下面通过DOCKER来搭建一个LAMP环境,这是其一&#…

网站设计作品网站怎么做外链

目录 前言 list的反向迭代器 list.h文件 ReverseIterator.h文件 test.cpp文件 前言 迭代器按性质分类: 单向:forward_list双向:list随机:vector / deque 迭代器按功能分类: 正向反向const list的反向迭代器…

可以查企业备案的网站国外 wordpress 免费空间

ts 枚举类型介绍 TypeScript的枚举类型是一种特殊的数据类型,它允许开发者为一组相关值定义一个共同的名称,使我们可以更清晰、更一致地使用这些值。 枚举类型在TypeScript中用enum关键字定义,每个枚举值默认都是数字类型,从0开…

精准营销软件惠阳网站优化

解法一:树形DP 个人觉得这个方法是比较可能想到的,但是输出方案很恶心 先转换题意:“无论怎样规定叶子的初始点权,都可以通过操作你选择的点来让所有叶子的点权清空”意味着每个叶子节点都可以通过一系列操作单独1、-1 模拟一下…

值得相信的西安网站开发学软件工程好找工作吗

案例演示 图1 1.结构分析 文字部分用<p>标签定义&#xff0c;对于特殊显示的文本&#xff08;如导语、详情&#xff09;等可以用<em>、<strong>等格式化标签来定义&#xff0c;效果图如图2。 图2 2.样式分析 &#xff08;1&#xff09;控制段落文本的字体…

网站开发使用的软件wordpress如何不显示评论

mySql安装完成后&#xff0c;配置链接nodejs项目中的数据库。 1、测试是否安装成功。 2、use nodejs使用nodejs 3、设置数据源 5、exit 转载于:https://www.cnblogs.com/zhxzh/p/9244996.html

建站用什么平台好qq浏览器在线打开网页

现象 忘记充电&#xff0c;电量耗尽关机&#xff0c;开机后时间不对&#xff0c;开启自动对时&#xff0c;时间会变成上个月的一天&#xff0c;系统更新后问题依旧&#xff0c;每次出现问题都需要手动调整。 解决方法验证 删除 /var/db/timed/com.apple.timed.plist删除 /et…

户外网站做招聘网站怎么做市场

1. 概述 本文记录在 Ubuntu 16.04 上将 python 升级为 3.8 版本&#xff0c;并配置为系统默认 python3 的过程。 在 Ubuntu 16.04 中&#xff0c;python3 的默认版本为 3.5&#xff1a; $ python3 -V Python 3.5.2 本文以在 Ubuntu 16.04 中安装为例&#xff0c;方法同样适用于…

女生做网站编辑怎么样宁波建设协会网站首页

如今&#xff0c;跨境电商无疑已经成为了一个热门的创业领域&#xff0c;但对于一些新手来说&#xff0c;面临的一个主要挑战是如何处理产品的货源问题。下面我就和大家分享一下无货源跨境电商的基本概念以及一些新手可以采取的策略和步骤&#xff0c;帮助大家在这个领域取得成…

2016 网站建设需求网站怎么做短信营销

概述 随着科学技术的发展&#xff0c;越来越多的智能可穿戴设备出现在我们的眼前&#xff0c;智能手环&#xff0c;智能眼镜、智能防丢器等&#xff0c;防丢器就可以很方便的给出提醒。 目前防丢器的种类有 蓝牙防丢器GPS防丢器RFID防丢器WIFI防丢器等 本文主要讲解蓝牙防丢…

四川省城乡住房与建设厅网站首页全国做临期进口食品的网站

接上篇再学个比较有用的 Symbol.isConcatSpreadable 这个符号作为一个属性表示“一个布尔值&#xff0c;如果是 true&#xff0c;则意味着对象应 该用 Array.prototype.concat()打平其数组元素”。ES6 中的 Array.prototype.concat()方法会 根 据 接 收 到 的 对 象 类 型 选 择…

大型网站建设推荐网站平台建设成本

在数据结构的世界里&#xff0c;我们会认识各种各样的数据结构&#xff0c;每一种数据结构都能解决相应领域的问题&#xff0c;当然每个数据结构&#xff0c;有他的优点&#xff0c;必然就有它的缺点&#xff0c;那么如何创造一种数据结构来将某两种数据结构进行扬长避短&#…

有哪些大站用wordpress信用体系建设网站维运工作制度

信息打点-公众号服务&Github监控&供应链&网盘泄漏&证书图标邮箱资产 #知识点&#xff1a; 1、业务资产-应用类型分类 2、Web单域名获取-接口查询 3、Web子域名获取-解析枚举 4、Web架构资产-平台指纹识别 ------------------------------------ 1、开源-CMS指纹…