首页 > 其他分享 >containerd 容器基础环境组件的搭建

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

时间:2024-07-13 18:30:06浏览次数:16  
标签:容器 tar containerd etc ipv4 ip 组件 net

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*
EOF

systemctl 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 "[email protected]/[email protected]/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
EOF

systemctl 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
EOF

sysctl --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/cert

cat > /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 
EOF

cat > /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

 

标签:容器,tar,containerd,etc,ipv4,ip,组件,net
From: https://www.cnblogs.com/fanrui/p/18300470

相关文章

  • Python数据容器(dict字典、set集合)
    dic字典dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。字典的创建使用大括号{}包含键值对,并用冒号:分隔键和值,形成键:值对。字典的特性唯一键:字典中的每个键都必须是唯一的。值可以取任何数据类型,如字符串,数字,元组。无序(Python......
  • Python数据容器(1)--列表与元组
    数据容器在Python中,数据容器是指能够存储多个数据项(可以是不同类型的数据)的数据结构。Python提供了多种内置的数据容器类型,每种类型都有其特定的用途和特性。Python中最常用的数据容器有:List列表、Tuple元组、Dictionary字典、Set集合。本篇我们来介绍其中的List列表和Tuple......
  • 【Qt Designer用Frame设置背景图片】不影响其它组件小技巧,控件层级设置,组件的继承
    QtDesigner用Frame设置背景图片、颜色不影响其它组件小技巧,控件层级设置,组件的继承在设置背景时,遇到一个问题,例如用frame当最后一层设置背景,加载资源图片后,会使frame内部组件继承相同格式,很麻烦。原语句用法border-image:url(:/images/login.png);内部组件会出现父......
  • 第二部分:关键技术领域的开源实践【容器化】
    企业开源中的容器化是一个重要的发展趋势,它在支撑企业持续信息化方面能发挥多重关键作用。以下是容器化对企业持续信息化的主要影响:标准化和一致性:容器化提供了一种标准化的方式来打包和部署应用程序,无论是在开发、测试还是生产环境中,都能确保一致的运行环境,减少“在我的机器......
  • 在Vue中,子组件向父组件传递数据
    在Vue中,子组件向父组件传递数据通常通过两种方式实现:事件和回调函数。这两种方式允许子组件与其父组件进行通信,传递数据或触发特定的行为。1.通过事件传递数据子组件可以通过触发自定义事件,并将数据作为事件的参数来向父组件传递数据。子组件:<template><div>......
  • Docker 使用基础(3)—容器
                         ......
  • JS组件系列——BootstrapTable 行内编辑解决方案:x-editable
    转载:http://www.cnblogs.com/landeanfen/p/5821192.html#_label2  阅读目录一、x-editable组件介绍二、bootstrapTable行内编辑初始方案三、bootstrapTable行内编辑最终方案1、文本框2、时间选择框3、下拉框4、复选框5、“阴魂不散”的select2四、总结 正......
  • IOC 内置容器的使用
    //nuget安装:Microsoft.Extensions.DependencyInjection//ServiceCollection的生命周期//AddTransient瞬时生命周期,每次创建都是一个全新的实例//AddSingleton单列生命周期,同一个类型创建出来的是同一个实例//AddScoped作用域生命周期,同一个services获取到的是用一个......
  • 微信小程序车牌键盘输入组件(支持单个删除更改,支持赋值,支持新能源)
    网上一搜一大堆类似但大多都相对简单,适用的场景并不多。多数也不支持赋值不支持单个删除更改我就借鉴了一下网上文章的思路,为了达到自己想要的效果做了相对应的更改。效果图如下:直接上代码!WXML代码:点击查看代码<!--车牌号码输入框--><viewwx:for="{{carNum}}"wx:ke......
  • 图标组件的封装与管理(React/svg)
    一概要1.1背景最近在项目中使用了很多从iconfont拿到的图标。使用官网的导入方法有些繁琐,也不易管理。于是捣鼓了一下...1.2目的能够像组件一样使用,具有规范性。比如暴露一个type属性,根据不同的type使用不同的主题色。高自由度。可以直接在项目中管理图标,只需要处理从其......