ubuntu 20.4安装k8s 1.24.0、1.28.0(使用containerd)

这篇具有很好参考价值的文章主要介绍了ubuntu 20.4安装k8s 1.24.0、1.28.0(使用containerd)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

环境:ubuntu20.4 、k8s 1.24、containerd
本篇来讲解如何在ubuntu20.4下使用kubeadm安装部署k8s 1.24集群,经过验证,部署1.28.0版本本文档依然合适。

服务器初始化、环境准备

准备3台虚拟机,1个master,2个node节点。

主机 说明
192.168.118.145 master节点,能连外网,ubuntu 20.04版本,至少2核CPU,2G内存
192.168.118.146 node1节点,能连外网,ubuntu 20.04版本,至少2核CPU,2G内存
192.168.118.147 node2节点,能连外网,ubuntu 20.04版本,至少2核CPU,2G内存

3台主机都根据实际情况做如下6大步骤配置

注意:3台虚拟机使用的都是root账号,所以命令前面均没有加sudo 命令

# 1、关闭防火墙
#ufw查看当前的防火墙状态:inactive状态是防火墙关闭状态 active是开启状态
ufw status
#启动、关闭防火墙
ufw disable

# 2、禁用selinux
#默认ubunt默认是不安装selinux的,如果没有selinux命令和配置文件则说明没有安装selinux,则下面步骤就不用做了
sed -ri 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 
setenforce 0

#3、关闭swap分区(必须,因为k8s官网要求)
#注意:最好是安装虚拟机时就不要创建swap交换分区**
sed -ri 's/.*swap.*/#&/' /etc/fstab
swapoff -a

# 4、设置主机名
cat >> /etc/hosts <<EOF
192.168.118.145 master
192.168.118.146 node1
192.168.118.147 node2
EOF

# 5、时间同步
#查看时区,时间
date
#先查看时区是否正常,不正确则替换为上海时区
timedatectl set-timezone Asia/Shanghai
#安装chrony,联网同步时间
apt install chrony -y && systemctl enable --now chronyd

# 6、将桥接的IPv4流量传递到iptables的链
#(有一些ipv4的流量不能走iptables链,因为linux内核的一个过滤器,每个流量都会经过他,然后再匹配是否可进入当前应用进程去处理,所以会导致流量丢失),配置k8s.conf文件(k8s.conf文件原来不存在,需要自己创建的)

touch /etc/sysctl.d/k8s.conf
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
vm.swappiness=0
EOF
sysctl --system

# 7、设置服务器之间免密登陆(3台彼此之间均设置)
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.118.146
ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.118.147
ssh node1
ssh node2

使用kubeadm安装k8s(本篇讲解使用kubeadm安装k8s)

以上6大步骤在每一台虚拟机做完之后,开始安装k8s。本篇讲解使用kubeadm安装k8s),kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署。

1、创建一个master节点,kubeadm init。
2、将node节点加入kubernetes集群,kubeadm join <master_IP:port >

步骤一、安装containerd

(在所有节点服务器上都执行,因为k8s 1.24版本默认CRI为containerd,cri称之为容器运行时插件)
containerd的官网:https://containerd.io/downloads/
containerd官网安装教程:https://github.com/containerd/containerd/blob/main/docs/getting-started.md,官网安装文档提供了源码包安装和普通的yum、apt-get安装,这里使用源码包安装。

