Containerd+Kubernetes搭建k8s集群

这篇具有很好参考价值的文章主要介绍了Containerd+Kubernetes搭建k8s集群。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


视频教程地址:https://space.bilibili.com/3461573834180825/channel/seriesdetail?sid=3316691

文档说明

之前写了一篇基于docker安装kubernetes的文章,这篇文档我们来使用containerd来安装kubernetes,相较于docker,containerd运行容器的时候效率更高,并且可以兼容docker镜像。基于docker安装kubernetes的文章地址:https://blog.csdn.net/m0_51510236/article/details/123477488

安装kubernetes之前,你需要准备如下配置的虚拟机或实体机进行安装(最少三台):

  • CPU:2核
  • 内存:2GB
  • 硬盘:50GB

上面的是最低配置,你可以根据自己的硬件条件提高配置。

安装软件的版本和下载地址

对应软件版本和下载地址如下表:

软件名称(软件说明) 版本 下载地址
CentOS(操作系统) 7-2207-02 阿里源/清华源
kubernetes(容器编排工具) 1.26.5 文档内提供
containerd(容器服务) 1.6.21 点击下载
libseccomp(计算插件) 2.5.4 点击下载
runc(容器运行时) 1.1.7 点击下载
Calico(网络插件) 3.25 文档内提供
Metallb(负载均衡插件) v0.13.9 文档内提供

部分软件是在国外服务器下载,如果下载过慢可以私信我获取

环境说明

服务器准备

服务器列表:

服务器名称 IP地址 配置 服务器用途
k8s-master 192.168.79.50 2c2g50g kubernetes的主节点
k8s-node01 192.168.79.52 2c2g50g kubernetes的工作节点1
k8s-node02 192.168.79.54 2c2g50g kubernetes的工作节点2

三台服务器均已准备好:
Containerd+Kubernetes搭建k8s集群

你还需要保证这些服务器之间能够互相ping同

负载均衡IP地址准备

metallb的loadbalancer需要一些预留的IP地址以用于负载均衡的IP地址分配,本篇文章预留的IP地址为192.168.79.60~192.168.79.69

安装步骤

环境设置

接下来我们需要在三台服务器上同时进行一些操作,所以你可以在Xshell上依次点击工具栏上的 工具(T) -> 发送键输入到(K) -> 已链接的会话(C) 来保证输入一条命令可以在三个终端执行,不同ssh工具设置方式不同,请自行查询。

步骤有点多,记得别漏了哦

关闭防火墙

使用以下命令关闭防火墙:

systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld

同时发送给三个终端,查看执行结果可以看到防火墙已经全部关闭了:
Containerd+Kubernetes搭建k8s集群

关闭SELinux

使用以下命令关闭SELinux:

sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0

关闭swap分区

使用以下命令关闭swap分区:

# 永久关闭
swapLine=$(cat /etc/fstab | grep swap | awk '{print $1}')
sed -i "s/$swapLine/#$swapLine/" /etc/fstab
# 临时关闭
swapoff -a

成功之后使用 free -h 命令可以查看到swap分区的大小变为0了
Containerd+Kubernetes搭建k8s集群

设置主机名称解析

使用以下命令设置主机名称解析,但是需要注意要改为对应你们自己的IP地址哦:

cat >> /etc/hosts << EOF
192.168.79.50 k8s-master
192.168.79.52 k8s-node01
192.168.79.54 k8s-node02
EOF

设置主机名称

这个设置需要每个主机单个设置,所以可以点击终端右上角的 OFF 按钮临时关闭输出命令到所有的会话:
Containerd+Kubernetes搭建k8s集群

每台服务器执行的命令

  • 192.168.79.50: hostnamectl set-hostname k8s-master
  • 192.168.79.52: hostnamectl set-hostname k8s-node01
  • 192.168.79.54: hostnamectl set-hostname k8s-node02

设置完后记得点击每个终端右上角的 ON 按钮开启同时输出命令到所有终端哦:
Containerd+Kubernetes搭建k8s集群

加载 br_netfilter 模块

由于开启内核 ipv4 转发需要加载 br_netfilter 模块,所以加载下该模块,但是这个模块不会默认加载,所以我们开启后还要设置开机自动加载这个模块

