03.搭建K8S集群

article/2025/6/7 12:56:53

K8S集群搭建的方式

目前主流的搭建k8s集群的方式有kubeadm、minikube、二进制包三种方式:

kubeadm(本案例搭建方式)

  • 是一个工具,用于快速搭建kubernetes集群,目前应该是比较方便和推荐的,简单易用

  • kubeadm是Kubernetes 1.4开始新增的特性

  • kubeadm init 以及 kubeadm join 这两个命令可以快速创建 kubernetes 集群

minikube

  • 一般用于本地开发、测试和学习,不能用于生产环境

  • 是一个工具,minikube快速搭建一个运行在本地的单节点的Kubernetes

二进制包

  • 在官网下载相关的组件的二进制包,上面的两个是工具,可以快速搭建集群,也就是相当于用程序脚本帮我们装好了集群,前两者属于自动部署,简化部署操作,自动部署屏蔽了很多细节,使得对各个模块感知很少,遇到问题很难排查,如果手动安装,对kubernetes理解也会更全面。

  • 目前生产环境的主流搭建方式,已在生产环境验证,kubeadm也可以搭建生产环境,不过kubeadm应该还没有被大规模在生产环境验证

搭建k8s集群

1.关闭防火墙

# 关闭每台服务器的防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl status firewalld 

2.配置yum源

# 配置yum源
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.back
vi  CentOS-Base.repo
# 添加如下内容
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client.  You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
# 清理缓存、重新生成缓存、列出yum源
yum clean all
yum makecache
yum repolist
# 安装nfs-utils
yum install -y nfs-utils

3.关闭swap

# 注释掉swap配置,并保存
vim /etc/fstab
# /dev/mapper/centos-swap swap           swap    defaults        0 0

重启服务器

4.设置三台服务器的hostname,并且配置host文件,方便直接使用hostname能够互相访问

# 在master节点
hostnamectl set-hostname k8s-master
# 在node1节点
hostnamectl set-hostname k8s-node1
# 在node2节点
hostnamectl set-hostname k8s-node2
# 在三台服务器分别编辑 /etc/hosts文件,增加DNS解析
# 将下方ip替换为自己的kubernetes节点ip
192.168.32.132 k8s-master
192.168.32.134 k8s-node1
192.168.32.133 k8s-node2

分别在每台服务器上ping hostname,验证是否已经配置成功
在这里插入图片描述

5.将桥接的IPV4流量传递到iptables的链

# 在每台服务器上编辑/etc/sysctl.d/k8s.conf,新增如下内容
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
# 使配置生效
sysctl --system
# 在每台服务器上同步时间
yum install ntpdate -y
ntpdate time.windows.com

6.安装docker20.10.7-3

# 安装必要的软件包
yum install -y yum-utils
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker Engine
sudo yum install -y docker-ce-20.10.7-3.el7 docker-ce-cli-20.10.7-3.el7 containerd.io
# 启动 Docker 服务
sudo systemctl start docker
# 设置 Docker 开机自启
sudo systemctl enable docker
# 验证 Docker 安装
docker --version
# 关闭docker cgoup
vim /etc/docker/daemon.json
# 在该json文件中添加如下
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://docker.1panelproxy.com","https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com","https://docker.m.daocloud.io","https://hub-mirror.c.163.com","https://mirror.baidubce.com","https://your_preferred_mirror","https://dockerhub.icu","https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc"]
}
# 重启docker
systemctl daemon-reload
sudo systemctl restart docker

7.添加kubernet yum源

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

8.安装kubeadm、kubelet、kubectl

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

9.部署kubernet master

#在Master节点下执行
# 将192.168.177.171替换为自己的master节点ip地址
kubeadm init \
--apiserver-advertise-address=192.168.177.171 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.6 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--ignore-preflight-errors=all
#安装成功后,复制如下配置并执行
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes

10.加入kubernetes node

#分别在k8s-node1和k8s-node2执行一下命令,加入master节点
# 将192.168.177.171替换为自己的master节点ip地址
# 将eojlre.jrnvoav77jmiz0q0替换为自己的master节点控制台输出的toker
# 将0c5a5878f52074b695103204fdcd17b0758890ed4bcaba89c1462476684e5b1c替换为自己的master节点控制台输出的hash值
kubeadm join 192.168.177.171:6443 --token eojlre.jrnvoav77jmiz0q0 \
--discovery-token-ca-cert-hash sha256:0c5a5878f52074b695103204fdcd17b0758890ed4bcaba89c1462476684e5b1c
#如果初始化的token不小v心清空了,可以通过如下命令获取或者重新申请
#如果token已经过期,就重新申请
kubeadm token create
#token没有过期可以通过如下命令获取
kubeadm token list
#获取-discovery-token-ca-cert-hash值,得到值后需要在前面拼接上 sha256:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt openssl rsa -pubin -outform der 2>/dev/null \

