containerd 容器基础环境组件的搭建

news/2024/11/15 17:38:25/文章来源:https://www.cnblogs.com/fanrui/p/18300470

1 基础环境说明
(1)本次所有部署软件版本说明

软件名称 版本号
操作系统内核(后续升级为 lt-5.4.278)

CentOS 7.9.2009 (3.10.0-1160.el7) 1c1GB 20GB
CentOS-7-x86_64-Minimal-2009.iso

containerd v1.6.6
cfssl v1.6.1
cni v1.1.1
crictl v1.24.2
nerdctl 1.7.6
buildkit v0.14.1

(2)系统参数修改

<1>/etc/security/limits.conf

 

ulimit -SHn 65535
cat >> /etc/security/limits.conf <<EOF
* soft nofile 655360
* hard nofile 131072
* soft nproc 655350
* hard nproc 655350
* seft memlock unlimited
* hard memlock unlimitedd
EOF

 (3) libseccomp软件升级

<1>libseccomp版本检查分析
1>查看现有libseccomp版本
rpm -qa | grep libseccomp

<2>问题解决
1>卸载低版本libseccomp
rpm -e libseccomp-2.3.1-4.el7.x86_64 --nodeps
rpm -qa | grep libseccomp

2>安装高版本libseccomp
wget https://vault.centos.org/centos/8/BaseOS/x86_64/os/Packages/libseccomp-2.5.1-1.el8.x86_64.rpm
rpm -ivh libseccomp-2.5.1-1.el8.x86_64.rpm
rpm -qa | grep libseccomp

 2 安装Containerd作为Runtime

(1)环境初始化
<1>安装一些必备工具

yum -y install wget jq psmisc vim net-tools nfs-utils telnet yum-utils device-mapper-persistent-data lvm2 git network-scripts tar curl lrzsz chrony sshpass

<2>网络配置

cat > /etc/NetworkManager/conf.d/calico.conf << EOF
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*
EOFsystemctl restart NetworkManager

<3>内核部分
1>添加启用源

yum -y install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
sed -i "s@mirrorlist@#mirrorlist@g" /etc/yum.repos.d/elrepo.repo
sed -i "s@elrepo.org/linux@mirrors.tuna.tsinghua.edu.cn/elrepo@g" /etc/yum.repos.d/elrepo.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all && yum makecache#查看可用安装包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available

2>升级内核至 4.18 版本以上(内核的升级建议一台一台进行升级)   说明: 稳定版 kernel-ml,如需更新长期维护版本 kernel-lt(此处选择)

yum -y --enablerepo=elrepo-kernel install kernel-lt

3>查看已安装那些内核

rpm -qa | grep kernel

4>查看默认内核: grubby --default-kernel

5>若不是最新的使用命令设置

grubby --set-default /boot/vmlinuz-5.4.278-1.el7.elrepo.x86_64

6>重启生效: reboot

<4>安装 ipvsadm(此处安装是为了后续给k8s使用)

说明:所有节点配置ipvs模块,在内核 4.19+版本 nf_conntrack_ipv4 已经改为nf_conntrack,4.18 以下使用 nf_conntrack_ipv4 即可

yum -y install ipvsadm ipset sysstat conntrack libseccomp
cat >> /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOFsystemctl restart systemd-modules-load.service

检查: lsmod | grep -e ip_vs -e nf_conntrack

ip_vs_sh               16384  0 
ip_vs_wrr              16384  0 
ip_vs_rr               16384  0 
ip_vs                 155648  6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          147456  1 ip_vs
nf_defrag_ipv6         24576  2 nf_conntrack,ip_vs
nf_defrag_ipv4         16384  1 nf_conntrack
libcrc32c              16384  3 nf_conntrack,xfs,ip_vs

<5>修改内核参数

cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0
net.ipv6.conf.all.forwarding = 1
EOFsysctl --system

(2)安装说明
<1>下载

wget https://github.com/containerd/containerd/releases/download/v1.6.6/cri-containerd-cni-1.6.6-linux-amd64.tar.gz

