搭建k8s集群服务(kubeadm方式)

news2024/10/4 2:03:54

准备工作

操作系统版本:CentOS Linux release 7.9.2009 (Core)

虚拟机硬件配置:2核8G内存(最低2G),硬盘最低25G;

linux内核版本(3.10版本尝试失败):5.4.268-1.el7.elrepo.x86_64

linux_升级LINUX内核步骤

docker版本:Docker version 25.0.1, build 29cf629

安装网络环境和其他环境设置

注意:将默认网络改为eth0网卡(我原来的是ens33改为了eth0)

Linux网卡没有eth0显示ens33原因以及解决办法

如果就3.10版本的linux内核,需要升级

  1. 关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

  1. 关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭

setenforce 0 #临时

  1. 关闭swap(要重启虚拟机)

sed 's/.swap./#&/' /etc/fstab #永久

swapoff -a #临时

  1. 根据规划设置主机名,以下3台主机

192.168.43.104 k8s-master

192.168.43.105 k8s-node1

192.168.43.106 k8s-node2

  1. 在master节点中添加

cat >> /etc/hosts

192.168.43.104 k8s-master

192.168.43.105 k8s-node1

192.168.43.106 k8s-node2

EOF

  1. 添加ipv4和ipv6桥接的配置(会自动创建k8s.conf文件)
    cat > /etc/sysctl.d/k8s.conf << EOF 
    net.bridge.bridge-nf-call-ip6tables = 1 
    net.bridge.bridge-nf-call-iptables = 1 
    EOF

        sysctl --system # 执行这条命令生效

  1. 时间同步

yum install ntpdate -y

ntpdate time.windows.com

安装docker环境

  1. 安装docker

先卸载

yum list installed | grep docker

yum remove docker-ce.x86_64 -y

rm -rf /etc/docker

rm -rf /var/lib/docker

rm -rf /usr/docker

rm -rf /run/docker

rm -rf /bin/docker

rm -rf /*/*/docker

查看有没有卸载干净

ll /*/docker

ll /*/*/docker

find / -name docker

再安装

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce docker-ce-cli containerd.io

  1. 配置镜像下载加速
    tee /etc/docker/daemon.json <<-'EOF'
    {
      "exec-opts": ["native.cgroupdriver=systemd"],
      "registry-mirrors": ["https://7zi5cb9i.mirror.aliyuncs.com"]
    }
    EOF

systemctl daemon-reload

systemctl restart docker

systemctl enable docker

# 以下两项设置成yes:vim /etc/ssh/sshd_config

PermitRootLogin yes

PasswordAuthentication yes

安装kubeadmin、kubelet、kubectl

添加k8s镜像源

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

  1. 安装kubeadm kubelet kubectl (每个节点都要安装)

yum install -y kubelet-1.23.6 kubeadm-1.23.6 kubectl-1.23.6

systemctl enable kubelet # 设置开机启动

systemctl start kubelet

# 查看状态,其它东西还没配置好,现在是启动不起来的

systemctl status kubelet

1.每个节点安装kubeadmin(快速构建集群环境的工具,主节点设置Master,从节点join到集群)
2.每个节点安装kubelet(真正干活的)
3.每个节点安装kubectl(命令行工具)
4.每个节点都要安装Docker(master和Node都要,容器运行时环境)

安装k8s master节点

  1. 安装k8s-master节点
  • 初始化master节点(仅在master上执行)
kubeadm init \
--apiserver-advertise-address=192.168.43.104 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16

如果执行init报错,再次执行之前要重置初始化: kubeadm reset -f

查看日志:tail -f /var/log/messages

journalctl -xeu kubelet

执行成功:

# 直接复制控制台上的几条命令执行

mkdir -p $HOME/.kube

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

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

# 从节点加入集群中

kubeadm join 192.168.43.104:6443 --token 334rev.g1ubyahjflqnf9f0 \
--discovery-token-ca-cert-hash sha256:17130a159cf0b3f5b9836bf13d2e522c12ab89f92bb6ff150678d0d96e314095 

如果token过期了,用命令重新生成:kubeadm token create --ttl 0 --print-join-command

# 安装CNI网络插件Calico(主节点上安装)

  • 下载calico资源文件:wget https://docs.projectcalico.org/manifests/calico.yaml
  • 查看文件需要的镜像:

  • 可以看到默认是从docker.io下载的,速度太慢,需要替换docker.io

