场景记录:需要使用kata安全容器,与runc共存,同时替换docker为containerd,使用crictl工具作为镜像管理的客户端工具,记录实操及问题解决的过程
基础环境:(kvm虚拟机)centos-7.9 + k8s-v1.23.0

安装kata

参见 这里 https://blog.csdn.net/sinat_38453878/article/details/123207170?spm=1001.2014.3001.5502

配置containerd

containerd包含在docker里面,无需单独安装

生成默认的配置文件:

containerd config default > /etc/containerd/config.toml

contianerd配置镜像源地址

安装crictl工具

curl -SLO https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.12.0/crictl-v1.12.0-linux-amd64.tar.gztar -xvf crictl-v1.12.0-linux-amd64.tar.gz -C /usr/local/bin/vi /etc/crictl.yaml

crictl 文件内容

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

此处可能报错
[root@localhost install-k8s]# crictl images
FATA[0000] listing images failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.ImageService
解决:
执行 containerd config default > /etc/containerd/config.toml
如果依然报错

检查 xfs文件系统,执行xfs_info / ,如果ftype=0,如上图所示,文件系统不合适,那么很不幸,要麻烦了,实际就是从头开始(必须将文件系统修正,不然后续集成containerd,kata等都没法继续)
参见这里
https://www.pimwiddershoven.nl/entry/docker-on-centos-7-machine-with-xfs-filesystem-can-cause-trouble-when-d-type-is-not-supported
如果当前使用环境是kvm虚拟机,再参见这里
https://blog.csdn.net/sinat_38453878/article/details/123198394?spm=1001.2014.3001.5502

准备好containerd的相关镜像

更改k8s配置之前 预先准备好ctr i list的containerd的镜像
脚本

#!/bin/bash
# pull imagesver=v1.23.0
registry=registry.cn-hangzhou.aliyuncs.com/google_containers
images=`kubeadm config images list --kubernetes-version=$ver |awk -F '/' '{print $2}'`for image in $images
do
if [ $image != coredns ];thenctr -n k8s.io image pull ${registry}/$imageif [ $? -eq 0 ];thenctr -n k8s.io image tag ${registry}/$image k8s.gcr.io/$imagectr -n k8s.io image rm ${registry}/$imageelseecho "ERROR: 下载镜像报错,$image"fi
elsectr -n k8s.io image pull ${registry}/coredns:1.8.6ctr -n k8s.io image tag ${registry}/coredns:1.8.6  k8s.gcr.io/coredns/coredns:v1.8.6ctr -n k8s.io image rm ${registry}/coredns:1.8.6
fi
done

备注:ctr和crictl工具使用过程中会出现二者列出的信息不一致的情况,参见 这里

修改kubelet配置文件,使用containerd作为运行时

位置:可以通过kubectl status kubelet -l查看
本次操作:vi /usr/lib/systemd/system/kubelet.service.d/10-kubeadm.conf
相关的文件:vi /etc/sysconfig/kubelet,vi /var/lib/kubelet/kubeadm-flags.env
/etc/kubernetes/bootstrap-kubelet.conf
/etc/kubernetes/kubelet.conf

设置相关的启动参数

设置启动引擎
–cgroup-driver=systemd

设置containerd为运行时
–container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock

重启kubelet

[root@localhost install-k8s]# systemctl daemon-reload
[root@localhost install-k8s]# systemctl restart kubelet
[root@localhost install-k8s]# systemctl status kubelet-l

查看日志

journalctl -xefu kubelet

master节点查看运行时修改是否成功 kubectl get nodes -o wide,看到运行时为containerd即修改成功

问题记录:更换运行时后pod起不来,可能是containerd拉取不到镜像,systemctl status kubelet -l可看到相关日志

更多更换containerd后的出现的问题请看 这里
https://blog.csdn.net/sinat_38453878/article/details/123255489?spm=1001.2014.3001.5502

配置containerd动态使用kata(默认runc)

完整的配置好kata的containerd配置文件:

version = 2
root = "/var/lib/containerd"
state = "/run/containerd"
plugin_dir = ""
disabled_plugins = []
required_plugins = []
oom_score = 0[grpc]address = "/run/containerd/containerd.sock"tcp_address = ""tcp_tls_cert = ""tcp_tls_key = ""uid = 0gid = 0max_recv_message_size = 16777216max_send_message_size = 16777216[ttrpc]address = ""uid = 0gid = 0[debug]address = ""uid = 0gid = 0level = ""[metrics]address = ""grpc_histogram = false[cgroup]path = ""[timeouts]"io.containerd.timeout.shim.cleanup" = "5s""io.containerd.timeout.shim.load" = "5s""io.containerd.timeout.shim.shutdown" = "3s""io.containerd.timeout.task.state" = "2s"[plugins][plugins."io.containerd.gc.v1.scheduler"]pause_threshold = 0.02deletion_threshold = 0mutation_threshold = 100schedule_delay = "0s"startup_delay = "100ms"[plugins."io.containerd.grpc.v1.cri"]disable_tcp_service = truestream_server_address = "127.0.0.1"stream_server_port = "0"stream_idle_timeout = "4h0m0s"enable_selinux = falseselinux_category_range = 1024sandbox_image = "k8s.gcr.io/pause:3.2"stats_collect_period = 10systemd_cgroup = falseenable_tls_streaming = falsemax_container_log_line_size = 16384disable_cgroup = falsedisable_apparmor = falserestrict_oom_score_adj = falsemax_concurrent_downloads = 3disable_proc_mount = falseunset_seccomp_profile = ""tolerate_missing_hugetlb_controller = truedisable_hugetlb_controller = trueignore_image_defined_volumes = false[plugins."io.containerd.grpc.v1.cri".containerd]snapshotter = "overlayfs"default_runtime_name = "runc"no_pivot = falsedisable_snapshot_annotations = truediscard_unpacked_layers = false[plugins."io.containerd.grpc.v1.cri".containerd.default_runtime]runtime_type = ""runtime_engine = ""runtime_root = ""privileged_without_host_devices = falsebase_runtime_spec = ""[plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime]runtime_type = "io.containerd.runtime.v1.linux"runtime_engine = "/usr/bin/kata-runtime"runtime_root = ""privileged_without_host_devices = falsebase_runtime_spec = ""[plugins."io.containerd.grpc.v1.cri".containerd.runtimes][plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]runtime_type = "io.containerd.runc.v2"runtime_engine = ""runtime_root = ""privileged_without_host_devices = falsebase_runtime_spec = ""[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options][plugins."io.containerd.grpc.v1.cri".containerd.runtimes.kata]runtime_type = "io.containerd.kata.v2"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.katacli]runtime_type = "io.containerd.runc.v1"[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.katacli.options]NoPivotRoot = falseNoNewKeyring = falseShimCgroup = ""IoUid = 0IoGid = 0BinaryName = "/usr/bin/kata-runtime"Root = ""CriuPath = ""SystemdCgroup = false[plugins."io.containerd.grpc.v1.cri".cni]bin_dir = "/opt/cni/bin"conf_dir = "/etc/cni/net.d"max_conf_num = 1conf_template = ""[plugins."io.containerd.grpc.v1.cri".registry][plugins."io.containerd.grpc.v1.cri".registry.mirrors][plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]endpoint = ["https://registry-1.docker.io"][plugins."io.containerd.grpc.v1.cri".image_decryption]key_model = ""[plugins."io.containerd.grpc.v1.cri".x509_key_pair_streaming]tls_cert_file = ""tls_key_file = ""[plugins."io.containerd.internal.v1.opt"]path = "/opt/containerd"[plugins."io.containerd.internal.v1.restart"]interval = "10s"[plugins."io.containerd.metadata.v1.bolt"]content_sharing_policy = "shared"[plugins."io.containerd.monitor.v1.cgroups"]no_prometheus = false[plugins."io.containerd.runtime.v1.linux"]shim = "containerd-shim"runtime = "runc"runtime_root = ""no_shim = falseshim_debug = false[plugins."io.containerd.runtime.v2.task"]platforms = ["linux/amd64"][plugins."io.containerd.service.v1.diff-service"]default = ["walking"][plugins."io.containerd.snapshotter.v1.devmapper"]root_path = ""pool_name = ""base_image_size = ""async_remove = false