<2>创建 cni 插件所需目录

mkdir -p /etc/cni/net.d
mkdir -p /opt/cni/bin

<3>解压cni二进制包

tar -xf cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/
tar -xzf cri-containerd-cni-1.6.6-linux-amd64.tar.gz -C /

<4>创建服务启动文件

cat > /etc/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF

(3)配置 Containerd 所需的模块

cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF#加载模块
systemctl restart systemd-modules-load.service

(4)创建 Containerd 的配置文件

<1>配置修改

mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml#修改 Containerd 的配置文件
sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml
cat /etc/containerd/config.toml | grep SystemdCgroup

(5)启动并设置为开机启动

systemctl daemon-reload && systemctl enable --now containerd

(6)配置 crictl 客户端连接的运行时位置

<1>下载

wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.24.2/crictl-v1.24.2-linux-amd64.tar.gz
tar -xf crictl-v1.24.2-linux-amd64.tar.gz -C /usr/bin/

<2>生成配置文件

cat > /etc/crictl.yaml <<EOF
runtime-endpoint: unix:///run/containerd/containerd.sock
image-endpoint: unix:///run/containerd/containerd.sock
timeout: 10
debug: false
EOF#测试
systemctl restart containerd
crictl info

(7)开机检查启动项

systemctl status NetworkManager && systemctl status systemd-modules-load.service
systemctl daemon-reload && systemctl status containerd
crictl info

3 nerdctl和buildctl安装

(1)安装nerdctl
<1>安装

wget https://github.com/containerd/nerdctl/releases/download/v1.7.6/nerdctl-1.7.6-linux-amd64.tar.gz
tar -xf nerdctl-1.7.6-linux-amd64.tar.gz -C /usr/local/bin/

<2>验证 nerdctl -v

(2)安装buildctl
<1>安装