sed -i 's#docker.io/##g' calico.yaml

  • 修改calico.yaml配置文件(如果在master节点初始化指定了pod的ip(--pod-network-cidr=10.244.0.0/16),这步可以省略。)

  • 执行calico.yaml文件

  • 查看运行状态(耐心等待):kubectl get po -n kube-system

  • 查看节点状态:kubectl get nodes

  • 查看没有running的pod原因:kubectl describe po calico-node-7wrw7 -n kube-system

  • 等待结果,大概等了13分钟,状态全部变成running
  • 还可以使用watch命令监控状态:watch kubectl get pod -n kube-system -o wide

测试一下:

kubectl create deployment nginx --image=nginx

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

kubectl get pod,svc

在浏览器访问一下nginx(在任意节点下都能访问)

使用curl命令访问一下nginx

  1. 安装k8s-node1 / k8s-node2

在任意从节点上执行kubectl都会报错,原因是从节点执行命令需要链接主节点的api-server,但是从节点并不知道api-server的访问地址。

kubectl get nodes

所以,需要将做如下配置

  • 将master节点的 /etc/kubernetes/admin.conf 文件拷贝到两个从节点

scp -r /etc/kubernetes/admin.conf root@k8s-node1:/etc/kubernetes/

scp -r /etc/kubernetes/admin.conf root@k8s-node2:/etc/kubernetes/

  • 配置一个环境变量

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

  • 刷新配置 source /etc/profile

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

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

相关文章

每日读则推(三)

n.(事件的)发生地点,(活动的)场所 n.雄性大园丁鸟 n.多细枝的,苗条的 v.放大,扩大(声音);增强,加强 Male great bowerbirds build twiggy concert venues that amplify their raucous songs and n.园丁鸟 …

讲职场:不要经常说消极的话

1、不要经常说消极的话&#xff0c;不要接触让自己力量消失的人 习惯性用强大的语言加持自己&#xff0c;才能立起来 2、只要你下决心钻研一门技术&#xff0c;你就全身心扑在上面&#xff0c;把每一个细节研究透&#xff0c;只有这样&#xff0c;你才能在学会之后&#xff0…

投资精明之选,国内外低代码平台性价比排行榜

本文介绍了国内外10大低代码平台的特点及性价比&#xff0c;包括ZohoCreator、OutSystems等&#xff0c;强调低代码平台通过简化开发过程&#xff0c;提高应用开发效率和质量&#xff0c;适合不同规模企业。选择时考虑企业需求和预算&#xff0c;建议试用后再决策。 一、Zoho C…

Apache安装后无法启动的问题“不能再本地计算机启动apache”

首先安装 参考这位博主的小白下载和安装Apache的教程&#xff08;保姆级&#xff09; 遇到的问题 在启动的时候遇到问题 说apache不能在本地计算机启动 解决方法 1. 路径检查 首先&#xff01;&#xff01;&#xff01; 请仔细检查你的httpd.conf文件中的Apache路径是否…