# 设置开机自动加载这个模块
cat >> /etc/rc.d/rc.local << EOF
/usr/sbin/modprobe br_netfilter
EOF
chmod +x /etc/rc.d/rc.local
# 立刻加载
modprobe br_netfilter

桥接的IPv4流量传递到iptables

cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sysctl --system

升级操作系统内核

因为本次安装的版本为 1.26.5 ,为第二新的版本,可能由于内核版本较低导致安装失败,所以我们执行这个步骤将内核升级到最新的稳定版本

导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装elrepo YUM源仓库
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
安装kernel-lt版本

m1为长期稳定版本,lt为长期维护版本

yum --enablerepo="elrepo-kernel" -y install kernel-lt.x86_64
设置grub2默认引导为0
grub2-set-default 0
重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
重启

当上面命令全部执行完成后使用 reboot 命令重启电脑,以使升级的内核生效
Containerd+Kubernetes搭建k8s集群

重启之后使用 uname -r 查看系统内核版本,升级时间不同可能导致稳定的内核版本不一样:
Containerd+Kubernetes搭建k8s集群

安装ipset及ipvsadm

请求多的时候可能会导致响应过慢,安装这两个软件能够在一定程度上提升ipvs转发速度

yum install -y ipset ipvsadm

配置ipvsadm模块加载方式

添加需要加载的模块

cat > /etc/sysconfig/modules/ipvs.modules << EOF
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOF

授权、运行、检查是否加载

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack

查看结果:
Containerd+Kubernetes搭建k8s集群

环境设置部分已经全部完成,现在可以开始正式按钻过软件了

安装containerd

下载containerd

可以使用以下命令下载containerd:

wget https://github.com/containerd/containerd/releases/download/v1.6.21/cri-containerd-cni-1.6.21-linux-amd64.tar.gz -O /usr/local/src/cri-containerd-cni-1.6.21-linux-amd64.tar.gz

因为是在github上下载较慢,为了节省时间我就提前下载好并上传到服务器上了:
Containerd+Kubernetes搭建k8s集群

解压containerd

需要将containerd解压到根目录,使用命令:

tar -zxvf cri-containerd-cni-1.6.21-linux-amd64.tar.gz -C /

可以查看containerd版本号:

containerd -version

执行结果:
Containerd+Kubernetes搭建k8s集群

生成containerd的配置文件

使用以下命令生成containerd的默认配置文件:

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

配置文件(/etc/containerd/config.toml)需要将 sandbox_image 的版本号改一下版本号和镜像地址,因为默认的镜像地址是在谷歌上的,谷歌国内访问不到

默认值:sandbox_image = “registry.k8s.io/pause:3.6”

目标值:sandbox_image = “registry.aliyuncs.com/google_containers/pause:3.9”

修改结果:
Containerd+Kubernetes搭建k8s集群

启动containerd并设置开机自启动

systemctl enable --now containerd

安装runc

containerd自带有runc,但是自带的有些问题,所以我们还需要特意安装一遍稳定版的runc:
Containerd+Kubernetes搭建k8s集群

下载libseccomp

因为runc依赖于libseccomp计算库,所以我们使用以下命令下载libseccomp的源码压缩包:

wget https://github.com/opencontainers/runc/releases/download/v1.1.7/libseccomp-2.5.4.tar.gz

下载完成:
Containerd+Kubernetes搭建k8s集群

安装libseccomp

首先我们先将libseccomp的源码包解压:

tar -zxvf libseccomp-2.5.4.tar.gz

然后我们需要安装c语言的编译工具和libseccomp的gperf依赖

yum install -y gcc gcc-c++ gperf

执行安装

cd libseccomp-2.5.4
./configure
make && make install

查看是否安装成功:

find / -name libseccomp.so

查询结果:
Containerd+Kubernetes搭建k8s集群

下载runc

使用以下命令下载:

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

同理因为github下载较慢,我提前下载了然后上传到服务器上:
Containerd+Kubernetes搭建k8s集群

安装runc

# 删除containerd自带的runc
rm -rf /usr/local/sbin/runc
# 为我们自己的runc赋予执行权限
chmod +x runc.amd64
# 将runc复制到安装目录
mv runc.amd64 /usr/local/sbin/runc

