k8s集群离线部署

news2024/9/25 13:26:09

K8s离线部署

环境

在这里插入图片描述

目标

k8s离线部署

步骤

部署docker

详情见文章:《离线安装docker及后端项目离线打包》
https://blog.csdn.net/qq_45371023/article/details/140279746?spm=1001.2014.3001.5501
所用到的所有文件在:
链接:https://pan.baidu.com/s/10cb-dXkgdShdjPEBCyvTrw?pwd=fpuy
提取码:fpuy

安装cri_dockerd

1、安装cri_dockerd

rpm -ivh cri-dockerd-0.3.9-3.el8.x86_64.rpm
在这里插入图片描述

2、重载系统守护进程→设置cri-dockerd自启动→启动cri-dockerd

重载系统守护进程

sudo systemctl daemon-reload

设置cri-dockerd自启动

sudo systemctl enable cri-docker.socket cri-docker

启动cri-dockerd

sudo systemctl start cri-docker.socket cri-docker

sudo systemctl status cri-docker.socket

sudo systemctl status cri-docker

在这里插入图片描述

问题:启动cri-docker失败

在这里插入图片描述

措施:

方法一:systemctl restart docker # 重启docker

方法二:卸载docker重新安装,重新执行以上步骤

*安装Kubernetes

安装kubectl

1、安装kubectl

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

2、检测是否安装完成

kubectl version --client

在这里插入图片描述

安装kubeadm

3、开放端口或关闭防火墙(用于确保安装过程顺利)

开放端口(云服务器)

开启6443端口

sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent

重新加载防火墙

sudo firewall-cmd --reload

查看所有开放的端口

sudo firewall-cmd --zone=public --list-ports

或关闭防火墙(虚拟机)

关闭防火墙

sudo systemctl stop firewalld

关闭防火墙自启动

sudo systemctl disable firewalld

4、禁用SELinux(确保容器能够访问系统资源)

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

5、安装 kubeadm、kubelet 和 kubectl

相关离线安装包一下载rpm格式,存在于3_yum_package下,使用命令安装目录下所有rpm安装包

cd 3_yum_package && rpm -ivh *.rpm

在这里插入图片描述

6、设置kubelet自启动

sudo systemctl enable --now kubelet

在这里插入图片描述

*部署k8s集群

以上步骤完成后,具备以下环境

·两台ip不相同的服务器或虚拟机,能够互相通信,保持局域网状态,ip设为192.168..34和192.168..35

·两台server上都安装了容器运行时(Docker+cri_dockerd),已经安装kubernetes组件kubectl、kubeadm和kubelet。

环境准备

7、关闭swap分区,这里分为临时关闭和永久关闭,虚拟机环境推荐永久关闭,因为会经常开关机,反之云环境推荐临时关闭。

临时关闭swap分区

swapoff -a

永久关闭swap分区,注释掉fstab中包含swap的这一行即可

vi /etc/fstab

# /dev/mapper/centos-swap swap swap defaults 0 0

重启使其生效,重启可能导致cri-dockerd状态发生变化,实际部署中我没有选择重启,原因猜测是由于版本或配置没配好,可以通过重装docker与cri-dockerd再启动cri-dockerd使cri-dockerd状态正常

reboot

8、安装runc作为k8s运行环境

安装runc

sudo install -m 755 runc.amd64 /usr/local/bin/runc

# 检查是否安装成功

runc -v

在这里插入图片描述