在这里插入图片描述
k8s的下列组件未成功下载,需要配置网络
在这里插入图片描述

# 在master节点下创建k8s目录,下载calico.yaml文件
curl https://docs.projectcalico.org/manifests/calico.yaml -O
# 修改calico.yaml文件中的CALICO_IPV4POOL_CIDR属性的值为第6步中的--pod-network-cidr值相同

在这里插入图片描述

# 删除镜像docker.io/前缀,避免下载过慢导致失败
sed -i 's#docker.io/##g' calico.yaml

11.构建

# 构建应用
kubectl apply -f calico.yaml

结果如下图:
在这里插入图片描述

12.测试kubernet集群

# 创建部署nginx
kubectl create deployment nginx --image=nginx
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看pod以及服务信息
kubectl get pod,svc
# 尝试使用curl或者浏览器访问服务信息

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

其他命令及问题

# 查看k8s的状态
systemctl status kubelet
# 查看日志情况
journalctl -xefu kubelet
# 重启k8s
systemctl restart kubelet
# 获取k8s的节点
kubectl get nodes
# 重启docker
systemctl restart docker
# k8s获取组件状态
kubectl get componentstatus
# k8s列出指定命名空间的pod,kubeadm在执行k8s的pod的时候会在kube-system这个命名空间下执行,所以使用kubectl get pod的时候查看不到查看的默认的pod,需要指定这个命名空间
kubectl get pods -n <namespace>
# 查看一个pod详情
kubectl describe po <pod-name> -n <namespace>

若出现如下错误,则需要关闭docker的cgroup
在这里插入图片描述
如果查看pod详情时出现如下错误,可能是linux内核需要升级
在这里插入图片描述

# 升级linux内核版本
yum list kernel
yum update kernel -y
reboot

http://www.hkcw.cn/article/SwdtwYfaLw.shtml

相关文章

Redis底层数据结构之快链表(QuickList)

QuickList基本结构 用一句话来说&#xff0c;QuickList是一个双端链表&#xff0c;每一个链表节点中存储的是ZipList&#xff0c;参照下面这张图可以更好地理解QuickList的结构组成&#xff1a; QuickList在Redis6.0中一共定义了6个结构体&#xff0c;分别为&#xff1a; quick…

Mac查看MySQL版本的命令

通过 Homebrew 查看&#xff08;如果是用 Homebrew 安装的&#xff09; brew info mysql 会显示你安装的版本、路径等信息。 你的终端输出显示&#xff1a;你并没有安装 MySQL&#xff0c;只是查询了 brew 中的 MySQL 安装信息。我们一起来看下重点&#xff1a; &#x1f9fe…

Spring Boot 自动配置原理:从入门到精通

Spring Boot 的自动配置是其核心特性之一&#xff0c;它极大地简化了 Spring 应用的开发&#xff0c;让开发者可以专注于业务逻辑&#xff0c;而无需编写大量的配置代码。 本文将深入探讨 Spring Boot 自动配置的原理&#xff0c;帮助你理解其工作机制&#xff0c;并能灵活运用…

网络原理1

协议 在网络通信中&#xff0c;协议是非常重要的概念。协议是在网络通信过程中的约定。发送方和接收方需要提前商量好数据的格式&#xff0c;才能确保正确进行沟通。 应用层协议 应用层&#xff0c;对应着应用程序&#xff0c;是跟我们程序员打交道最多的一层。调用操作系统…

【JSON-to-Video】设置背景视频片断

欢迎来到JSON转视频系列教程。今天要教大家如何添加背景视频片断&#xff0c;在视频制作中&#xff0c;巧妙运用背景视频&#xff0c;能为作品增添独特魅力。下面就为大家详细讲解具体步骤。 JSON转视频教程&#xff0c;添加背景视频片断 设置bgVideo字段 {"bgVideo"…

工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线

一、方案背景​ 在工地、矿山、工厂等高危作业场景&#xff0c;反光衣是保障人员安全的必备装备。但传统人工巡查存在效率低、易疏漏等问题&#xff0c;难以实现实时监管。AI智能分析网关V4基于人工智能技术&#xff0c;可自动识别人员着装状态&#xff0c;精准定位未穿反光衣…

Java垃圾回收机制深度解析:从理论到实践的全方位指南

Java垃圾回收(GC)是Java虚拟机(JVM)的核心功能&#xff0c;它自动管理内存分配与回收&#xff0c;避免了C/C中常见的内存泄漏问题。本文将深入剖析Java垃圾回收的工作原理、算法实现、收集器类型及调优策略&#xff0c;助你全面掌握JVM内存管理的精髓。 一、垃圾回收基础概念 …