再次执行runc发现没有报错了:
Containerd+Kubernetes搭建k8s集群

安装kubernetes

配置kubernetes的yum源

需要配置阿里云的yum源,因为官方文档默认的yum源是在谷歌那,国内访问不到,可以执行以下命令配置yum源:

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

安装kubernetes

配置了yum源之后可以直接使用yum命令安装kubernetes

yum install -y kubeadm-1.26.5 kubectl-1.26.5 kubelet-1.26.5

配置cgroup驱动改为systemd

我们需要将kubernetes的cgroup改为systemd,需要将 /etc/sysconfig/kubelet 的内容改为 KUBELET_EXTRA_ARGS="--cgroup-driver=systemd",使用以下命令:

sed -i 's/KUBELET_EXTRA_ARGS=/KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"/g' /etc/sysconfig/kubelet

修改之后:
Containerd+Kubernetes搭建k8s集群

搭建kubernetes集群

上面我们已经完成了kubernetes的安装,接下来我们要开始搭建集群了

初始化集群

这一步只需要在master上执行就好了,所以点击master上面的 OFF 按钮关闭发送命令至所有终端:
Containerd+Kubernetes搭建k8s集群

如果你镜像拉取不下来,那么你可以看一下我接下来的这篇文章,直接下载离线镜像进行安装:https://blog.csdn.net/m0_51510236/article/details/131312289

我们可以使用以下命令初始化(注意修改master的IP地址):

kubeadm init \
--apiserver-advertise-address=192.168.79.50 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version=v1.26.5 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/containerd/containerd.sock

配置的内容解析

  • --apiserver-advertise-address=192.168.79.50:k8s-master的地址,注意修改为自己的master地址
  • --image-repository=registry.aliyuncs.com/google_containers:默认的镜像拉取地址在谷歌,所以这里改为阿里云的镜像地址
  • --kubernetes-version=v1.26.5:kubernetes的版本号
  • --service-cidr=10.96.0.0/12:service的网段
  • --pod-network-cidr=10.244.0.0/16:pod的网段地址,注意之后安装Calico网络插件的时候还会用到这个地址
  • --cri-socket=unix:///var/run/containerd/containerd.sock:设置cri的socket使用containerd的sock

看到这个代表初始化成功:
Containerd+Kubernetes搭建k8s集群

按照提示本地执行代码:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

远程执行的代码需要改一下,需要加上 --cri-socket=unix:///var/run/containerd/containerd.sock ,所以执行:

kubeadm join 192.168.79.50:6443 --token 9i3lvb.2m4aoo1672t4edra \
	--discovery-token-ca-cert-hash sha256:a41c37db5378cd1fad77a2537a3dd64117465c4a33c9de7825abc3daa847b8d0 \
	--cri-socket=unix:///var/run/containerd/containerd.sock

可以查看加入集群的结果:
Containerd+Kubernetes搭建k8s集群

使用 kubectl get nodes -o wide 命令查看加入到的集群:
Containerd+Kubernetes搭建k8s集群

设置kubelet开机自启动

需要设置kubelet开机自启动,这样开机才会自动运行kubernetes

systemctl enable --now kubelet

安装 Calico 网络插件

Calico对应版本的官网地址:https://docs.tigera.io/calico/3.25/getting-started/kubernetes/quickstart

可以使用官网的这行命令在master当中执行安装Calico:
Containerd+Kubernetes搭建k8s集群

命令:

kubectl create -f https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/tigera-operator.yaml

查看执行结果:
Containerd+Kubernetes搭建k8s集群

需要过一段时间才能安装成功,因为要拉取插件,可使用命令查看安装结果:

kubectl get all -n tigera-operator

看到这个则代表安装成:
Containerd+Kubernetes搭建k8s集群

还需要自定义资源安装,不能直接执行这个文件,需要将这个文件下载下来然后改一点东西:
Containerd+Kubernetes搭建k8s集群

使用命令下载:

wget https://raw.githubusercontent.com/projectcalico/calico/v3.25.1/manifests/custom-resources.yaml
cat custom-resources.yaml

