k8s离线部署v1.28.0版本(基于docker容器)

news/2024/11/18 5:26:33/文章来源:https://www.cnblogs.com/sherq1989/p/18435401

1.环境配置

主机名  配置 磁盘大小  操作系统 ip地址
k8s-master
2c4g
50g
centos7.6
192.168.100.194
k8s-node1
2c4g
50g
centos7.6
192.168.100.195
k8s-node2
2c4g
50g
centos7.6
192.168.100.196
yum  
2c4g
50g  
centos7.6
192.168.100.201

 

 

 

 

 

2.必要环境准备

1)关闭防火墙

systemctl stop firewalld
systemctl disable firewalld
2)关闭selinux
setenforce 0 临时
sed -i 's/enforcing/disabled/' /etc/selinux/config 永久
3)关闭swap
swapoff -a临时
sed -ri 's/.*swap.*/#&/' /etc/fstab 永久
4)设置主机名
hostnamectl set-hostname k8s-master
hostnamectl set-hostname k8s-node1
hostnamectl set-hostname k8s-node2
5)master添加hosts
cat >> /etc/hosts << EOF
192.168.100.194 k8s-master
192.168.100.195 k8s-node1
192.168.100.196 k8s-node2
EOF
6)调整内核参数,三台服务器将桥接的ipv4流量传递到iptables链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system #生效
3.安装docker(3台都执行)--联网机器下载
--下载docker环境yum源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
--只下载不安装配置,创建本地yum仓库
yum install docker-ce --downloadonly --downloaddir=/var/www/html/docker 
createrepo  /var/www/html/docker
--3台yum客户端配置
[docker]
name=docker
baseurl=http://192.168.100.201/docker
gpgcheck=0
enabled=1
--3台yum客户端安装docker,不指定版本就是最新版
yum -y install docker-ce 
--配置docker加速和cggroupdriver
cat > /etc/docker/daemon.json << EOF
{"registry-mirrors": ["https://docker.m.daocloud.io"]
}
EOF
systemctl enable docker && systemctl start docker 设置开机自启并启动docker

4.安装cri-docker(docker与k8s通信的中程序:翻译官)

说明:从1.24版本开始k8s默认容器已经不是docker,如果要通过docker作为k8s的容器运行时需要安装组件,进行通信
# 下载
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm
# 安装
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
# 修改cri-docker镜像地址
vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9# 启动
systemctl enable cri-docker && systemctl start cri-docker

5.安装配置k8s的yum源

