《Kubernetes部署篇:Ubuntu20.04基于二进制安装安装cri-containerd-cni》

一、背景

由于客户网络处于专网环境下, 使用kubeadm工具安装K8S集群,由于无法连通互联网,所有无法使用apt工具安装kubeadm、kubelet、kubectl,当然你也可以使用apt-get工具在一台能够连通互联网环境的服务器上下载cri-tools、containerd、kubernetes-cni软件包,然后拷贝到专网主机上,通过dpkg工具安装cri-tools、containerd、kubernetes-cni,这里并没有采用这种方式,在当前客户主机网络环境下,我们使用二进制方式来安装cri-tools、containerd、kubernetes-cni。

环境信息如下所示:

操作系统 内核版本 cri-containerd-cni版本
Ubuntu 20.04.5 LTS 5.15.0-69-generic 1.7.2

说明:根据官方文档,自1.1版本之后,提供了cri-tools、containerd、runc、cni二进制合集包

cri-containerd-cni二进制包,包含如下软件:

软件名称 软件版本
cri-tools 1.26.0
containerd 1.7.2
runc 1.1.7
cni 1.2.0

问题一:为什么安装containerd,需要同时安装runc及cni网络插件?

安装containerd,需要同时安装runc及cni网络插件。Containerd不能直接操作容器,需要通过runc来运行容器。默认Containerd管理的容器仅有lo网络(无法访问容器之外的网络),如果需要访问容器之外的网络则需要安装CNI网络插件。CNI(Container Network Interface) 是一套容器网络接口规范,用于为容器分配ip地址,通过CNI插件Containerd管理的容器可以访问容器之外的网络。


问题二:为什么安装cri-tools?

cri-tools(容器运行时工具):这是一个 用于与Kubernetes容器运行时接口(CRI)进行交互的命令行工具集。它提供了一些有用的功能,如创建、销毁和管理容器等。


二、操作步骤

2.1、方法一

1、下载软件包

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

2、解压安装

tar axf cri-containerd-cni-1.7.2-linux-amd64.tar.gz -C /

3、生成默认配置文件

mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml

4、配置systemd cgroup驱动

sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml

5、重载沙箱pause镜像

sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"#g' /etc/containerd/config.toml

6、设置cni插件在创建网络配置文件时使用的模板文件路径

sed -i 's#conf_template = ""#conf_template = "/etc/cni/net.d/cni-default.conf"#g' /etc/containerd/config.toml

6、网络插件CNI配置文件

rm -f /etc/cni/net.d/10-containerd-net.conflist
cat <<EOF | sudo tee /etc/cni/net.d/cni-default.conf 
{
    "name": "mynet",
    "cniVersion": "0.3.1",
    "type": "bridge",
    "bridge": "mynet0",
    "isDefaultGateway": true,
    "ipMasq": true,
    "hairpinMode": true,
    "ipam": {
        "type": "host-local",
        "subnet": "10.48.0.0/16"
    }
}
EOF

说明:

1、10.48.0.0/16是集群pod网段
2、cni-default.conf 文件中cniVersion的版本号要与10-containerd-net.conflist版本中定义的保持一致。

7、重启containerd服务并设置开机自启

systemctl daemon-reload && systemctl restart containerd && systemctl enable containerd

安装完成后,确保k8s集群所有节点的runc和containerd版本如下所示:

root@k8s-master-63:~# containerd -v
containerd github.com/containerd/containerd v1.7.2 0cae528dd6cb557f7201036e9f43420650207b58

root@k8s-master-63:~# runc -v
runc version 1.1.7
commit: v1.1.7-0-g860f061b
spec: 1.0.2-dev
go: go1.20.4
libseccomp: 2.5.1

说明:由于网络问题,无法下载国外的K8S镜像,所以这里使用阿里云的镜像仓库地址registry.cn-hangzhou.aliyuncs.com/google_containers代替。如果你有阿里云的账号,可以对 containerd配置镜像加速地址来实现快速下载镜像。


2.2、方法二

1、安装cri-tools

# 1、下载二进制包
wget https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.26.0/crictl-v1.26.0-linux-amd64.tar.gz
tar axf crictl-v1.26.0-linux-amd64.tar.gz -C /usr/local/bin

# 2、配置/etc/crictl.yaml
cat <<EOF | sudo tee /etc/crictl.yaml
runtime-endpoint: unix:///run/containerd/containerd.sock
EOF

2、安装cni网络插件

