aws eks 集群container runtime升级容器管理工具的切换

news2024/9/28 17:33:49

参考资料

  • https://cloud-atlas.readthedocs.io/zh_CN/latest/kubernetes/debug/crictl.html
  • https://zhuanlan.zhihu.com/p/562014518

container runtime

Low-Level和High-Level容器运行时。runc、lxc、lmctfy、Docker(容器)、rkt、cri-o。每一个都是为不同的情况而构建的,并实现了不同的功能。有些,如 containerd 和 cri-o,实际上使用 runc 来运行容器,在High-Level实现镜像管理和 API。与 runc 的Low-Level实现相比,可以将这些功能(包括镜像传输、镜像管理、镜像解包和 API)视为High-Level功能。

img

  • 只专注于正在运行的容器的runtime通常称为“Low-Level容器运行时”
  • 支持更多高级功能(如镜像管理和gRPC / Web API)的运行时通常称为“High-Level容器运行时”

在创建一个docker容器的时候,Docker Daemon 并不能直接帮我们创建了,而是请求 containerd 来创建一个容器。当containerd 收到请求后,也不会直接去操作容器,而是创建一个叫做 containerd-shim 的进程。让这个进程去操作容器,我们指定容器进程是需要一个父进程来做状态收集、维持 stdin 等 fd 打开等工作的,假如这个父进程就是 containerd,那如果 containerd 挂掉的话,整个宿主机上所有的容器都得退出了,而引入 containerd-shim 这个垫片就可以来规避这个问题了,就是提供的live-restore的功能。这里需要注意systemd的 MountFlags=slave。然后创建容器需要做一些 namespaces 和 cgroups 的配置,以及挂载 root 文件系统等操作。runc 就可以按照这个 OCI 文档来创建一个符合规范的容器。

container相比调用链更短,组件少且稳定

docker 运行时的调用关系为: kubelet --> dockershim (在 kubelet 进程中) --> dockerd --> containerd

containerd 运行时的调用关系为: kubelet --> cri plugin(在 containerd 进程中) --> containerd

img

查看node上的进程

root     32041  0.0  0.2 712204  9712 ?        Sl   10:50   0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id c2d4f6f9df81a41d0b361700e76eb4e46ada1c7a12629b7b3895e8ab0215223d -address /run/containerd/containerd.sock
root     32042  0.0  0.2 712460 10040 ?        Sl   10:50   0:00 /usr/bin/containerd-shim-runc-v2 -namespace k8s.io -id 352402b119bc5ad4dd3c87e0617dec3a41f72747b39720a1a0aadef1c44e3c41 -address /run/containerd/containerd.sock

查看kubelet

ExecStart=/usr/bin/kubelet --cloud-provider aws \
    --image-credential-provider-config /etc/eks/ecr-credential-provider/ecr-credential-provider-config \
   --image-credential-provider-bin-dir /etc/eks/ecr-credential-provider \
    --config /etc/kubernetes/kubelet/kubelet-config.json \
    --kubeconfig /var/lib/kubelet/kubeconfig \
    --container-runtime remote \
    --container-runtime-endpoint unix:///run/containerd/containerd.sock \
    $KUBELET_ARGS $KUBELET_EXTRA_ARGS

查看containerd的配置文件

$ cat /etc/containerd/config.toml
version = 2
root = "/var/lib/containerd"
state = "/run/containerd"

[grpc]
address = "/run/containerd/containerd.sock"