---在yum服务器(访问外网)下载不安装对应的包
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[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
---下载相关包到本地
yum list kubelet --showduplicate 查找对应的k8s版本,不指定则安装当前最新版本
yum install kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 --downloadonly --downloaddir=/var/www/html/k8s 
---创建本地yum仓库
createrepo  /var/www/html/k8s
---在3台服务器上配置yum客户端
[k8s]
name=k8s
baseurl=http://192.168.100.201/k8s
gpgcheck=0
enabled=1

6.安装kubctl、kubeadm、kubelet(3台都执行)

kubeadm:集群的初始化部署和升级
kubectl:命令行工具,用于向APIServer发送指令,创建pod等资源。
kubelet :是在每个节点上运行的代理,它负责接受主节点上的 API Server下放的指令和监控pod
yum install kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 -y 
systemctl enable kubelet 设置开机自启动
7.k8s镜像下载--联网机器下载
--获取需要下载镜像的列表
kubeadm config images list 

 

--镜像下载docker pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0
docker pull registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.0
docker pull registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.0
docker pull registry.aliyuncs.com/google_containers/kube-proxy:v1.28.0
docker pull registry.aliyuncs.com/google_containers/etcd:3.5.9-0
docker pull registry.aliyuncs.com/google_containers/coredns:v1.10.1
docker pull registry.aliyuncs.com/google_containers/pause:3.9--镜像压缩
docker save -o kube-apiserver.tar registry.aliyuncs.com/google_containers/kube-apiserver:v1.28.0
docker save -o kube-controller-manager.tar registry.aliyuncs.com/google_containers/kube-controller-manager:v1.28.0
docker save -o kube-scheduler.tar registry.aliyuncs.com/google_containers/kube-scheduler:v1.28.0
docker save -o kube-proxy.tar registry.aliyuncs.com/google_containers/kube-proxy:v1.28.0
docker save -o pause.tar registry.aliyuncs.com/google_containers/pause:3.9
docker save -o etcd.tar registry.aliyuncs.com/google_containers/etcd:3.5.9-0
docker save -o coredns.tar registry.aliyuncs.com/google_containers/coredns:v1.10.1--镜像加载docker load -i kube-apiserver.tar
docker load -i kube-controller-manager.tar
docker load -i kube-scheduler.tar
docker load -i kube-proxy.tar
docker load -i pause.tar
docker load -i etcd.tar
docker load -i coredns.tar

 8.部署k8s(master节点操作)

# apiserver-advertise-address  配置k8s apiserver地址,用于监听、响应其他节点请求
# --service-cidr=10.96.0.0/12 配置k8s Service的IP范围 
# --pod-network-cidr=10.244.0.0/16 配置k8s pod的IP范围
kubeadm init \--apiserver-advertise-address=192.168.100.194 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.28.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock \##--ignore-preflight-errors=all   #忽略错误,不然一直拉取外网镜像--安装成功后master节点执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

9.node节点加入到集群

kubeadm join 10.44.100.194:6443 --token 6xkje6.g53th6yjstzv79e2 --discovery-token-ca-cert-hash sha256:803c78010edaa35ab481e05a1493ed832294cbfb45982fe2f82314a499d2fe5a  --cri-socket unix:///var/run/cri-dockerd.sock  
token有效期24小时,过了后,重新生成token:
kubeadm token create --print-join-command    

此时,查看集群节点,还没ready,需要安装网络插件进行通信

 10.安装flannel网络插件,让node间通信

wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml  
cat kube-flannel.yml | grep image 下载所需镜像

docker pull docker.m.daocloud.io/flannel/flannel:v0.25.6
docker pull docker.m.daocloud.io/flannel/flannel-cni-plugin:v1.5.1-flannel2
保存镜像到tar包 docker save -o flannel_v0.25.6.tar docker.m.daocloud.io/flannel/flannel:v0.25.6 docker save -o flannel-cni-plugin_v1.5.1-flannel2.tar docker.m.daocloud.io/flannel/flannel-cni-plugin:v1.5.1-flannel2 导入镜像-所有节点 docker load -i flannel_v0.25.6.tar docker load -i flannel-cni-plugin_v1.5.1-flannel2.tar
安装flannel
kubectl apply -f kube-flannel.yml

查看最终的成功状态

 

附安装中的错误处理:

1)init初始化报错