wget https://github.com/moby/buildkit/releases/download/v0.14.1/buildkit-v0.14.1.linux-amd64.tar.gz
tar -xf buildkit-v0.14.1.linux-amd64.tar.gz
mv bin/* /usr/local/bin/

buildctl -v

<2>提供buildkit.socket文件

cat > /etc/systemd/system/buildkit.socket <<EOF
[Unit]
Description=BuildKit
Documentation=https://github.com/moby/buildkit

[Socket]
ListenStream=%t/buildkit/buildkitd.sock
SocketMode=0660[Install]
WantedBy=sockets.target
EOF

<3>配置启动脚本

cat > /etc/systemd/system/buildkit.service <<EOF
[Unit]
Description=BuildKit
Requires=buildkit.socket
After=buildkit.socket
Documentation=https://github.com/moby/buildkit

[Service]
ExecStart=/usr/local/bin/buildkitd --oci-worker=false --containerd-worker=true --config=/etc/buildkit/buildkitd.toml[Install]
WantedBy=multi-user.target
EOF

<4>配置配置文件(此处是要使用代理才使用的,如果不需要则不配置上述启动文件的--config即可)

mkdir /etc/buildkit
mkdir /etc/nerdctl
mkdir /etc/certcat > /etc/buildkit/buildkitd.toml <<EOF
debug = true
insecure-entitlements = ["network.host", "security.insecure"]
[registry."www.xxxxx.com"]ca=["/etc/cert/www.xxxxx.com.crt"]insecure = true 
EOFcat > /etc/nerdctl/nerdctl.toml <<EOF
namespace = "k8s.io"
debug = false
debug_full = false
insecure_registry = true
EOF

<5>启动

systemctl daemon-reload && systemctl enable buildkit --now
systemctl status buildkit

<6>检查

ll /run/buildkit/buildkitd.sock

 

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

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

相关文章

【JavaScript】聊一聊js中的浅拷贝与深拷贝与手写实现

什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:前言 什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:…

分页查询及其拓展应用案例

分页查询 分页查询是处理大量数据时常用的技术,通过分页可以将数据分成多个小部分,方便用户逐页查看。SQLAlchemy 提供了简单易用的方法来实现分页查询。 本篇我们也会在最终实现这样的分页效果:1. 什么是分页查询 分页查询是将查询结果按照一定数量分成多页展示,每页显示固…

delphi dev cxgrid 列绑定Richedti 支持过滤

默认是不支持过滤的,这里需要改到内部的一些源码文件。 先说思路: 1.要让列支持过滤需要重载richedit类的 GetSupportedOperations,typeTcxRichEditProperties = class(cxRichEdit.TcxRichEditProperties)publicfunction GetSupportedOperations: TcxEditSupportedOperation…

《项目管理》-笔记1

PMBOK解读 1.1项目和项目管理 项目:项目是为创造独特的产品、服务或成果而进行的临时性工作。 项目管理:在项目的活动中运用知识、技术、工具、技巧,以满足项目要求。 1.2十大知识领域 (1)项目整合管理 项目整合管理包括为识别、定义、组合、统一和协调各项目管理过程组的各…

Cilium Ingress 特性(转载)

Cilium Ingress 特性Cilium Ingress 特性(转载) 一、环境信息主机 IPubuntu 10.0.0.234软件 版本docker 26.1.4helm v3.15.0-rc.2kind 0.18.0kubernetes 1.23.4ubuntu os Ubuntu 22.04.6 LTSkernel 5.15.0-106二、Cilium Ingress 流程图Cilium 现在提供了开箱即用的 Kuberne…

N1盒子挂载阿里云盘-Alist工具

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }N1盒子挂载阿里云盘安装Alist手动安装 参考:官方文档step 1step 2配置-启动step 3打开web网页:http://192.168.1.254:5244/ 登录界面、拉…

WindowsLinux搭建frp内网穿透(自用)

Linux服务器搭建服务端 1、下载官方frp包,软件是开源的,下载链接: https://github.com/fatedier/frp/releases 根据自己的版本需求,自行下载对应的版本号,本文章以0.37版本为例wget -c https://github.com/fatedier/frp/releases/download/v0.37.1/frp_0.37.1_linux_amd64…

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i.

2024-07-13:用go语言,给定一个从0开始的长度为n的整数数组nums和一个从0开始的长度为m的整数数组pattern,其中pattern数组仅包含整数-1、0和1。 一个子数组nums[i..j]的大小为m+1,如果满足以下条件,则我们称该子数组与模式数组pattern匹配: 1.若pattern[k]为1,则nums[i+…

dbeaver

修改字体 参考 【DBeaver】常用自定义设置 旧版 编辑器字体查询结果字体新版 应用字体编辑器字体修改背景色 编辑器背景色注意: 此设置会同时修改查询结果背景色,但是需要重启 dbeaver格式化配置 参考 【DBeaver】常用自定义设置 格式化大小写关闭自动插入表别名关于语句分隔符…

动态规划的“三步走”方法

“三步走”方法 动态规划问题种类较多,但大多都能通过“三步走”方法解决。状态表示:将具体问题抽象为数学问题,明确需要表示的状态,数组中的下标分别表示哪种状态。 状态转移:状态转移相当于递推公式。主要有两种方式,可以从上一个状态转移到当前状态,或者从当前状态转…

N1盒子挂载磁盘-解决盒子重启后无法自动挂载问题

Markdown Example.centered-text { text-align: center; font-size: 40px; font-family: "Times New Roman", Georgia, serif }N1盒子挂载磁盘挂载步骤: step 1step 2如果提示挂载已存在、就先卸载挂载分区step 3 回到首页重新挂载step 4此时已经挂载成功、但是默认…

记一次 CDN 流量被盗刷经历

先说损失,被刷了 70 多RMB,600多G流量,PCDN 真可恶啊,这里分享一下过程和止损手段。先说损失,被刷了 70 多RMB,还好止损相对即时了,亏得不算多,PCDN 真可恶啊。600多G流量,100多万次请求。 怎么发现的 先是看到鱼皮大佬发了一篇推文突发,众多网站流量被盗刷!我特么也…