[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "runc"

[plugins."io.containerd.grpc.v1.cri"]
sandbox_image = "918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn/eks/pause:3.5"

[plugins."io.containerd.grpc.v1.cri".registry]
config_path = "/etc/containerd/certs.d:/etc/docker/certs.d"

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
runtime_type = "io.containerd.runc.v2"

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true

[plugins."io.containerd.grpc.v1.cri".cni]
bin_dir = "/opt/cni/bin"
conf_dir = "/etc/cni/net.d"

crt

ctrcontainerd的一个客户端工具。ctr客户端 主要区分了 3 个命名空间分别是k8s.iomobydefault

查看容器和任务

$ sudo ctr -n=k8s.io container ls

在这里插入图片描述

查看容器info

sudo ctr -n=k8s.io container info f77f39a204f120e179140394b230fce0605251a21b50cbc327bee21c621aed82

查看image

sudo ctr -n=k8s.io images ls
sudo ctr -n=k8s.io images list -q

在这里插入图片描述

管理镜像

sudo ctr -n=k8s.io image image pull busybox
sudo ctr -n=k8s.io images rm docker.io/library/busybox:latest
sudo ctr -n=k8s.io images pull docker.io/library/busybox:latest

在这里插入图片描述

crictl

crictl是遵循 CRI 接口规范的一个命令行工具,通常用它来检查和管理kubelet节点上的容器运行时和镜像。

crictl 只有一个k8s.io命名空间,没有-n 参数。

参考资料

  • 使用 crictl 对 Kubernetes 节点进行调试
  • Container Runtime Interface (CRI) CLI
  • https://cloud-atlas.readthedocs.io/zh_CN/latest/kubernetes/debug/crictl.html

安装crictl

VERSION="v1.24.1"
curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
rm -f crictl-$VERSION-linux-amd64.tar.gz

配置/etc/crictl.yaml如下,或者在执行时通过-r指定endpoint:

runtime-endpoint:unix:///run/containerd/containerd.sock image-endpoint:unix:///run/containerd/containerd.sock timeout:10 debug:false

常用命令

$ crictl -v
$ crictl  pull nginx:alpine
$ crictl  rmi  nginx:alpine
$ crictl  images

设置代理

$ cat /etc/systemd/system/containerd.service.d/10-compat-symlink.conf
[Service]
ExecStartPre=/bin/ln -sf /run/containerd/containerd.sock /run/dockershim.sock

Set HTTP_PROXY and HTTPS_PROXY for containerd in /etc/systemd/system/containerd.service.d/http-proxy.conf:

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:65001"
Environment="HTTPS_PROXY=http://127.0.0.1:65001"

查看容器

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock ps

在这里插入图片描述

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock images

在这里插入图片描述

查看容器日志

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock logs d2910afb661ea
2022/12/30 10:50:57 Server is listening on :5678
2022/12/30 10:58:39 [ERR] Unknown signal terminated

查看容器info

sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock inspect d2910afb661ea

查看stats

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock stats
CONTAINER           CPU %               MEM                 DISK                INODES
0a1ba2b85a2f4       0.00                1.528MB             0B                  13
2470b65dc9824       0.12                12.8MB              0B                  15
81dc5e769badb       0.00                1.884MB             0B                  13
89112d90b0d9b       0.09                12.82MB             0B                  15
a71f81a4af8b0       0.00                1.54MB              0B                  13
b3c937668a77c       0.01                47.42MB             0B                  26
d2910afb661ea       0.00                1.565MB             0B                  13
daf6338c1d55e       0.00                14.89MB             0B                  14
f77f39a204f12       0.00                1.528MB             0B                  13

stop和start容器

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock stop dead6a33fc0fd

查看pod

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock pods

在这里插入图片描述

在容器中执行exec

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock exec -it 5f0e264ddd5c1 bash

拉取镜像

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock pull busybox
Image is up to date for sha256:827365c7baf137228e94bcfc6c47938b4ffde26c68c32bf3d3a7762cd04056a5

查看容器运行时信息

$ sudo /usr/local/bin/crictl -r unix:///run/containerd/containerd.sock info
{
  "config": {
    "containerd": {
      "snapshotter": "overlayfs",
      "defaultRuntimeName": "runc",
      "defaultRuntime": {
        "runtimeType": "",
        "runtimePath": "",
        "runtimeEngine": "",
        "PodAnnotations": null,
        "ContainerAnnotations": null,
        "runtimeRoot": "",
        "options": null,
        "privileged_without_host_devices": false,
        "baseRuntimeSpec": "",
        "cniConfDir": "",
        "cniMaxConfNum": 0
      },
      "untrustedWorkloadRuntime": {
        "runtimeType": "",
        "runtimePath": "",
        "runtimeEngine": "",
        "PodAnnotations": null,
        "ContainerAnnotations": null,
        "runtimeRoot": "",
        "options": null,
        "privileged_without_host_devices": false,
        "baseRuntimeSpec": "",
        "cniConfDir": "",
        "cniMaxConfNum": 0
      },
      "runtimes": {
        "runc": {
          "runtimeType": "io.containerd.runc.v2",
          "runtimePath": "",
          "runtimeEngine": "",
          "PodAnnotations": null,
          "ContainerAnnotations": null,
          "runtimeRoot": "",
          "options": {
            "SystemdCgroup": true
          },
          "privileged_without_host_devices": false,
          "baseRuntimeSpec": "",
          "cniConfDir": "",
          "cniMaxConfNum": 0
        }
      },
      "noPivot": false,
      "disableSnapshotAnnotations": true,
      "discardUnpackedLayers": false,
      "ignoreRdtNotEnabledErrors": false
    },
    "cni": {
      "binDir": "/opt/cni/bin",
      "confDir": "/etc/cni/net.d",
      "maxConfNum": 1,
      "confTemplate": "",
      "ipPref": ""
    },
    "registry": {
      "configPath": "/etc/containerd/certs.d:/etc/docker/certs.d",
      "mirrors": null,
      "configs": null,
      "auths": null,
      "headers": null
    },
    "imageDecryption": {
      "keyModel": "node"
    },
    "disableTCPService": true,
    "streamServerAddress": "127.0.0.1",
    "streamServerPort": "0",
    "streamIdleTimeout": "4h0m0s",
    "enableSelinux": false,
    "selinuxCategoryRange": 1024,
    "sandboxImage": "918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn/eks/pause:3.5",
    "statsCollectPeriod": 10,
    "systemdCgroup": false,
    "enableTLSStreaming": false,
    "x509KeyPairStreaming": {
      "tlsCertFile": "",
      "tlsKeyFile": ""
    },
    "maxContainerLogSize": 16384,
    "disableCgroup": false,
    "disableApparmor": false,
    "restrictOOMScoreAdj": false,
    "maxConcurrentDownloads": 3,
    "disableProcMount": false,
    "unsetSeccompProfile": "",
    "tolerateMissingHugetlbController": true,
    "disableHugetlbController": true,
    "device_ownership_from_security_context": false,
    "ignoreImageDefinedVolumes": false,
    "netnsMountsUnderStateDir": false,
    "enableUnprivilegedPorts": false,
    "enableUnprivilegedICMP": false,
    "containerdRootDir": "/var/lib/containerd",
    "containerdEndpoint": "/run/containerd/containerd.sock",
    "rootDir": "/var/lib/containerd/io.containerd.grpc.v1.cri",
    "stateDir": "/run/containerd/io.containerd.grpc.v1.cri"
  },
  "golang": "go1.18.6",
  "lastCNILoadStatus": "OK",
  "lastCNILoadStatus.default": "OK"
}

nerdctl

参考资料

  • https://link.zhihu.com/?target=https%3A//github.com/containerd/nerdctl/releases
  • https://github.com/containerd/nerdctl
  • https://zhuanlan.zhihu.com/p/562014518

nttlabs贡献了一个名为nerdctl的containerd客户端,可以兼容docker命令行工具

通过docker运行nerdctl

docker build -t nerdctl .
docker run -it --rm --privileged nerdctl

nerdctl兼容了docker命令,可以无痛切换

https://github.com/containerd/nerdctl

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

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

相关文章

springboot simple (12) springboot RabbitMQ

这里首先简单的介绍了RabbitMQ ,然后实现了springboot集成RabbitMQ ,包含两个工程: 1 Producer 生产者 2 Consumer 消费者 1 RabbitMQ 简介 AMQP :Advanced Message Queue,高级消息队列协议。 RabbitMQ 是一个由 Erl…

智能大屏兴起,酷开科技赋能营销战略!

随着科技的发展,智能大屏的功能与技术都在日新月异的快速更迭,年轻消费群体也对大尺寸智能大屏表现出了特别的偏爱,以前说到看视频、网上购物、阅读书籍时,人们第一时间就会想到手机,但随着智能大屏的出现,…

商用设计素材库,设计师必备。

免费、商用设计素材网站。 1、菜鸟图库 https://www.sucai999.com/?vNTYxMjky站内平面海报、UI设计、电商淘宝、免抠、高清图片、样机模板等素材非常齐全。还有在线抠图、CDR版本转换功能,能有效的为设计师节省找素材时间,提高工作效率。网站素材都能免…

LeetCode链表经典题目(二)

1. LeetCode203. 移除链表元素 2. LeetCode707.设计链表 3. LeetCode206. 反转链表 4. LeetCode24. 两两交换链表中的节点​ 5. LeetCode19. 删除链表的倒数第 N 个结点 6. LeetCode面试题 02.07. 链表相交 7. LeetCode142. 环形链表 II​ 1. LeetCode203. 移除链表元素 …

基于同豪的道路桥梁设计方案如何实现数字化交付(web发布)

0序: 当下有部分设计人员除了使用Revit、Microstation之外也使用过程的同豪软件进行道路桥梁的BIM建模。如何对同豪的BIM模型进行数字化交付呢? 1数据导出为FBX 具体导出过程可以参考: 数据的导出只要按步骤导出就行,非常简单…

2023最让人期待的日历!每个IT技术人必备

一转眼,2022年已经要接近尾声了..... 这一年的你过的怎么样呢?相比上一年的自己有什么变化呢? 凡是过往皆为序章,所有将来皆为可盼!在2023年即将到来之际给大家推荐一本非常适合IT技术人的日历👉「小滴日历…

python—you-get下载工具、wget下载工具

目录 wget you-get wget wget工具下载:GNU Wget 1.21.3 for Windows wget工具见:python-外部程序的调用os库、subprocess 模块_觅远的博客-CSDN博客_python外部库调用调出 you-get you-get是一款实用的网站视频下载工具。可以很轻松的下载到网络上…

极限学习机ELM回归预测(MATLAB代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

【数据结构与算法】第十七篇:图论万字解析(进阶篇)

👀作者简介:大家好,我是 快到碗里来~ 🚩🚩 个人主页:快到碗里来~ 支持我:点赞关注~不迷路🧡🧡🧡 ✔系列专栏:数据结构与算法⚡⚡⚡ (❁◡❁)励志格…

代码随想录算法训练营第十一天(栈与队列)| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

代码随想录算法训练营第十一天(栈与队列)| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值 20. 有效的括号 讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。 大家先…

激发原创力量,逐梦数智未来 | 麒麟信安闪耀openEuler Summit 2022

[中国,北京,2022年12月29日]由欧拉开源社区发起并联合华为、麒麟信安、麒麟软件、统信软件等伙伴,共同举办的openEuler Summit 2022于线上举行。 会上,开放原子开源基金会宣布openEuler项目群成立;同时,新…

CVPR 2021|Deep-SfM-Revisited:DeepLearn+经典SfM流程

🏆前言:文章回顾了深度学习在SfM中的应用,并提出了一种新的深度两视图SfM框架。该框架结合了深度学习和经典SfM几何算法的优点。在各个数据集上取得较好的结果。 文章目录解决的问题基本流程实施细节光流估计相机位姿估计尺度不变的深度估计损…

关于安科瑞电力监控系统在电力工程中的应用与对策

摘要:随着经济的发展,能源消耗速度正不断加快,因此我国提出了绿色可持续发展战略,要求在发展建设中以节能为主,不断减少资源能耗,而电能便是首要控制内容。如今我国为电能使用,对计量表进行了优…

《PyTorch深度学习实践》完结合集-P4反向传播作业

二次函数的反向传播 代码: import torch x_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0] w1 torch.Tensor([1.0]) w1.requires_grad True #定义要进行反向传播 w2 torch.Tensor([1.0]) w2.requires_grad True b torch.Tensor([1.0]) b.requires_grad T…

PHP结课报告-简单的点菜系统(完整版,附源码与数据库)

1 系统背景及意义 1.1系统开发背景介绍 餐饮业在我国有着悠久的发展历史,是与人民生活密切相关的 行业之一,同时也是我国经济增长的新亮点,在 2010 年全国餐饮零 售总额高达 15913 亿元,实际增长约 14.3。在信息系统相对普及的 今…

项目经理通过甘特图编制项目计划的方法

项目有个特征叫 渐进明晰 ,指一个项目不可能一开始就能想到最后交付成果的全部细节,项目最终的交付成果到底长啥样是随着项目的推进慢慢变得清晰的,而这个变化的过程不仅需要项目经理的经验与能力,还需要借助项目管理工具的帮助。…

一文讲清「敏捷路线图」,从此不再掉入瀑布陷阱

尽管许多组织和团队声称自己非常敏捷,但他们仍在使用瀑布的方式规划产品。为什么会这样?我们该如何改变这种「错误敏捷」? 原则上,践行敏捷开发很简单:构建一个增量;测试这个增量;了解需要改变…

webdriver的尝试:四 【移动端的使用appium-定位与获取代码】

文章目录界面的简单认识和使用参考我们前面使用webdriver可以实现:使用代码,自动化打开浏览器及指定页面,定位元素,获取内容或者模仿操作那么使用移动端,依然需要实现定位与操作 主要就是在appium inspector上进行操作…

开源全球公司贡献 49 名,涛思数据荣登 2022 中国开发者影响力年度榜单

12 月 28 日,CSDN 在北京举行 “2022 中国开发者影响力盛典暨 CSDN 企业生态汇”活动,同时正式发布 2022 中国开发者影响力年度榜单。本次公布的榜单主要包括年度开源贡献企业、年度开源影响力项目、年度开发者社区、年度数字化创新企业、年度优秀雇主企…

蓝桥杯Python练习题13-圆的面积

资源限制   内存限制:256.0MB C/C时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s 问题描述   给定圆的半径r,求圆的面积。 输入格式   输入包含一个整数r,表示圆的半径。 输出格式   输出…