[ERROR CRI]: container runtime is not running: output: time="2024-09-24T09:56:19+08:00" level=fatal msg="validate service connection: CRI v1 runtime API is not implemented for endpoint "unix:///var/run/containerd/containerd.sock": rpc error: code = Unimplemented desc = unknown service runtime.v1.RuntimeService"
原因:k8s自从v1.24后,默认容器运行时改成了containerd,containerd是一个CRI(containner runtime interface)组件,在容器运行时调用containerd组件来创建、运行、销毁容器
解决:disabled_plugins = ["cri"] 改为 disabled_plugins = []  &&然后重启systemctl restart containerd 
2)k8s安装失败后的重置
kubeadm reset
rm -rf /etc/kubernetes/*
rm -rf /root/.kube
3)Found multiple CRI endpoints on the host. Please define which one do you wish to use by setting the 'criSocket'
原因: 表明在环境中有多个容器运行时接口(containner runtime interface),k8s不确定用哪一个
解决:在kubeadm init时指定要使用的cri端点 --cri-socket unix:///var/run/cri-dockerd.sock
4)部署flannel 提示Init:ImagePullBackOff
原因:拉取失败,连接不到docker.io
编辑kube-flannel.yml文件,把image字段对应的docker.io改为docker.m.daocloud.io
重新部署:kubectl delete -f kube-flannel.yml&&kubectl apply -f kube-flannel.yml
5)从节点执行kubectl命令提示
E0927 09:56:12.002974 22410 memcache.go:265] couldn't get current server API group list: Get "http://localhost:8080/api?timeout=32s": dial tcp [::1]:8080: connect: connection refused
原因:k8s默认从~/.kube/config 配置文件获取访问kube-apiserver地址、证书、用户名等信息,如果没有配置文件会默认读取默认值localhost:8080,而本机的localhost:8080没有服务报错。
解决办法:mkdir ~/.kube
cp /etc/kubernetes/kubelet.conf ~/.kube/config

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

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

相关文章

NSSM:简化Windows服务配置,提升系统维护效率

NSSM:简化Windows服务配置,提升系统维护效率 在Windows系统环境中,服务的配置与管理是一项复杂而重要的任务。传统的服务管理方式往往涉及繁琐的步骤,不仅效率低下,还容易出错。然而,随着NSSM(Non-Sucking Service Manager)这一强大工具的出现,Windows服务的配置与管理…

全选和反选

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><title>Document</title> </head><body><input type="checkbox" id="d1">全选/反选<br><form action…

pbootcms提示“提交失败,请使用POST方式提交”

当你将在线留言栏目的URL名称设置为message时,这个名称与PbootCMS系统的保留关键字冲突。PbootCMS系统会默认执行与message相关的控制器,而不是你期望的在线留言表单提交逻辑。 PbootCMS系统的保留关键字 PbootCMS系统中有一些保留关键字,这些关键字不能用作URL名称。以下是…

【20zr提高组十连测day10】信

无。【20zr提高组十连测day10】信 给定 \(n,m\),\(n,m\le 10^5\),给定分别长度为 \(n-1,m,n,m-1\) 的单调不减的序列 \(A,B,C,D\),然后形如该图建边:考虑到序列是递增的,对于除最左上角以外的每个点,每个点一定要选和自己相连的一条边才能形成一棵树。那么选择左边或上边…

自动加载类文件时发生错误,类名【core\\basic\\Kernel】

当你使用PbootCMS时遇到了自动加载类文件时发生的错误,具体错误信息如下:自动加载类文件时发生错误,类名【core\\basic\\Kernel】这个问题通常是由于Kernel.php文件丢失或被误删除导致的。特别是在阿里云虚拟主机环境下,可能会因为安全策略而删除某些文件。以下是详细的解决…

算法与数据结构——归并排序

归并排序 归并排序(merge sort)是一种基于分治策略的排序算法,包含下图所示的“划分”和“合并”阶段。划分阶段:通过递归不断地将数组从中点处分开,将长数组的排序问题转换为短数组的排序问题。 *合并阶段**:当子数组长度为1时终止划分,开始合并,持续地讲左右两个较短…

[ABC274G] Security Camera 3

无。[ABC274G] Security Camera 3 给你一个 \(n\times m\) 的网格图,\(n,m\le 300\),每个空地上可以放任意多个任意方向的监控,一个监控视野覆盖对应方向最长连续空地,问监控覆盖所有空地最小化监控数量。 对于一个极长的连续空地,我们一定是在边边放置一个监控,而且两边…

java窗口登录界面实现随机验证码

创建窗口内容及验证码更换 代码示例: package frame; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class Jframe…

九月二十五

在上面的代码中 Size s=Size.SMALL;:声明了一个Size类型的变量s,并将其初始化为枚举Size的SMALL常量。 Size t=Size.LARGE;:声明了一个Size类型的变量t,并将其初始化为枚举Size的LARGE常量。 System.out.println(st);:比较两个枚举变量s和t是否引用同一个对象。由于它们引…

manim边学边做--图形间集合关系

几何图形间的集合关系,是数学和几何学中的一个基本概念, 通过计算不同形状(如圆形、矩形、三角形等)的交集和并集等关系,可以实现复杂的图形处理和视觉效果。 manim中提供了4种计算几何形状间集合关系的模块:Difference:从形状A中减去与形状B相交的部分 Exclusion:减去…

【VMware ESXi】使用 esxtop 杀死 ESXi 主机中卡死和不响应的虚拟机。

最近在家里的 Homelab 主机上进行 VMware Cloud Foundation 相关测试,由于 CPU 超负荷使用,某个别虚拟机时不时的会出现卡死和不响应等现象,进而导致了测试的失败并影响了相关实验的进度。比如,下图所示的嵌套 ESXi 虚拟机,本来运行好好的,由于资源不足,该虚拟机便出现了…