安装部署k8s集群
系统: CentOS Linux release 7.9.2009 (Core)
- 准备3台主机
| 192.168.44.148 | k8s-master |
|---|---|
| 92.168.44.154 | k8s-worker01 |
| 192.168.44.155 | k8s-worker02 |
-
3台主机准备工作
关闭防火墙和selinuxsystemctl disable firewalld --nowsetenforce 0sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config关闭swap分区(swap分区会降低性能,所以选择关闭)
参考如下链接:https://blog.csdn.net/dejunyang/article/details/97972399设置node的主机名,并配置/etc/hosts(这样可以方面看到pod调度到哪个node上面)
对应的node配置对应的主机名hostnamectl set-hostname k8s-masterhostnamectl set-hostname k8s-worker01hostnamectl set-hostname k8s-worker02每台node主机都需要执行
cat >> /etc/hosts << EOF 192.168.44.148 k8s-master192.168.44.154 k8s-worker01192.168.44.155 k8s-worker02EOF -
开始安装k8s
-
配置yum源(3台主机都需要操作,使用阿里云yum仓库)
cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] name=Kubernetes baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpghttp://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF -
安装 kuberneters组件(所有节点安装)
yum -y install kubeadm-1.19.0 kubectl-1.19.0 kubelet-1.19.0 --disableexcludes=kubernetes
--disableexcludes=Kubernetes禁掉除了这个kubernetes之外的别的仓库- 这里安装的是指定版本,不指定版本默认安装最新版本
-
kubelet服务,启动并设置开启自启(所有node执行)
systemctl enable kubelet --now -
所有节点安装docker
yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum -y install docker-ce-19.03.10-3.el7 docker-ce-cli-19.03.10-3.el7 containerd.io docker-compose-pluginnote: K8s使用的是1.19.0版本,官网推荐docker 版本 19.03
启动,并自启docker
systemctl enable docker --nowDocker配置镜像仓库,并修改cgroup驱动为systemd(所有node节点执行)
Cgroups概念 cgroups 的全称是 Linux Control Groups,主要作用是限制、记录和隔离进程组(process
groups)使用的物理资源(cpu、memory、IO 等)。systemd是系统自带的cgroup管理器, 系统初始化就存在的, 和cgroups联系紧密,为每一个进程分配cgroups,
用它管理就行了. 如果设置成cgroupfs就存在2个cgroup控制管理器, 实验证明在资源有压力的情况下,会存在不稳定的情况。由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装kubernetes, 我们推荐使用
systemd 驱动,不推荐 cgroupfs 驱动。cat > /etc/docker/daemon.json << EOF { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://l72pvsl6.mirror.aliyuncs.com"], "log-opts": {"max-size":"50M","max-file":"3"} } EOF
"exec-opts": ["native.cgroupdriver=systemd"]设置cgroup驱动为systemd"registry-mirrors": ["https://l72pvsl6.mirror.aliyuncs.com"]设置docker镜像仓库为阿里云镜像"log-opts": {"max-size":"50M","max-file":"3"}设置docker容器日志最大为50M,最大文件个数为 3
-
允许 iptables 检查桥接流量
若要显式加载此模块,请运行sudo modprobe br_netfilter通过运行lsmod | grep br_netfilter来验证br_netfilter模块是否已加载sudo modprobe br_netfilterlsmod | grep br_netfilter为了让 Linux 节点的 iptables 能够正确查看桥接流量,请确认 sysctl 配置中的
net.bridge.bridge-nf-call-iptables设置为 1。例如:cat > /etc/modules-load.d/k8s.conf << EOFoverlaybr_netfilterEOFmodprobe overlaymodprobe br_netfilter设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.confnet.bridge.bridge-nf-call-iptables = 1net.bridge.bridge-nf-call-ip6tables = 1net.ipv4.ip_forward = 1EOF加载sysctl参数(重启也能生效)
sysctl --system -
修改kubeadm的默认配置
kubeadm config print init-defaults > init-config.yaml 将kubeadm默认的配置保存在文件中,到时候导入配置文件初始化集群修改init-config.yaml(只修改几个关键的部分)
advertiseAddress: 192.168.44.148 imageRepository: registry.aliyuncs.com/google_containers networking:dnsDomain: cluster.localserviceSubnet: 10.96.0.0/12podSubnet: 192.168.0.0/16note:
-
advertiseAddress master与集群通信的ip -
imageRepository: registry.aliyuncs.com/google_containers镜像仓库地址 -
networking下面只添加了 podSubnet:192.168.0.0/16这个参数,其他都是默认;待会要修改CNI文件子网范围和这个一致查看需要拉取的镜像
kubeadm config images list --config=init-config.yaml拉取镜像
kubeadm config images pull --config=init-config.yaml
-
运行kubeadm init 命令安装master 节点
kubeadm init --config=init-config.yaml
note: 可以忽略如下信息
W0131 16:57:45.102290 3727 configset.go:348] WARNING: kubeadmcannot validate component configs for API groups [kubelet.config.k8s.io kubeproxy.config.k8s.io]
Your Kubernetes control-plane has initialized successfully! 代表控制平面初始化成功
-
为kubectl 配置证书才能访问master
非root用户配置:mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/configroot用户配置:
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> /etc/profile source /etc/profile -
将节点加入到k8s集群
当然,当集群已经成功初始化完成都,最下方会打印出加入集群的代码:
kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef
–discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef获取加入node节点的token(master节点执行)
kubeadm token list获取 --discovery-token-ca-cert-hash 值
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'固定格式是(注意换成自己的token和hash值):
kubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef如果token过期了,可以在master节点上运行
kubeadm token create打印加入节点的完整命令可以运行
kubeadm token create --print-join-command在所有node节点执行 加入集群的token
根据自己对应的加入集群的tokenkubeadm join 192.168.44.148:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:88eb2767faaad801ce07501946b510d20bc180fd20cf35c9aa1822b3b345c2ef在master节点使用 kubectl get pod -A 查看所有组件是否安装成功,状态是否Runting(需要等待一会)
kubectl get pod -ANAMESPACE NAME READY STATUS RESTARTS AGE kube-system coredns-6d56c8448f-hsm4m 0/1 Pending 0 16m kube-system coredns-6d56c8448f-z66pp 0/1 Pending 0 16m kube-system etcd-k8s-master 1/1 Running 0 16m kube-system kube-apiserver-k8s-master 1/1 Running 0 16m kube-system kube-controller-manager-k8s-master 1/1 Running 0 16m kube-system kube-proxy-447d7 1/1 Running 0 119s kube-system kube-proxy-9gt2z 1/1 Running 0 16m kube-system kube-proxy-s9hbb 1/1 Running 0 114s kube-system kube-scheduler-k8s-master 1/1 Running 0 16m在master节点使用查看所有节点信息
kubectl get nodesNAME STATUS ROLES AGE VERSION k8s-master NotReady master 17m v1.19.0 k8s-worker01 NotReady <none> 2m48s v1.19.0 k8s-worker02 NotReady <none> 2m43s v1.19.0note:Node节点状态显示 NotReady 因为 还没有安装 CNI(容器网络接口)
-
安装Calico CNI网络插件(在master节点执行)
下载资源文件curl -O https://docs.tigera.io/archive/v3.18/manifests/calico.yaml修改一下pod网段