查看内容,我们需要将pod网段改为我们初始化集群时候设置的 10.244.0.0/16
Containerd+Kubernetes搭建k8s集群

使用命令即可修改:

sed -i 's/cidr: 192.168.0.0/cidr: 10.244.0.0/g' custom-resources.yaml
cat custom-resources.yaml

查看修改后的结果:
Containerd+Kubernetes搭建k8s集群

现在可以直接执行它:

kubectl create -f custom-resources.yaml

查看执行结果:
Containerd+Kubernetes搭建k8s集群

时间比较长,所以监控创建结果:

watch kubectl get all -o wide -n calico-system

当STATUS全部变为Running的时候就代表安装成功了:
Containerd+Kubernetes搭建k8s集群

接下来可以开始下一步了

安装MetalLB负载均衡器

metallb是用于kubernetes的Service暴露LoadBalancer的负载均衡器,官网地址:https://metallb.universe.tf/installation/

修改 kube-proxy 的配置文件

按照官网的意思修改:
Containerd+Kubernetes搭建k8s集群

执行命令:

kubectl edit configmap -n kube-system kube-proxy

仅需要修改我标出来的地方即可:
Containerd+Kubernetes搭建k8s集群

安装MetalLB

执行以下命令即可安装:

kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml

查看执行结果(提前下载了文件):
Containerd+Kubernetes搭建k8s集群

使用命令查看部署结果:

kubectl get all -n metallb-system

同样的所有的STATUS都为Running状态则为安装成功:
Containerd+Kubernetes搭建k8s集群

为MetalLB分配IP地址

我们可能会创建多个对外暴露的Service,所以需要分配多个没有用到的IP地址给MetalLB,新增一个 metallb-ip-pool.yaml 文件,文件内容为:

apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  # 注意改为你自己为MetalLB分配的IP地址
  - 192.168.79.60-192.168.79.69

---

apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: example
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool

查看文件内容:
Containerd+Kubernetes搭建k8s集群

执行这个文件:

kubectl apply -f metallb-ip-pool.yaml

查看执行结果:
Containerd+Kubernetes搭建k8s集群

接下来我们就可以部署应用了

部署应用

部署nginx

我会部署一个nginx程序并通过metallb的地址池暴露访问地址给外网访问,使用命令部署一个nginx:

kubectl create deployment nginx --image=nginx

这个命令会在dockerhub当中拉取一个最新版的nginx并运行,可以查看运行结果:
Containerd+Kubernetes搭建k8s集群

同样使用命令查看部署情况

kubectl get deploy,pod -o wide

STATUS为Running:
Containerd+Kubernetes搭建k8s集群

暴露给外网访问

应用部署成功,现在需要创建一个LoadBalancer给外网访问了,使用命令将nginx暴露到外网,service类型为LoadBalancer:

kubectl expose deployment nginx --port=80 --type=LoadBalancer

显示暴露成功:
Containerd+Kubernetes搭建k8s集群

使用命令查看Service的外网IP地址:
Containerd+Kubernetes搭建k8s集群

接下来可以访问 192.168.79.60 这个IP地址了,可以看到nginx响应成功:
Containerd+Kubernetes搭建k8s集群

好了下课(点个关注呗)文章来源地址https://www.toymoban.com/news/detail-465641.html