# 1、下载二进制包
wget https://github.com/containernetworking/plugins/releases/download/v1.2.0/cni-plugins-linux-amd64-v1.2.0.tgz

# 2、解压文件
mkdir -p /opt/cni/bin
tar axf cni-plugins-linux-amd64-v1.2.0.tgz -C /opt/cni/bin

3、安装runc

wget https://github.com/opencontainers/runc/releases/download/v1.1.7/runc.amd64
cp runc.amd64 /usr/bin/runc

4、安装containerd

# 1、下载二进制包并解压
wget https://github.com/containerd/containerd/releases/download/v1.7.2/containerd-1.7.2-linux-amd64.tar.gz
tar axf containerd-1.7.2-linux-amd64.tar.gz -C /usr/local

# 2、生成默认配置文件
mkdir -p /etc/containerd && containerd config default > /etc/containerd/config.toml

# 3、配置systemd cgroup驱动
sed -i 's#SystemdCgroup = false#SystemdCgroup = true#g' /etc/containerd/config.toml

# 4、重载沙箱pause镜像
sed -i 's#sandbox_image = "registry.k8s.io/pause:3.8"#sandbox_image = "registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.7"#g' /etc/containerd/config.toml

# 5、设置cni插件在创建网络配置文件时使用的模板文件路径
sed -i 's#conf_template = ""#conf_template = "/etc/cni/net.d/cni-default.conf"#g' /etc/containerd/config.toml

# 6、网络插件CNI配置文件
cat <<EOF | sudo tee /etc/cni/net.d/cni-default.conf 
{
    "name": "mynet",
    "cniVersion": "0.3.1",
    "type": "bridge",
    "bridge": "mynet0",
    "isDefaultGateway": true,
    "ipMasq": true,
    "hairpinMode": true,
    "ipam": {
        "type": "host-local",
        "subnet": "10.48.0.0/16"
    }
}
EOF

# 7、创建service文件
vim /etc/systemd/system/containerd.service 
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
#uncomment to enable the experimental sbservice (sandboxed) version of containerd/cri integration
#Environment="ENABLE_CRI_SANDBOXES=sandboxed"
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/local/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
# Comment TasksMax if your systemd version does not supports it.
# Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target

# 8、重启containerd服务并设置开机自启
systemctl daemon-reload && systemctl restart containerd && systemctl enable containerd

总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:企业级K8s集群运维实战

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Ubuntu 20.04二进制部署 Kubernetes 可以按照以下步骤进行: 1. 下载所需的 Kubernetes 二进制文件: ``` $ wget https://storage.googleapis.com/kubernetes-release/release/v1.22.0/kubernetes-server-linux-amd64.tar.gz ``` 这里下载的是 Kubernetes v1.22.0 版本的二进制文件,你也可以下载其他版本。 2. 解压文件并将二进制文件复制到 `/usr/local/bin` 目录中: ``` $ tar -xvf kubernetes-server-linux-amd64.tar.gz $ cd kubernetes $ sudo cp server/bin/kube-apiserver /usr/local/bin/ $ sudo cp server/bin/kube-controller-manager /usr/local/bin/ $ sudo cp server/bin/kube-scheduler /usr/local/bin/ $ sudo cp server/bin/kubectl /usr/local/bin/ ``` 3. 创建 Kubernetes 的配置文件: ``` $ mkdir -p $HOME/.kube $ echo 'apiVersion: v1\nkind: Config\nclusters:\n- cluster:\n server: http://127.0.0.1:8080\n name: local\ncontexts:\n- context:\n cluster: local\n user: ""\n name: local\ncurrent-context: local\nusers: []' > $HOME/.kube/config ``` 4. 启动 Kubernetes 组件: ``` $ kube-apiserver --insecure-bind-address=0.0.0.0 --insecure-port=8080 & $ kube-controller-manager & $ kube-scheduler & ``` 5. 验证 Kubernetes 是否部署成功: ``` $ kubectl version ``` 如果输出类似于以下内容,则表示 Kubernetes 部署成功: ``` Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b52b299e3f0f152e7dee58d6b4d28f135876ce", GitTreeState:"clean", BuildDate:"2021-08-04T17:15:18Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.0", GitCommit:"c2b52b299e3f0f152e7dee58d6b4d28f135876ce", GitTreeState:"clean", BuildDate:"2021-08-04T17:07:26Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"} ``` 注意:这种部署方式不适用于生产环境,仅适用于测试和学习。在生产环境中,建议使用 Kubernetes 发行版或云服务商的 Kubernetes 服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值