安装
kubectl apply -f calico.yaml等待一会再次查看pod,node详情
kubectl get nodes,pod -ANAME STATUS ROLES AGE VERSION node/k8s-master Ready master 36m v1.19.0 node/k8s-worker01 Ready <none> 21m v1.19.0 node/k8s-worker02 Ready <none> 21m v1.19.0NAMESPACE NAME READY STATUS RESTARTS AGE kube-system pod/calico-kube-controllers-56c7cdffc6-frc82 0/1 CrashLoopBackOff 6 13m kube-system pod/calico-node-7rxzn 1/1 Running 0 13m kube-system pod/calico-node-dbjhv 1/1 Running 0 13m kube-system pod/calico-node-fsw2d 1/1 Running 0 13m kube-system pod/coredns-6d56c8448f-hsm4m 0/1 Running 0 36m kube-system pod/coredns-6d56c8448f-z66pp 0/1 Running 0 36m kube-system pod/etcd-k8s-master 1/1 Running 0 36m kube-system pod/kube-apiserver-k8s-master 1/1 Running 0 36m kube-system pod/kube-controller-manager-k8s-master 1/1 Running 0 36m kube-system pod/kube-proxy-447d7 1/1 Running 0 21m kube-system pod/kube-proxy-9gt2z 1/1 Running 0 36m kube-system pod/kube-proxy-s9hbb 1/1 Running 0 21m kube-system pod/kube-scheduler-k8s-master 1/1 Running 0 36m目前来看node节点已经就绪了,但是有一个pod报错,2个pod没有准备好,使用kubectl --namespace=kube-system describe pod pod名称 查看pod的事件
kubectl --namespace=kube-system describe pod calico-kube-controllers-56c7cdffc6-frc82报错问题能力有限无法处理,部署基本都是这样。组要是版本差异然后不知道怎么处理!!!
如果知道是什么原因导致的报错,还请不吝赐教。
相关文章:
安装部署k8s集群
系统: CentOS Linux release 7.9.2009 (Core) 准备3台主机 192.168.44.148k8s-master92.168.44.154k8s-worker01192.168.44.155k8s-worker02 3台主机准备工作 关闭防火墙和selinux systemctl disable firewalld --nowsetenforce 0sed -i s/SELINUXenforcing/SELI…...
曲线生成 | 图解B样条曲线生成原理(基本概念与节点生成算法)
目录 0 专栏介绍1 什么是B样条曲线?2 基函数的de Boor递推式3 B样条曲线基本概念图解4 节点生成公式 0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等)…...
CyberDAO:web3时代的引领者
Web3.0正在改写着世界运行的规则,AGI将为人类未来的生产效率、工作方式与目标带来改变,区块链经过十余年发展开启了去中心化新格局,带来生产关系的变革。人类正在从过往以时间换取收入、听命完成工作,转变为以个性化、自主追求人生…...
java以及android类加载机制
类加载机制 一、Java类加载机制 java中,每一个类或者接口,在编译后,都会生成一个.class文件。 类加载机制指的是将这些.class文件中的二进制数据读入到内存中并对数据进行校验,解析和初始化。最终,每一个类都会在方…...
【Go】四、rpc跨语言编程基础与rpc的调用基础原理
Go管理工具 早期 Go 语言不使用 go module 进行包管理,而是使用 go path 进行包管理,这种管理方式十分老旧,两者最显著的区别就是:Go Path 创建之后没有 go.mod 文件被创建出来,而 go module 模式会创建出一个 go.mod…...
Linux CentOS系统安装SQL Server并结合内网穿透实现公网访问本地数据
🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《C》 《Linux》 《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默&…...
输入捕获模式测频率PWM输入模式(PWMI)测占空比
一、概念介绍 输出比较: 比较电路输入的CNT、CCR大小关系 ,在通道引脚输出高低电平 二、*频率知识、测量方法补充 * N/fc得到标准频率的时长,也就是待测频率的周期 测频法代码实现:修改对射式红外传感器计次(上升沿…...
解锁VIP会员漫画:用Python爬虫轻松实现高清漫画下载
嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.10 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块…...
备战蓝桥杯---动态规划(入门3之子串问题)
本专题再介绍几种经典的字串问题。 这是一个两个不重叠字串和的问题,我们只要去枚举分界点c即可,我们不妨让c作为右区间的左边界,然后求[1,c)上的单个字串和并用max数组维护。对于右边,我们只要反向求单个字串和然后选左边界为c的…...
JavaScript:隐式类型转换与显式类型转换
文章目录 隐式类型转换(Implicit Type Conversion)1、字符串与数字的转换2、非布尔值到布尔值的转换3、在相等性比较中的转换4、对象到基础类型的转换5、在算术运算符中的其他转换 显式类型转换(Explicit Type Conversion)1、Numb…...
【电路笔记】-LR串联电路
LR串联电路 文章目录 LR串联电路1、概述2、示例1所有线圈、电感器、扼流圈和变压器都会在其周围产生磁场,由电感与电阻串联组成,形成 LR 串联电路。 1、概述 在本节有关电感器的第一个文章中,我们简要介绍了电感器的时间常数,指出流过电感器的电流不会瞬时变化,而是会以恒…...
Ansible 自动化运维工具的使用
目录 Ansible的简介 ansible 环境安装部署 ansible 命令行模块 command 模块 shell 模块 cron 模块 user 模块 group 模块 copy 模块 file 模块 hostname 模块 ping 模块 yum 模块 service/systemd 模块 script 模块 mount 模块 archive 模块 unarchive 模…...
亚马逊、ozon、速卖通、Lazada等跨境平台为什么评论老是被删
对于卖家而言,最难的并不是销售量,最难的是让客户在购买后能够留下一个高质量的review,毕竟现在的市场,以listing的排名为基准,以review数量多少和质量的高低来评判店铺的好坏 几乎所有的卖家都会有索评的烦恼&#x…...
手把手带你在Linux上安装带GPU加速的opencv库(C++版本)
1.安装依赖 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python-dev python-numpy python3-dev python3-numpy sudo apt-get install libtbb2 libtbb-dev libjpeg-dev l…...
【Linux】软件包管理器 yum | vim编辑器
前言: 软件包管理器 yum和vim编辑器讲解 文章目录 软件包管理器 yum编辑器-vim四种模式普通模式批量化注释和批量化去注释末行模式临时文件 软件包管理器 yum yum(Yellowdog Updater, Modified)是一个在基于 RPM(管理软件包的格式和工具集合&…...
vue常见问题
文章目录 data为什么是一个函数,而不是一个对象?什么情况下可以使用对象?key的作用,为什么不能用Index?render函数,h函数,和template什么关系?vue 是怎么解析template的? template会…...
ArcgisForJS基础
文章目录 0.引言1.第一个ArcgisForJS应用程序1.1.安装部署ArcgisForJS1.2.实现ArcgisForJS应用程序 2.开发与调试工具2.1.集成开发环境2.2.调试工具2.3.Firebug 0.引言 ArcGIS API for JavaScript是一款由Esri公司开发的用于创建WebGIS应用的JavaScript库。它允许开发者通过调…...
白话微机:5.解释串行接口以及一些考研面试问题
一. 前言(回顾世界观) 很久很久以前,有这样一个世界,这个世界有着现实世界一样的元素:那里的人又有一个别的名字叫做“数据”,人有0有1;人们也有住房,这些住房在这个世界叫做“存储器…...
版本控制(Git)
Fork 本课程网站的仓库 将版本历史可视化并进行探索是谁最后修改了 README.md文件?(提示:使用 git log 命令并添加合适的参数)最后一次修改_config.yml 文件中 collections: 行时的提交信息是什么?(提示&am…...
USB-C音频转接器:实现边充电边听歌的新选择 | LDR6020P
随着科技浪潮的推进,Type-C接口已逐渐成为电子设备的主流选择,以其正反随意插、高速传输和强大功能等独特优势,在日常生活中占据越来越重要的地位。而Type-C音频转接器,作为连接Type-C接口与音频设备的桥梁,正引领着音…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