基于Springboot+Vue的汉服交易小程序的设计与实现(含源码+数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Git版本控制工具--关于命令

Git版本控制工具 学习前言 在项目开发中&#xff0c;总是需要多个人同时对一个项目进行修改&#xff0c;如何高效快速地进行修改&#xff0c;且控制各自修改的版本不会和他人的进行重叠&#xff0c;这就需要用到Git分布式版本控制器了 作用 解决了一致性&#xff0c;并发性…

如何解决 Photoshop 中的“暂存盘已满”错误

好久没有用Photoshop了&#xff0c;今天想自己修个图&#xff0c;就启动了一下PS&#xff0c;结果出现一个对话框“不能初始化Photoshop&#xff0c;因为暂存盘已经满”。我一直存在C盘焦虑&#xff0c;常年C盘显示都是红色的。上网一查&#xff0c;发现PS启动时暂存盘的空间是…

YOLOv11改进 | Neck篇 | YOLOv11引入Gold-YOLO

1. Gold-YOLO介绍 1.1 摘要: 在过去的几年中,YOLO 系列模型已成为实时目标检测领域的领先方法。 许多研究通过修改架构、增加数据和设计新的损失,将基线提升到更高的水平。 然而,我们发现以前的模型仍然存在信息融合问题,尽管特征金字塔网络(FPN)和路径聚合网络(PANet)…

每日OJ题_牛客_DP13[NOIP2002 普及组]过河卒_路径dp_C++_Java

目录 牛客_DP13[NOIP2002 普及组]过河卒_路径dp 题目解析 C代码1 C代码2 Java代码 牛客_DP13[NOIP2002 普及组]过河卒_路径dp [NOIP2002 普及组] 过河卒_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 棋盘上 A点有一个过河卒&#xff0c;需要走到目标 B点。卒行走的…

总结一下 KNN、K-means 和 SVM【附代码实现】

小小总结一下 KNN、K-means 和 SVM 及其 Python 实现 好久没更新了&#xff0c;最近准备秋招&#xff0c;在机器学习中感觉经常被问的几个算法&#xff1a;K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;、K均值聚类算法&#xff08;K-means&#xff09;以及支持…

【网络通信基础与实践番外三】TCP的三次握手和四次挥手和例题

一、TCP连接的三次握手 第一次握手&#xff1a;客户端首先向服务器发送一个特殊的TCP报文&#xff0c;这个报文段首部不包含应用层数据&#xff0c;但是在报文段中有一个SYN标志位被置1。因此这个特殊的报文段也被叫做SYN报文段&#xff0c;然后客户端随机选择一个初始序列号&a…

【JWT安全】portswigger JWT labs 全解

目录 1.利用有缺陷的 JWT 签名验证 ①接受任意签名 lab1:通过未验证的签名绕过 JWT 身份验证 ②接受无签名的token lab2:通过有缺陷的签名验证来绕过 JWT 身份验证 2.暴力破解密钥 ①使用hashcat lab3:通过弱签名密钥绕过 JWT 身份验证 3.JWT 标头参数注入 ①通过 jwk…

kubevirt基于CDI创建虚拟机

CDI介绍 KubeVirt 的 Containerized Data Importer (CDI) 是一个 Kubernetes 原生的数据管理组件&#xff0c;专门为虚拟机 (VM) 提供存储支持&#xff0c;尤其在虚拟机的镜像管理和数据导入方面非常有用。CDI 的主要用途是帮助用户轻松地将外部数据源导入到 Kubernetes 集群中…

Linux线程(三)终止线程与回收线程详解

1.终止线程 在示例代码&#xff0c;我们在新线程的启动函数&#xff08;线程 start 函数&#xff09;new_thread_start()通过 return 返回之后&#xff0c;意味着该线程已经终止了&#xff0c;除了在线程 start 函数中执行 return 语句终止线程外&#xff0c;终止线程的方式还…

Qt基础之四十八:按钮为何会有点击效果

我们从一个最简单的Window API窗口程序开始说起。 一.一个最简单的Window API窗口程序 #include <windows.h> #include <wingdi.h> // 声明窗口过程函数 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HI…

Windows程序包管理器WinGet的使用方法

Windows 程序包管理器 WinGet 命令行工具作为应用安装程序的一部分在 Windows 11 和现代版本的 Windows 10 上提供。 WinGet 工具的当前预览版支持以下命令: 命令说明info显示有关系统的元数据&#xff08;版本号、体系结构、日志位置等&#xff09;。 有助于进行故障排除。i…

电磁兼容(EMC):整改案例(四)人体对EFT测试影响有多大?

目录 1. 异常现象 2. 原因分析 3. 整改方案 4. 总结 1. 异常现象 某产品按GB/T 17626.4标准进行电快速瞬变脉冲群测试&#xff0c;测试条件为&#xff1a;频率5kHz/100kHz&#xff0c;测试电压L&#xff0c;N线间2kV&#xff0c;L&#xff0c;N线对PE线4kV。测试过程中需要…

Linux学习笔记(五):shell脚本,强大的文本处理工具awk,sed

Linux学习笔记&#xff08;五&#xff09;&#xff1a;shell脚本&#xff0c;awk&#xff0c;sed&#xff0c;服务管理 1. Shell 脚本 Shell 脚本是一种使用 Shell 编写的脚本&#xff0c;它可以在 Linux 系统中执行各种任务。 1.1 变量 声明变量&#xff1a; 使用 export 命令…

C++容器类型内置函数随笔

vector 容器 添加数据 vector <int> v ; v.push_back(数据); 访问数据的两个迭代器b.begin()和v.end() vector <int> :: iterator it_begin v. begin(); //容器起始位置元素的指针vector <int> :: iterator it_end v.end(); //指向容器最后一个元素下一…

FinOps三人行:云计算时代的FinOps 反模式和SRE(文字+视频版)

简介 9月20日&#xff0c;由SRE专委会和雅菲奥朗主办的“FinOps三人行&#xff1a;云计算时代的FinOps 反模式和SRE”在线研讨会成功举办&#xff0c;三位业界专家雅菲奥朗刘峰老师、易点天下董金老师和辛诺科技Larry老师齐聚一堂&#xff0c;聚焦于云计算环境下的并购模式、运…