到了这里,关于Containerd+Kubernetes搭建k8s集群的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Loki+Grafana(外)采集Kubernetes(K8s)集群(基于containerd)

    Loki+Grafana(外)采集Kubernetes(K8s)集群(基于containerd)

    1、简介 Loki是一个开源、分布式的日志聚合系统,由Grafana Labs推出。Loki的设计目标是为了高效地处理大规模的日志数据,并具有良好的可扩展性。Loki的最大优点是它具有低资源占用和高效的查询速度。这是因为Loki不需要在处理日志数据时进行索引,而是将数据存储在类似于

    2024年02月10日
    浏览(15)
  • Prometheus+Grafana(外)监控Kubernetes(K8s)集群(基于containerd)

    Prometheus+Grafana(外)监控Kubernetes(K8s)集群(基于containerd)

    1、k8s环境 版本 v1.26.5 二进制安装Kubernetes(K8s)集群(基于containerd)—从零安装教程(带证书) 主机名 IP 系统版本 安装服务 master01 10.10.10.21 rhel7.5 nginx、etcd、api-server、scheduler、controller-manager、kubelet、proxy master02 10.10.10.22 rhel7.5 nginx、etcd、api-server、scheduler、controller-manager、kubel

    2024年02月16日
    浏览(53)
  • 【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

    【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

    🍁 博主简介   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊 交流社区: 运维交流社区 欢迎大家的加入!   Kubernetes(简称:k8s) 是Google在2014年6月开源的一个容器集群管理系统,使用Go语言开发,用于管理云平台中多

    2024年02月07日
    浏览(15)
  • 高可用containerd搭建K8s集群【v1.25】

    [toc] 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 集群中所有机器之间网络互通 可以访问外网,需要拉取镜像 禁止swap分区 角色 IP k8s-master1 192.168.4.114 k8s-master2

    2024年02月09日
    浏览(18)
  • 【云原生 | Kubernetes 系列】— 部署K8S 1.28版本集群部署(基于Containerd容器运行)

    主机名 IP地址 备注 k8s-master01 192.168.0.109 master k8s-node1 192.168.0.108 node1 k8s-node2 192.168.0.107 node1 k8s-node3 192.168.0.105 node1 1、主机配置 2、升级内核 3、配置内核转发以及过滤 4、安装ipset ipvsadm,IPVS(IP Virtual Server)是一个用于负载均衡的 Linux 内核模块,它可以用来替代 kube-proxy 默认的

    2024年02月20日
    浏览(55)
  • 解决containerd+k8s集群搭建镜像拉取不到的问题

    解决containerd+k8s集群搭建镜像拉取不到的问题

    之前我写了一篇containerd+k8s搭建集群的文章,文章地址: https://blog.csdn.net/m0_51510236/article/details/130842122 在上面这篇文章中有小伙伴给我反映镜像拉取不到的问题,现在我们就来解决这个问题 因为是对上一篇文章拉取不到镜像问题的解决,所以安装前的准备工作请参考上一篇文

    2024年02月09日
    浏览(9)
  • k8s containerd集群配置安装完整踩坑教程

    k8s containerd集群配置安装完整踩坑教程

    完整踩坑和精简内容 containerd安装参考 k8s安装参考 两台机器 系统 CentOS 7.9 1、关闭swap 2、网桥设置 3、ipvs设置 4、关闭防火墙 5、禁用selinux 6、添加源 在所有节点上执行 1、安装最新的kubectl kubelet kubeadm 2、安装containerd 安装 配置 重启 3、安装crictl 编写配置文件 下载镜像 mast

    2024年02月09日
    浏览(18)
  • Kubernetes[k8s] 最新版1.27.3安装教程,使用containerd模式

    公司使用的是交老的k8s版本(1.16),由于老版本的K8s对于现在很多新特性不支持,所以需要升级到新版本。目前2023年7月11日最新版本的k8s是v1.27.3。通过参考官方文档进行k8s部署工作。其中涉及到操作系统配置、防火墙配置、私有镜像仓库等。 推荐一个AI工具:态灵AI: chata

    2024年02月09日
    浏览(12)
  • Kubernetes[k8s] 最新版1.27.3 - 1.28.0安装教程,使用containerd模式

    公司使用的是交老的k8s版本(1.16),由于老版本的K8s对于现在很多新特性不支持,所以需要升级到新版本。目前2023年7月11日最新版本的k8s是v1.27.3。通过参考官方文档进行k8s部署工作。其中涉及到操作系统配置、防火墙配置、私有镜像仓库等。 推荐一个AI工具:态灵AI: chata

    2024年02月06日
    浏览(15)
  • K8s(Kubernetes)学习(二):k8s集群搭建

    K8s(Kubernetes)学习(二):k8s集群搭建

    minikube 只是一个 K8S 集群模拟器,只有一个节点的集群,只为测试用,master 和 worker 都在一起。 裸机安装 至少需要两台机器(主节点、工作节点个一台),需要自己安装 Kubernetes 组件,配置会稍微麻烦点。 缺点:配置麻烦,缺少生态支持,例如负载均衡器、云存储。 直接用

    2024年02月09日
    浏览(19)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包