修改好/etc/containerd/config.toml之后重启containerd

[root@localhost containerd]# systemctl daemon-reload
[root@localhost containerd]# systemctl restart containerd
[root@localhost containerd]# systemctl status containerd

使用

一切都配置妥当之后就可以开始使用了

RuntimeClass方式

  1. 创建RuntimeClass
[root@localhost critool]# vi kata-runtime.yaml
[root@localhost critool]# kubectl apply -f kata-runtime.yaml
Warning: node.k8s.io/v1beta1 RuntimeClass is deprecated in v1.22+, unavailable in v1.25+
runtimeclass.node.k8s.io/kata-containers created
[root@localhost critool]# kubectl get runtimeclass
NAME              HANDLER   AGE
kata-containers   kata      27s

kata-runtime.yaml内容

kind: RuntimeClass
apiVersion: node.k8s.io/v1beta1
metadata:name: kata-containers
handler: kata
  1. 创建基于kata的pod
[root@localhost critool]# vi kata-pod.yaml
[root@localhost critool]# kubectl apply -f kata-pod.yaml
pod/kata-nginx created
[root@localhost critool]# kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
kata-nginx   1/1     Running   0          3s

kata-pod文件内容

apiVersion: v1
kind: Pod
metadata:name: kata-nginx
spec:runtimeClassName: kata-containerscontainers:- name: nginximage: nginxports:- containerPort: 80
  1. 验证
[root@localhost critool]# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP              NODE         NOMINATED NODE   READINESS GATES
kata-nginx   1/1     Running   0          12s   10.244.85.194   k8s-node01   <none>           <none>

节点上查看kata运行列表

[root@localhost containerd]# kata-runtime list
ID                                                                 PID         STATUS      BUNDLE                                                                                                                  CREATED                          OWNER
2a26331f251a9aa2d5872b04d7bc39fba2fef77746e94b1603ff4c38d4c1fa4d   -1          running     /run/containerd/io.containerd.runtime.v2.task/k8s.io/2a26331f251a9aa2d5872b04d7bc39fba2fef77746e94b1603ff4c38d4c1fa4d   2022-03-03T09:47:58.334721786Z   #0
d67741f50c19ee4790db2e819dd4ad32bf9c97214307cb746189c13a66137402   -1          running     /run/containerd/io.containerd.runtime.v2.task/k8s.io/d67741f50c19ee4790db2e819dd4ad32bf9c97214307cb746189c13a66137402   2022-03-03T09:47:57.929736794Z   #0

untrusted_workload_runtime 的方式

kata-pod-untrusted.yaml文件内容

apiVersion: v1
kind: Pod
metadata:name: kata-nginx-untrustedannotations:io.kubernetes.cri.untrusted-workload: "true"
spec:containers:- name: nginximage: nginx:1.21.4ports:- containerPort: 80

启动kata的pod

[root@localhost critool]# kubectl apply -f kata-pod-untrusted.yaml
pod/kata-nginx-untrusted created
[root@localhost critool]# kubectl get pods
NAME                   READY   STATUS    RESTARTS   AGE
kata-nginx             1/1     Running   0          12m
kata-nginx-untrusted   1/1     Running   0          7s