9、Docker和cri-dockerd设置国内镜像加速(由于本次文件夹中以下要用到的软件包名称带有镜像地址,即使是局域网也建议配置相应镜像加速,防止安装完成后kubectl要求联网拉取软件包而忽略本地镜像

sudo tee /etc/docker/daemon.json <<-'EOF'

{

 "registry-mirrors": ["https://tsvqojsz.mirror.aliyuncs.com"]

}

EOF

\# 找到第10行

vi /usr/lib/systemd/system/cri-docker.service

\# 修改为ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9

重启Docker组件

systemctl daemon-reload && systemctl restart docker cri-docker.socket cri-docker

# 检查Docker组件状态

systemctl status docker cir-docker.socket cri-docker

10、检查hostname以及hosts

主节点

hostname为k8s-master

vi /etc/hostname

添加域名映射

echo "192.168.**.35 k8s-slave01">> /etc/hosts

其他node

hostname为k8s-slave01

vi /etc/hostname

添加域名映射

echo "192.168.**.34 k8s-master" >> /etc/hosts

11、转发IPv4并让iptables看到桥接流

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf

overlay

br_netfilter

EOF

 

sudo modprobe overlay

sudo modprobe br_netfilter

设置所需的 sysctl 参数,参数在重新启动后保持不变

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf

net.bridge.bridge-nf-call-iptables = 1

net.bridge.bridge-nf-call-ip6tables = 1

net.ipv4.ip_forward          = 1

EOF

# 应用 sysctl 参数而不重新启动

sudo sysctl --system

 

lsmod | grep br_netfilter

lsmod | grep overlay

 

sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward

# 如果init时仍提示iptables错误请执行

echo "1">/proc/sys/net/bridge/bridge-nf-call-iptables

echo "1">/proc/sys/net/ipv4/ip_forward

初始化控制平面节点/master

12、初始化主节点

在初始化之前需要通过kubeadm config images获得初始化需要的docker镜像:

在这里插入图片描述

安装镜像docker load -i **.tar

相关镜像文件存在5_kubeadm-images中。

执行初始化:

kubeadm init --node-name=k8s-master list--image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.**.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

–image-repository=registry.aliyuncs.com/google_containers # 将下载容器镜像源替换为阿里云,否则因为网络原因会导致镜像拉不下来,一定会执行不成功。

–cri-socket=unix:///var/run/cri-dockerd.sock # 这是指定容器运行时,因为containerd也是Docker的组件之一,下载Docker会一并将containerd下载下来,在执行初始化时当Kubernetes检测到有多个容器运行时环境,就必须要手动选择一个。这里也可以看出containerd实际上比Docker更轻量得多。

–apiserver-advertise-address=192.168.56.50 # 为API server设置广播地址,这里选择本机的ipv4地址,这里不希望API SERVER设置在其他node上的话就不要改为其他地址。

–pod-network-cidr=10.244.0.0/16 # 指明 pod 网络可以使用的 IP 地址段,暂时不清楚的可以先不管就用这个值。

–service-cidr=10.96.0.0/12 # 为服务的虚拟 IP 地址另外指定 IP 地址段,暂时不清楚的可以先不管就用这个值。

问题:cordns:v1.10.1检查不存在,实际上cordns:v1.10.1已存在,但是是cordns:1.10.1。

在这里插入图片描述

措施:修改cordns的tag。

docker tag registry.aliyuncs.com/google_containers/coredns:1.10.1 registry.aliyuncs.com/google_containers/coredns:v1.10.1

重新执行初始化命令

在这里插入图片描述

记录kubeadm join下面的信息,node join时需要,以上示例的相关信息是:

kubeadm join 192.168.51.34:6443 --token 1qtv3k.p8tfvdcds6x5ichf \

​    --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26

如果忘记了可以使用kubeadm token list查询,该token存在24h,重新创建kubeadm token create --print-join-command,删除使用kubeadm token delete tokenid。

非root用户请执行

mkdir -p $HOME/.kube

sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

sudo chown $(id -u):$(id -g) $HOME/.kube/config

root用户直接执行

临时生效,重启后失效,不推荐。

export KUBECONFIG=/etc/kubernetes/admin.conf 

永久生效,执行kubeadm reset后再次init也无需再次执行这条命令

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile 

执行永久生效命令之后需要source一下使其生效

source ~/.bash_profile

检测配置是否生效

echo $KUBECONFIG 

/etc/kubernetes/admin.conf

13、安装配置网络插件

这里使用flannel,将kube-flannel.yml文件下载并上传到server上。

将相关镜像上传到server上安装。kube-flannel.yml和镜像文件存在于6_kube-flannel中。

查询网卡

ifconfig

在这里插入图片描述

kube-flannel.yml默认会找enp1s0网卡,本次示例中34的网卡为enp1s0,无需修改,35的网卡为enp4s0。

//修改35的kube-flannel.yml,添加–iface=enp0s3进行指定(这里的enp0s3是ip对应的网卡,例如上图框中部分)。参数位置如下:

container:

  ......

  command:

  - /opt/bin/flanneld

  arg:

  - --ip-masq

  - --kube-subnet-mgr

  - --iface=enp4s0

为Kubernetes配置flannel网络插件

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml

在这里插入图片描述

cat /run/flannel/subnet.env

# 没有这个文件或文件夹的话则需要手动创建,内容同下

FLANNEL_NETWORK=10.244.0.0/16

FLANNEL_SUBNET=10.244.0.1/24

FLANNEL_MTU=1450

FLANNEL_IPMASQ=true

Node节点加入Master

14、Node节点加入Master

14.1、将主节点机器中的/etc/kubernetes/admin.conf拷贝到从节点机器中

scp /etc/kubernetes/admin.conf 192.168.56.51:/etc/kubernetes/

# 不要忘记将admin.conf加入环境变量,这里直接使用永久生效。

echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile

source ~/.bash_profile

拷贝时如果出现问题:

ECDSA host key for 192.168.55.187 has changed and you have requestd strict checking.Host key verification failed.

执行以下语句进行修复

ssh-keygen -R 192.168.55.187

14.2、执行join指令(初始化主节点成功后,会给出join命令)

例如:

kubeadm join 192.168.51.34:6443 --token by7t4x.da3f98dzrvjylykz --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

在这里插入图片描述

14.3、执行kubectl get nodes

在这里插入图片描述

k8s集群部署成功!!!

问题

问题一

kubectl get nodes

在这里插入图片描述

措施:检查swap是否关闭;检查防火墙是否开启6443端口

关闭swap

在这里插入图片描述

临时关闭防火墙

在这里插入图片描述

成功

在这里插入图片描述

问题二

kubectl get nodes

向集群添加k8s节点后查看该节点状态为NotReady

在这里插入图片描述

措施:

systemctl restart kubelet.service

systemctl restart docker.service

重启kubelet和docker

在这里插入图片描述

问题三

kubeadm join 192.168.51.34:6443 --token l2qlvh.and3fnjmzecueu9h --discovery-token-ca-cert-hash sha256:90afb5751086aabf7ac90d9e77a946eb768d47ffaaead62243264641954a5e26 --cri-socket unix:///var/run/cri-dockerd.sock

将子节点加入k8s集群中时出现初始化超时的情况

在这里插入图片描述
措施:

kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock

在这里插入图片描述

成功

在这里插入图片描述

在这里插入图片描述

问题四

将主节点机器中的/etc/kubernetes/admin.conf拷贝到从节点机器中

scp /etc/kubernetes/admin.conf 192.168.55.187:/etc/kubernetes/

如果拷贝文件失败时,报错如下:

ECDSA host key for 192.168.55.187 has changed and you have requestd strict cheching.

Host key verification failed.

执行以下语句进行修复

ssh-keygen -R 192.168.55.187

快速删除

kubectl delete node k8s-slave01
kubectl delete node k8s-slave02
kubectl delete node k8s-master

从节点

rm -rf /etc/kubernetes/*
kubeadm reset --cri-socket unix:///var/run/cri-dockerd.sock

主节点

rm -rf /etc/kubernetes/*
rm -rf ~/.kube/*
rm -rf /var/lib/etcd/*
kubeadm reset -f --cri-socket unix:///var/run/cri-dockerd.sock

如果需要就要重新初始化k8s集群

kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.51.34 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12

主节点

kubectl apply -f /data/k8s/6_kube-flannel/kube-flannel.yml
kubectl get pod -A

主节点

scp /etc/kubernetes/admin.conf 192.168.51.35:/etc/kubernetes/
scp /etc/kubernetes/admin.conf 192.168.51.36:/etc/kubernetes/

从节点

kubeadm join 192.168.51.34:6443 --token 1k9kdy.dvn2qbtd7rjar1ly \
       --discovery-token-ca-cert-hash sha256:ff90d8ed41ae1902a839194f179a1c3ba8374a5197ea3111e10e5ca1c09fa442 --cri-socket unix:///var/run/cri-dockerd.sock
kubectl get pod -A
kubectl get nodes

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

摸鱼大数据——Kafka——Kafka的集群搭建

1、软件安装 搭建Kafka集群 1、下载安装 安装包下载地址&#xff1a;https://kafka.apache.org/download 2、将Kafka的安装包上传到虚拟机&#xff0c;并解压 cd /export/software/ tar -xzvf kafka_2.12-2.4.1.tgz -C ../server/ 配置软连接: cd /export/server ln -s kaf…

Debezium日常分享系列之:Debezium 3.0.0.Alpha1 Released

Debezium日常分享系列之&#xff1a;Debezium 3.0.0.Alpha1 Released 一、重大改变Java 和 Maven 要求已更改 二、新的特征和提高MongoDB 三、更多内容 Debezium 3 的第一个预发布版本 3.0.0.Alpha1。这个版本虽然比正常的预版本要小&#xff0c;但高度关注几个关键点&#xff…

【漏洞复现】Splunk Enterprise for Windows 任意文件读取漏洞 CVE-2024-36991

声明&#xff1a;本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动&#xff0c;将与本文档的作者或发布者无关。 一、漏洞描述 Splunk Enterprise 是一款强大的机器数据管理和分析平台&#xff0c;广泛应用于企业中&#xff0c;用于实…

【单片机毕业设计选题24058】-基于嵌入式的智慧酒店管理系统设计与实现

系统功能: 系统分为主机端和从机端&#xff0c;主机端主动向从机端发送信息和命令&#xff0c;从机端 收到主机端的信息后回复温湿度和光照强度信息。 从机端操作&#xff1a; 从机端上电后显示“欢迎使用智慧酒店系统请稍后”两秒后进入正常显示界面。 第一行显示系统状态…

文心快码——百度研发编码助手

介绍 刚从中国互联网大会中回来&#xff0c;感受颇深吧。百度的展商亮相了文心快码&#xff0c;展商人员细致的讲解让我们一行了解到该模型的一些优点。首先&#xff0c;先来简单介绍一下文心快码吧。 文心快码&#xff08;ERNIE Code&#xff09;是百度公司推出的一个预训练…

Go语言---并发编程之channel(双channel,单channel)以及应用实例(生产者消费者、打印机模型)

Channel goroutine 运行在相同的地址空间&#xff0c;因此访问共享内存必须做好同步。goroutine 通过通信来共享内存&#xff0c;而不是其享内存来通信。 引用类型 channel 是CSP 模式的具体实现,用于多个 goroutine 通讯。其内部实现了同步&#xff0c;确保并发安全。 chan…

【Linux】磁盘性能压测-FIO工具

一、FIO工具介绍 fio&#xff08;Flexible I/O Tester&#xff09;是一个用于评估计算机系统中 I/O 性能的强大工具。 官网&#xff1a;fio - fio - Flexible IO Tester 注意事项&#xff01; 1、不要指定文件系统名称&#xff08;如/dev/mapper/centos-root)&#xff0c;避…

vue + echart 饼形图

图表配置&#xff1a; import { EChartsOption, graphic } from echarts import rightCircle from /assets/imgs/index/right_circle.png export const pieOption: EChartsOption {title: {text: 100%,subtext: 游客加量,left: 19%,top: 42%,textStyle: {fontSize: 24,color:…

如何评估媒体邀约宣传的效果

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 评估媒体邀约宣传的效果是一个系统而全面的过程&#xff0c;它涉及多个维度的考量和分析。 一、受邀媒体的出席率&#xff1a; 1.受邀媒体出席率直观反映了媒体邀约的效果&#xff1b; …

「C++系列」一篇文章说透【存储类】

文章目录 一、C 存储类1. 类的定义2. 对象的创建3. 对象在内存中的布局4. 对象的存储位置 二、auto 存储类1. auto的基本用法2. auto与存储类的关系1) 自动存储类&#xff08;最常见的&#xff09;2) 静态存储类3) 动态存储类&#xff08;通过new&#xff09; 三、register 存储…

自学第十五天----深入理解函数上

1. 函数是什么&#xff1f; 维基百科中对函数的定义&#xff1a; 子程序 在计算机科学中&#xff0c;子程序&#xff08;英语&#xff1a;Subroutine, procedure, function, routine, method, subprogram, callable unit&#xff09;&#xff0c;是一个大型程序中的某部分代码…

【2-1:RPC设计】

RPC 1. 基础1.1 定义&特点1.2 具体实现框架1.3 应用场景2. RPC的关键技术点&一次调用rpc流程2.1 RPC流程流程两个网络模块如何连接的呢?其它特性RPC优势2.2 序列化技术序列化方式PRC如何选择序列化框架考虑因素2.3 应用层的通信协议-http2.3.1 基础概念大多数RPC大多自…

windows上修改redis端口号

概况 redis是一个开源的内存数据结构存储系统&#xff0c;常用做数据库、缓存和消息代理。默认的端口号为6379 更改redis端口号步骤如下 先停止redis服务 redis-cli shutdowm 打开redis配置文件 在redis安装目录下&#xff0c;即redis.windows.conf文件。 port 6396 然后…

插片式远程 I/O模块:热电阻温度采集模块与PLC配置案例

XD系列成套系统主要由耦合器、各种功能I/O模块、电源辅助模块以及终端模块组成。有多种通讯协议总线的耦合器&#xff0c;例如Profinet、EtherCAT、Ethernet/IP、Cclink IE以及modbus/TCP等。I/O 模块可分为多通道数字量输入模块、数字量输出模块、模拟量输入模块、模拟量输出模…

js前端隐藏列 并且获取值,列表复选框

列表框 <div class"block" id"psi_wh_allocation_m"><table id"result" class"list auto hover fixed" style"width:100%;border-collapse:collapse"><thead><tr><%--<th></th>--%&…

人类大脑的计算与机器的类脑计算

人类大脑的计算基本原理涉及到神经元的基本工作方式、神经网络的结构和连接模式、信息传递的方式、学习和记忆的机制等多个层面的复杂互动&#xff0c;这些原理的深入理解不仅有助于神经科学的发展&#xff0c;还为人工智能领域的发展提供了重要的启示和指导。人类大脑计算基本…

【JavaScript 报错】未捕获的加载错误:Uncaught LoadError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 资源路径错误2. 资源不存在3. 网络问题 二、解决方案1. 检查资源路径2. 确保资源存在3. 处理网络问题 三、实例讲解四、总结 在JavaScript应用程序中&#xff0c;未捕获的加载错误&#xff08;Uncaught …

电脑录音如何操作?电脑麦克风声音一起录制,分享7款录音软件

电脑录音已经成为我们日常生活和工作中不可或缺的一部分。无论是录制会议、教学、音乐、网络直播、音源采集还是其他声音&#xff0c;电脑录音软件都为我们提供了极大的便利。本文将为大家介绍如何操作电脑录音&#xff0c;并分享七款录音软件&#xff0c;包括是否收费、具体操…

OpenCV中的浅拷贝和深拷贝

文章目录 前言一、浅拷贝二、深拷贝三、比较总结 前言 在数字图像处理中&#xff0c;针对读取到的一张图像&#xff0c;需要反复利用这张图像做各种的变换&#xff0c;以满足我们项目的需求。在这之前&#xff0c;最容易忽略的一点就是图像之间的拷贝问题&#xff0c;其中的浅…

【JavaScript 报错】未捕获的类型错误:Uncaught TypeError

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、错误原因分析1. 调用不存在的方法2. 访问未定义的属性3. 数据类型不匹配4. 函数参数类型不匹配 二、解决方案1. 检查方法和属性是否存在2. 使用可选链操作符3. 数据类型验证4. 函数参数类型检查 三、实例讲解四、总结 在…