#安装containerd
wget -c https://github.com/containerd/containerd/releases/download/v1.6.8/containerd-1.6.8-linux-amd64.tar.gz
tar -xzvf containerd-1.6.8-linux-amd64.tar.gz 
#解压出来一个bin目录,containerd可执行文件都在bin目录里面
mv bin/* /usr/local/bin/

#使用systemcd来管理containerd
wget https://raw.githubusercontent.com/containerd/containerd/main/containerd.service 
mv containerd.service  /usr/lib/systemd/system/
systemctl daemon-reload && systemctl enable --now containerd 
systemctl  status containerd

#安装runc
#runc是容器运行时,runc实现了容器的init,run,create,ps...我们在运行容器所需要的cmd:
curl -LO https://github.com/opencontainers/runc/releases/download/v1.1.1/runc.amd64 && \
install -m 755 runc.amd64 /usr/local/sbin/runc

#安装 CNI plugins
wget -c https://github.com/containernetworking/plugins/releases/download/v1.1.1/cni-plugins-linux-amd64-v1.1.1.tgz
#根据官网的安装步骤来,创建一个目录用于存放cni插件
mkdir -p /opt/cni/bin
tar -xzvf  cni-plugins-linux-amd64-v1.1.1.tgz -C /opt/cni/bin/

#修改containerd的配置,因为containerd默认从k8s官网拉取镜像
#创建一个目录用于存放containerd的配置文件
mkdir -p /etc/containerd
#把containerd配置导出到文件
containerd config default | sudo tee /etc/containerd/config.toml
#修改配置文件
vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.2"	 #搜索sandbox_image,把原来的k8s.gcr.io/pause:3.6改为"registry.aliyuncs.com/google_containers/pause:3.2" 
SystemdCgroup = true						#搜索SystemdCgroup,把这个false改为true		
config_path = "/etc/containerd/certs.d"		#搜索config_path,配置镜像加速地址(这是一个目录下面创建)

#创建镜像加速的目录 
mkdir /etc/containerd/certs.d/docker.io -pv
#配置加速
cat > /etc/containerd/certs.d/docker.io/hosts.toml << EOF
server = "https://docker.io"
[host."https://b9pmyelo.mirror.aliyuncs.com"]
  capabilities = ["pull", "resolve"]
EOF

#加载containerd的内核模块
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter

#重启containerd
systemctl restart containerd 
systemctl status containerd
#拉取镜像,测试containerd是否能创建和启动成功
ctr i pull docker.io/library/nginx:alpine		#能正常拉取镜像说明没啥问题
ctr images ls									#查看镜像
ctr c create --net-host docker.io/library/nginx:alpine nginx #创建容器
ctr task start -d nginx							#启动容器,正常说明containerd没啥问题
ctr containers ls 								#查看容器
ctr tasks kill -s SIGKILL  nginx				#终止容器
ctr containers rm nginx							#删除容器

步骤二、配置kubernetes的阿里云apt源(所有节点服务器都需要执行)

#更改源,ubuntu 20.04(focal) (选做)
cp /etc/apt/sources.list /etc/apt/sources.list.backup
cat > /etc/apt/sources.list <<EOF			
deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
apt update
apt install apt-transport-https ca-certificates -y
apt install vim lsof net-tools zip unzip tree wget curl bash-completion pciutils gcc make lrzsz tcpdump bind9-utils -y 
# 编辑镜像源文件,文件末尾加入阿里云k8s镜像源配置
echo 'deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main' >> /etc/apt/sources.list
#更新证书
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add
#更新源
apt update

步骤三、yum安装kubeadm、kubelet、kubectl(所有节点都执行)

#在3台虚拟机上都执行安装kubeadm、kubelet、kubectl
#查看apt可获取的kubeadm版本,这里安装1.24.0版本,不指定版本的话默认安装最新版本
apt-cache madison  kubeadm
#在所有节点上安装kubeadm、kubelet、kubectl
apt install -y kubelet=1.24.0-00 kubeadm=1.24.0-00 kubectl=1.24.0-00
#设置kubelet开机自启(先不用启动,也起不了,后面kubeadm init初始化master时会自动拉起kubelet)
systemctl enable kubelet

步骤四、初始化master节点的控制面板

#列出所需镜像,可以提前拉取镜像
kubeadm  config images list --kubernetes-version=v1.28.0 --image-repository=registry.aliyuncs.com/google_containers
kubeadm  config images pull --kubernetes-version=v1.28.0 --image-repository=registry.aliyuncs.com/google_containers
#下载的镜像默认存放在containerd的k8s.io命名空间
#kubeadm init --help可以查看命令的具体参数用法
kubeadm init \
--apiserver-advertise-address=192.168.118.145 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.24.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16
#最后kubeadm init初始化成功,提示信息如下:
Your Kubernetes control-plane has initialized successfully!
To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config
Alternatively, if you are the root user, you can run:
  export KUBECONFIG=/etc/kubernetes/admin.conf
You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
  https://kubernetes.io/docs/concepts/cluster-administration/addons/
Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.118.145:6443 --token nrefdp.2mtcwkkshizkj1qa \
	--discovery-token-ca-cert-hash sha256:564dbb8ec1993f3e38f3b757c324ad6190950156f30f89f7f7d4b244d2b29ec7 

#我们根据输入的提示信息复制粘贴照着做即可
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf

步骤五、将node节点加入k8s集群

在步骤四初始化完成master节点之后会提示你在node节点执行如下的命令来将node节点加入k8s集群,如下所示,复制它到node节点执行即可;
注意:这段kubeamd join命令的token只有24h,24h就过期,需要执行kubeadm token create --print-join-command 重新生成。

#node节点执行
kubeadm join 192.168.118.145:6443 --token nrefdp.2mtcwkkshizkj1qa \
        --discovery-token-ca-cert-hash sha256:564dbb8ec1993f3e38f3b757c324ad6190950156f30f89f7f7d4b244d2b29ec7

步骤六、部署容器网络,CNI网络插件

#下载calico
wget https://docs.projectcalico.org/manifests/calico.yaml
#编辑文件,找到下面这两句,去掉注释,修改ip为当前你设置的pod ip段
vim calico.yaml
- name: CALICO_IPV4POOL_CIDR
  value: "10.244.0.0/16"
#镜像拉取没有问题的话最好
kubectl apply -f calico.yaml 	
calico镜像拉取出现问题

(k8s 1.28.0无此问题,不知道是不是因为部署1.28版本是containerd配置文件没有配置镜像加速器的原因)
calico的镜像总是拉取不下来,报错如下:

Dec 02 21:58:49 node2 containerd[7285]: time="2022-12-02T21:58:49.627179374+08:00" level=error msg="Failed to handle backOff event &ImageCreate{Name:docker.io/calico/cni:v3.24.5,Labels:map[string]string{io.cri-containerd.image: managed,},XXX_unrecognized:[],} for docker.io/calico/cni:v3.24.5" error="update image store for \"docker.io/calico/cni:v3.24.5\": get image info from containerd: get image diffIDs: unexpected media type text/html for sha256:0238205317023105e6589e4001e2a3d81b84c71740b0d9563f6157ddb32c4ea4: not found"
Dec 02 21:58:50 node2 containerd[7285]: time="2022-12-02T21:58:50.627858264+08:00" level=info msg="ImageCreate event &ImageCreate{Name:docker.io/calico/kube-controllers:v3.24.5,Labels:map[string]string{io.cri-containerd.image: managed,},XXX_unrecognized:[],}"
Dec 02 21:58:50 node2 containerd[7285]: time="2022-12-02T21:58:50.627954441+08:00" level=error msg="Failed to handle backOff event &ImageCreate{Name:docker.io/calico/kube-controllers:v3.24.5,Labels:map[string]string{io.cri-containerd.image: managed,},XXX_unrecognized:[],} for docker.io/calico/kube-controllers:v3.24.5" error="update image store for \"docker.io/calico/kube-controllers:v3.24.5\": get image info from containerd: get image diffIDs: unexpected media type text/html for sha256:0238205317023105e6589e4001e2a3d81b84c71740b0d9563f6157ddb32c4ea4: not found"
Dec 02 21:59:01 node2 containerd[7285]: time="2022-12-02T21:59:01.446288924+08:00" level=info msg="Events for \"docker.io/calico/cni:v3.24.5\" is in backoff, enqueue event &ImageDelete{Name:docker.io/calico/cni:v3.24.5,XXX_unrecognized:[],}"

使用ctr命令能正常拉取下来,但是使用ctr拉取下来的镜像即使放到了k8s.io命名空间,仍是不能使用的:

ctr  -n k8s.io i pull  docker.io/calico/cni:v3.24.5 
ctr  -n k8s.io i pull  docker.io/calico/kube-controllers:v3.24.5
ctr  -n k8s.io i pull  docker.io/calico/node:v3.24.5

必须要使用crictl 命令拉取的镜像,k8s才能使用,这一点有待研究,但是使用crictl 命令总是报错:

crictl pull  docker.io/calico/cni:v3.24.5 
crictl pull docker.io/calico/kube-controllers:v3.24.5
crictl pull  docker.io/calico/node:v3.24.5

crictl   pull  docker.io/calico/node:v3.24.5		#总是报这种错误
E1202 21:25:47.261446    7560 remote_image.go:242] "PullImage from image service failed" err="rpc error: code = NotFound desc = failed to pull and unpack image \"docker.io/calico/node:v3.24.5\": failed to unpack image on snapshotter overlayfs: unexpected media type text/html for sha256:0c95980b6412e81bd466d0f2f7846f828c62417db9880081fef92f3b9d9d11f5: not found" image="docker.io/calico/node:v3.24.5"
FATA[0008] pulling image: rpc error: code = NotFound desc = failed to pull and unpack image "docker.io/calico/node:v3.24.5": failed to unpack image on snapshotter overlayfs: unexpected media type text/html for sha256:0c95980b6412e81bd466d0f2f7846f828c62417db9880081fef92f3b9d9d11f5: not found 
解决办法:
尝试将
vim  /etc/containerd/certs.d/docker.io/hosts.toml 
server = "https://docker.io"
[host."https://xxxmyelo.mirror.aliyuncs.com"]		#这个配置为自己阿里云的镜像加速地址
  capabilities = ["pull", "resolve"]
root@node2:~# systemctl  stop  containerd.service && systemctl  start  containerd.service 
还是不行。

听网友说,删掉了步骤一中的配置的containerd镜像加速器
[plugins."io.containerd.grpc.v1.cri".registry]
     config_path = ""			#改回空地址

root@node2:~# systemctl  stop  containerd.service && systemctl  start  containerd.service 
居然可以了,这是为什么呢,百思不得其解,反正现在是正常了,calico的镜像能正常拉取了。

步骤七、配置kubectl命令自动补全

# kubectl 配置命令自动补全,master节点配置即可
apt install -y bash-completion
echo 'source /usr/share/bash-completion/bash_completion' >> ~/.bashrc
echo 'source  <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
kubectl describe nodes

步骤八、测试k8s集群

在k8s中创建一个pod,验证是否正常运行:文章来源地址https://www.toymoban.com/news/detail-760044.html

#创建一个httpd服务测试
kubectl create deployment httpd --image=httpd
#暴露服务,端口就写80,如果你写其他的可能防火墙拦截了
kubectl expose deployment httpd --port=80 --type=NodePort
#查看pod是否是Running状态,查看service/httpd的端口
kubectl get pod,svc
NAME                         READY   STATUS    RESTARTS   AGE
pod/httpd-757fb56c8d-w42l5   1/1     Running   0          39s
NAME                 TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/httpd        NodePort    10.109.29.1   <none>        80:32569/TCP   42s			#外部端口32569
service/kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        3h22m

#网页测试访问,使用master节点的IP或者node节点的IP都可以访问,端口就是32569
http://192.168.118.145:32569/
It works!							#成功了

到了这里,关于ubuntu 20.4安装k8s 1.24.0、1.28.0(使用containerd)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • K8S的安装(Ubuntu 20.04)

    前言 本文介绍如何在ubuntu上部署k8s集群,大致可以分为如下几个步骤: 修改ubuntu配置 安装docker 安装kubeadm、kubectl以及kubelet 初始化master节点 将slave节点加入网络 如果你对上面的某些名字感到陌生,没关系,下文会一一进行讲解,如果你想先了解一下 docker 和 k8s,可以参考

    2024年02月15日
    浏览(33)
  • 新版K8s:v1.28拉取Harbor仓库镜像以及本地镜像(docker弃用改用containerd,纯纯踩坑)

    使用Kuboard作为k8s集群的管理平台,Harbor作为镜像仓库,拉取Harbor镜像仓库的镜像运行。 从K8s1.24版本之后,k8s就逐渐弃用了docker,采用containerd来管理,这个很重要。 服务器 IP地址 备注 K8sMaster 192.168.2.138 kuboard,Master管理节点 K8sWorker01 192.168.2.139 Worker工作节点 K8sWorker02 192.168.

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

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

    2024年02月09日
    浏览(45)
  • k8s1.27.x 最新版本使用kubeadm 的containerd的方式安装

    一:k8s1.27.x 的概述 太平洋时间 2023 年 4 月 11 日,Kubernetes 1.27 正式发布。此版本距离上版本发布时隔 4 个月,是 2023 年的第一个版本。 新版本中 release 团队跟踪了 60 个 enhancements,比之前版本都要多得多。其中 13 个功能升级为稳定版,29 个已有功能进行优化升级为 Beta,另有

    2024年02月09日
    浏览(44)
  • k8s+containerd安装

    准备两台服务器节点,如果需要安装虚拟机,可以参考《wmware和centos安装过程》 机器名 IP 角色 CPU 内存 centos01 192.168.109.130 master 4核 2G centos02 192.168.109.131 node 4核 2G 设置主机名,所有节点都执行 关闭防火墙,所有节点都执行 关闭swap内存,所有节点都执行 配置网桥,所有节点

    2024年02月15日
    浏览(38)
  • 【C站首发】全网最新Kubernetes(K8s)1.28版本探秘及部署 基于Containerd容器运行时(100年证书kubeadm)

    序号 操作系统及版本 备注 1 CentOS7u9 需求 CPU 内存 硬盘 角色 主机名 值 8C 8G 1024GB master k8s-master01 值 8C 16G 1024GB worker(node) k8s-worker01 值 8C 16G 1024GB worker(node) k8s-worker02 1.3.1 主机名配置 由于本次使用3台主机完成kubernetes集群部署,其中1台为master节点,名称为k8s-master01;其中2台为wor

    2024年02月08日
    浏览(62)
  • [k8s] 基于ubuntu22部署k8s1.28记录

    k8s1.28部署已经不依赖docker了,所以不需要安装docker。同理:如果想查看镜像和运行容器,也不能用docker命令去查询了:需要使用crictl。不过crictl命令参数兼容docker,所以使用上手没有啥难度。 根据k8s官方文档:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kube

    2024年02月11日
    浏览(47)
  • 云原生Kubernetes:K8S集群实现容器运行时迁移(docker → containerd) 与 版本升级(v1.23.14 → v1.24.1)

    目录 一、理论 1.K8S集群升级 2.环境 3.升级策略 4.master1节点迁移容器运行时(docker → containerd)  5.master2节点迁移容器运行时(docker → containerd)  6.node1节点容器运行时迁移(docker → containerd)  7.升级集群计划(v1.23.14 → v1.24.1) 8.升级master1节点版本(v1.24.1) 9.升级master2节点版本

    2024年02月03日
    浏览(66)
  • k8s集群网络插件搭建——————解决集群notready(k8s1.20版本,docker24)

            前面已经提到,在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是“NotReady”。但是通过 kubeadm join 加入的 node 节点已经在k8s-master 上可以看到。  那么,这个时候我们该怎么办呢???????? 安装flannel         Master 节点

    2024年02月13日
    浏览(39)
  • K8S单Master集群安装(Containerd)

    原创文档编写不易,未经许可请勿转载。文档中有疑问的可以邮件联系我。 邮箱:yinwanit@163.com 文章基于CentOS 7.8系统使用Containerdr作为容器运行时通过kubeadm指导搭建k8s单机master集群,使用calico作为k8s集群的网络插件。K8S官方在1.24版本彻底弃用docker。 需要服务器可以联网。

    2024年02月05日
    浏览(39)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包