k8s集成containerd,集成crictl工具,集成kata相关推荐

  1. Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果...

    为了规范代码,我们一般会集成静态代码检测工具,比如PMD.FindBugs.Checkstyle,那么Jenkins如何集成这些检查工具,并把检查结果放到构建邮件里呢? 今天做了调研和实现,过程如下 ...

  2. 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )

    文章目录 一.Gradle 自动下载并配置构建环境 二.Gradle 提供 API 扩展与开发工具集成 三.Gradle 内置 Maven 和 Ivy 依赖管理 四.Gradle 使用 Groovy ...

  3. Pentest Box -windows平台的linux bash,集成了很多测试工具

    官方下载列表: PentestBox Activity https://sourceforge.net/p/pentestbox/activity/?page=0&limit=100#5af1 ...

  4. Jenkins 在 Tomcat 中的部署及代码静态检查工具集成

    Jenkins 的简单部署 在安装了 Jenkins 运行所需的依赖(主要是 JDK)之后,可以通过如下步骤简单快速地部署 Jenkins: 下载 Jenkins. 打开终端并切换至下载目录. 运行命 ...

  5. Intellij IDEA 社区版集成 Database Navigator 数据库管理工具

    Intellij IDEA 社区版集成 DB Navigator数据库管理工具 第一步:打开IDEA, Intellij IDEA -> Preferences -> Plugins 第二 ...

  6. 持续集成(CI)工具

    点击蓝字关注我们 持续集成(CI)是一种软件工程实践,其中频繁且独立的更改会在添加到较大的代码库中时立即进行测试并报告. CI旨在提供快速反馈,以便在将缺陷引入代码库时,尽快对其进行识别和纠正. CI ...

  7. 通过web系统实现淘宝营销引流,小说或者视频上传之后自动生成二维码,通过二维码分享之后引入微信或者扣扣加群,群满自动切换到下一个,以及数据统计分析和若干个小工具集成

    通过web系统实现淘宝营销引流,小说或者视频上传之后自动生成二维码,通过二维码分享之后引入微信或者扣扣加群,群满自动切换到下一个,以及数据统计分析和若干个小工具集成. 主要实现技术: 1.大文件视频分 ...

  8. 安卓Android测试工具 和 苹果IOS集成调试测试环境工具(GT)

    安卓Android测试工具 和 苹果IOS集成调试测试环境工具(GT) 什么是GT? GT(随身调)是APP的随身调试平台,它是直接运行在手机上的"集成调试环境"(IDTE, In ...

  9. 微信开发者工具集成GitHub,多人协调开发,上传拉取等

    一,准备环境 1,提前安装git环境和GitHub做集成,不做多解释: 1,准备微信项目代码: 2,创建GitHub仓库: 二,创建GitHub仓库 1,创建一个空的GitHub仓库,不要任何文件和不 ...

  10. 渗透测试工具集成系统环境

    Hacker_Tools-System 渗透测试系统环境~简易实用 今天给大家分享搭建好的Windows渗透环境,集成了各种重量级的安全工具以及常用的安全工具! 说明 链接: https://pan. ...

最新文章

  1. R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断、以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签、添加标题、副标题、题注信息
  2. 2021年春季学期-信号与系统-第十五次作业参考答案-第二小题参考答案
  3. python 类特殊方法_python中用特殊方法定制类
  4. 【算法竞赛学习】数字中国创新大赛智慧海洋建设-Task1地理数据分析常用工具
  5. JavaFX 2.0和Scala,例如牛奶和饼干
  6. Hadoop namenode启动瓶颈分析
  7. 鸽子为什么喜欢盘旋_如何为鸽子回避系统设置数据收集
  8. Numpy之Broadcasting
  9. Android自定义视图二:如何绘制内容
  10. nginx tomcat spring-boot 对json等数据压缩
  11. eclipse 环境安装
  12. 几何画板椭圆九种画法_几何画板怎么画椭圆 几何画板椭圆绘制教程
  13. VS 反编译工具 ildasm
  14. Java毕设项目水果网店管理系统(java+VUE+Mybatis+Maven+Mysql)
  15. CF1071C. Triple Flips
  16. com.alibaba.datax.common.exception.DataXException: Code:[ESWriter-03]
  17. 计算机二级考试报名如何上传照片?
  18. 微客侠:解决微信内直接打开淘宝链接
  19. burp的安装和配置
  20. 龙家贰少的MarkDown学习笔记

热门文章

  1. V831——人脸性别年龄检测
  2. iOS 播放系统自带铃声
  3. linux log4cxx 静态库,log4cxx的个人实践
  4. Kubernetes的Limits和Requests
  5. 视频教程-NodeJs零基础到实战项目-Node.js
  6. 计算机产品可以进项抵扣,企业购入的软件产品可以全额抵扣进项税吗?
  7. 天道酬勤,仅仅两年,我便做上了那个测试老大···
  8. 【转】伽利略卫星导航定位系统
  9. 珠海分销系统官网开发笔记:wordpress中使用canonical标签修复版
  10. linux 跨网段ping,Linux中跨网段ping问题