实验设计与分析(第6版,Montgomery著,傅珏生译) 第9章三水平和混合水平析因设计与分式析因设计9.5节思考题9.1 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第9章三水平和混合水平析因设计与分式析因设计9.5节思考题9.1 R语言解题。主要涉及方差分析。 YieldDesign <-expand.grid(A gl(3, 1, labels c("-", "0","…

Vue内置组件Teleport和Suspense

一. Vue内置组件Teleport 认识Teleport( teleport&#xff1a;允许我们把组件的模板渲染到特定的元素上) 1.1. 在组件化开发中&#xff0c;我们封装一个组件A&#xff0c;在另外一个组件B中使用 组件A中template的元素&#xff0c;会被挂载到组件B中template的某个位置&#xf…

冷雨泉教授团队:新型视觉驱动智能假肢手,拟人化抓握技术突破,助力截肢者重获生活自信

研究背景&#xff1a;日常生活中&#xff0c;健康人依靠手完成对物体的操作。对于手部截肢患者&#xff0c;手部的缺失导致他们难以有效地操作物体&#xff0c;进而影响正常的日常生活。拥有一个能够实现拟人地自然抓取多种日常物体的五指动力假手是手部截肢患者的夙愿&#xf…

Ansys Zemax | 手机镜头设计 - 第 4 部分:用 LS-DYNA 进行冲击性能分析

附件下载 联系工作人员获取附件 该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;从概念和设计到制造和结构变形分析。本文是四部分系列中的第四部分&#xff0c;它涵盖了相机镜头的显式动态模拟&#xff0c;以及对光学性能的影响。使用 Ansys Mechanical 和 LS - DY…

windows可视化粘贴使用剪贴板

复制 ctrl c可视化粘贴 win v选择要粘贴的内容

【QT】认识QT

文章目录 1. 认识Qt2. 创建QT项目3. 认识对象树4. 其它4.1 窗口坐标系4.2 快捷键 1. 认识Qt 什么是QT Qt 是⼀个跨平台的C图形用户界⾯应用程序框架。 它为应用程序开发者提供了建立艺术级图形界⾯所需的所有功能。它是完全⾯向对象的&#xff0c;很容易扩展。Qt为开发者提供…

OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建一个 基于最小特征值&#xff08;Minimum Eigenvalue&#xff09;的角点响应计算对象&#xff0c;这是另一种经典的角点检测方法&…

Java高级 | (二十二)快速应用开发框架——Spring Boot

一、使用IDEA搭建SpringBoot项目 二、创建控制器类 1、先运行项目。 如果配置正常&#xff0c;ldea运行界面如下&#xff0c;表示启动正常。 2、创建控制器类 鼠标右击controller包&#xff0c;点击new->Java Class,在弹出的对话框中输入“HelloController”并按回车健&a…

Linux 安装 JDK

Linux中JDK安装 文件路径在root目录&#xff0c;请根据实际情况进行修改 1、上传并解压 tar -zxvf /root/jdk-8u333-linux-x64.tar.gz2、移动解压后的文件夹到/usr/local 目录下&#xff0c; mv /root/jdk1.8.0_333 /usr/local/此步骤可以不操作&#xff0c;但步骤3中的路径…

简简单单探讨下starter

前言 今天其实首先想跟大家探讨下&#xff1a;微服务架构&#xff0c;分业务线了&#xff0c;接入第三方服务、包啥的是否自己定义一个stater更好&#xff1f; 一、starter是什么&#xff1f; 在 Spring Boot 中&#xff0c;Starter 是一种特殊的依赖模块&#xff0c;用于快速…

字符编码全解析:ASCII、GBK、Unicode、UTF-8与ANSI

UTF - 8(全球字符能被唯一标识)、GBK、Unicode、ANSI 区别与关联 qwen模型分词器文件 1. ASCII(基础铺垫,理解编码起源) 作用:最早期为处理英文文本设计,是字符编码的基础,后演变成其他编码兼容的一部分 。范围:共 128 个字符(0 - 127),包含英文大小写字母、数字…

定时线程池失效问题引发的思考

最近在做的一个新功能&#xff0c;在结果探测的时候使用了定时线程池和普通线程池结合&#xff0c;定时线程池周期性创建子任务并往普通线程池提交任务。 问题&#xff1a; 在昨天测试老师发现&#xff0c;业务实际上已经成功了&#xff0c;但是页面还是一直显示进行中。 收到…

Win11/Win10 打不开 gpedit.msc 之 组策略编辑器安装

目前已整理两种方式&#xff0c;推荐使用第二种方式~ 方式1&#xff1a; 一般家庭版操作系统默认未安装 组策略编辑器&#xff0c; 只需要进行安装一下即可。 到文章结尾按照提示下载相关的bat文件&#xff0c; 下载后右键以管理员身份运行bat文件&#xff0c;&#xff08…