微服务 云原生:搭建 K8S 集群
为节约时间和成本,仅供学习使用,直接在两台虚拟机上模拟 K8S 集群搭建
踩坑之旅
系统环境:CentOS-7-x86_64-Minimal-2009 镜像,为方便起见,直接在 root 账户下操作,现实情况最好不要这样做。
基础准备
- 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
- 关闭 selinux
# 临时禁用selinux
setenforce 0# 永久关闭selinux
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
- 禁用 Swap
# 临时关闭 Swap
swapoff -a# 永久禁用 Swap
vi /etc/fstab
在swap分区这行前加 # 注释掉
#/dev/mapper/centos-swap swap
- 设置存储库
# 安装 yum-utils 包, 并设置稳定存储库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- 安装配置 Docker
# 查看docker-ce支持版本
yum list docker-ce --showduplicates|sort -r#查看docker-ce-cli版本
yum list docker-ce-cli --showduplicates|sort -r# 指定版本号安装
#yum install -y docker-ce-24.0.4 docker-ce-cli-24.0.4 containerd.io# 默认安装最新版本
yum install docker-ce docker-ce-cli containerd.io# 启动 Docker
systemctl enable docker && systemctl start docker# 查看版本
docker -v# 配置国内镜像源,修改/新建 daemon.json
vi /etc/docker/daemon.json# 在 daemon.json 中添加:
{"registry-mirrors": ["https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com","https://cr.console.aliyun.com/"]
}# 重启 Docker
systemctl restart docker
- 安装 Docker Compose
# 下载 Docker Compose
sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose# 对二进制文件添加可执行权限
chmod +x /usr/local/bin/docker-compose# 查看版本
docker-compose -v
最好使用 GitHub 的地址,如果使用其他比如:
curl -L "https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
,有几率会出现下面错误:
/usr/local/bin/docker-compose: line 1: html: No such file or directory
/usr/local/bin/docker-compose: line 2: syntax error near unexpected token `<'
'usr/local/bin/docker-compose: line 2: `<head><title>502 Bad Gateway</title></head>
搭建 K8S 集群
- 修改 K8S 源
cat <<EOF > /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
EOF
基础环境搭建完成后,令当前虚拟机做 Master 主机,利用虚拟机平台,比如 VMWare、VirtualBox 等的克隆功能,克隆一台 Worker 主机(当然也可以克隆多台)。注意,克隆后的多台主机要保证 ip 不同,不同软件的操作不同,具体操作此处此处不做赘述。
- Master 端安装 kubeadm、kubectl、kubelet
# 安装指定版本
# yum install -y kubeadm-1.21.3 kubelet-1.21.3 kubectl-1.21.3# 默认安装
yum install -y kubectl kubeadm kubelet# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet# 查看版本
docker-compose version
- Worker 端安装 kubeadm、kubelet
# 安装
yum install -y kubeadm kubelet# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet
- 启动容器运行时 containerd
# Master 端和 Worker 端都要操作
mv /etc/containerd/config.toml /etc/containerd/config.bak
containerd config default | sudo tee /etc/containerd/config.toml
systemctl restart containerd
- 配置主机名,需要同时在 Master 和 Worker 上操作
- Master 节点下:
# 编辑 hosts,添加各个节点的映射 vi /etc/hosts# 我的 Master 主机 ip 为 192.168.65.130,Worker 主机 ip 为 192.168.65.132 192.168.65.132 k8s-node1 192.168.65.130 k8s-master# Master 节点 hostnamectl --static set-hostname k8s-master# 立刻生效 hostname $hostname
- Worker 节点下:
vi /etc/hosts192.168.65.132 k8s-node1 192.168.65.130 k8s-master# Worker 节点 hostnamectl --static set-hostname k8s-node1# 立刻生效 hostname $hostname
- 初始化 Master 节点
# 仅在 Master 主机上执行:
kubeadm init \
--image-repository registry.aliyuncs.com/google_containers \
--apiserver-advertise-address=192.168.65.130 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16 \
--token-ttl 0
- –apiserver-advertise-address=192.168.65.130,master 主机的 IP 地址
- –image-repository=registry.aliyuncs.com/google_containers,这个是镜像地址
- –service-cidr=10.96.0.0/12,IP 地址直接就套用10.96.0.0/12
- –pod-network-cidr=10.244.0.0/16,K8S 内部的 pod 节点之间网络可以使用的 IP 段,是可以更改的,暂时用 10.244.0.0/16 也无所谓
初始化完成后结果如下:
将这里提示的 kubeadm join xxx
命令保存下来,如果忘记了也可以通过下面命令查看:
kubeadm token create --print-join-command
继续执行:
mkdir -p ~/.kube
sudo cp -i /etc/kubernetes/admin.conf ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
- 将 Worker 加入到 Master 节点
# Worker 端,使用上一步得到的 join 命令
kubeadm join 192.168.65.130:6443 --token 4olf44.2t6sqev73d6ewm48 --discovery-token-ca-cert-hash sha256:3603cf3bd9efa671e95a93f922f097580b1ffbfe3e55ca8b7f1876bf8fc4be69
成功后的提示如下:
这一步可能报错:
[ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables]: /proc/sys/net/bridge/bridge-nf-call-iptables contents are not set to 1
解决办法:
echo "1" >/proc/sys/net/bridge/bridge-nf-call-iptables
- Master 端安装 Calico 网络插件
注意,Calico 的版本需要与 kubelet 匹配,适配关系在 Calico 每个版本的说明都有,比如我的 kubelet 是 1.21.3,满足此版本的 Calico 有 3.20、3.21:
https://docs.tigera.io/archive/v3.20/getting-started/kubernetes/requirements
# 下载 calico.yaml 到本地
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O# 执行
kubectl apply -f calico.yaml
9. 查看节点、pod 状态
# 查看 nodes
kubelet get node# 查看 pods
kubectl get pods -n kube-system -o wide
一开始节点处于 NotReady 状态:
相关的 coredns 等也在启动中:
经过一段时间后,可以看到,所有 pods 均已启动(running),节点已就绪(Ready):
相关文章:

微服务 云原生:搭建 K8S 集群
为节约时间和成本,仅供学习使用,直接在两台虚拟机上模拟 K8S 集群搭建 踩坑之旅 系统环境:CentOS-7-x86_64-Minimal-2009 镜像,为方便起见,直接在 root 账户下操作,现实情况最好不要这样做。 基础准备 关…...

C++中的数学问题---进制转换
二进制转十六进制 string binToHex(string bin){string hex"";if(bin.size()%4!0){for(int i0;i<(4-bin.size()%4);i){bin"0"bin;}}for(int i0;i<bin.size();i4){string tmpbin.substr(i,4);bitset<4>b(tmp);hexb.to_ulong()<10?char(b.t…...

开发一个RISC-V上的操作系统(三)—— 串口驱动程序(UART)
目录 文章传送门 一、什么是串口 二、本项目串口的FPGA实现 三、串口驱动程序的编写 四、上板测试 文章传送门 开发一个RISC-V上的操作系统(一)—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统(二&…...

nuxt项目部署,npm run build 和npm run generate的区别
每日鸡汤:每个你想要学习的瞬间都是未来的你向自己求救 非服务端渲染的项目,比如普通的vite vue项目,我们在部署生产环境的时候,只需要两步 运行 npm run build 然后得到了一个 dist 文件夹将这个dist文件夹部署到一个静态服务器…...

数据仓库设计理论
数据仓库设计理论 一、数据仓库基本概念 1.1、数据仓库介绍 数据仓库是一个用于集成、存储和分析大量结构化和非结构化数据的中心化数据存储系统。它旨在支持企业的决策制定和业务分析活动。 1.2、基本特征 主题导向:数据仓库围绕特定的主题或业务领域进行建模…...

数据接口有哪些?(数据接口有哪几种)
数据接口是指不同应用程序或系统之间交换数据的通信界面。在现代信息化社会中,数据接口扮演着极为重要的角色,它们使得不同平台之间能够相互连接和交流,从而实现数据共享和应用集成。 数据接口的种类繁多,常见的有以下几种&#…...

华为云CodeArts产品体验的心得体会及想法
文章目录 前言CodeArts 的产品优势一站式软件开发生产线研发安全Built-In华为多年研发实践能力及规范外溢高质高效敏捷交付 功能特性说明体验感受问题描述完结 前言 华为云作为一家全球领先的云计算服务提供商,致力于为企业和个人用户提供高效、安全、可靠的云服务。…...

下载安装:SQLite+SQLiteStudio+VS
目录 1、SQLite 1.1、下载SQLite 1.2、配置SQLite的环境变量 2、SQLite Studio 2.1、下载SQLite Studio 2.2、安装SQLite Studio 3、Visual Studio 3.1、下载Visual Studio 3.2、安装Visual Studio 1、SQLite 1.1、下载SQLite SQLite官网:SQLite Downl…...

nginx路由
一般我们经常在访问网站时,通常会遇到输入某个页面的网址时,出现路由的转发,重定向等。可能访问的是一个网址,出来的时候就显示的是另外的地址。这是由于使用了nginx的缘故,保护了网址的安全性 (1…...

MobPush Android SDK 厂商推送限制
概述 厂商推送限制 每个厂商通道都有对应的厂商配额和 QPS 限制,当请求超过限制且已配置厂商回执时,MobPush会采取以下措施: 当开发者推送请求超过厂商配额时,MobPush将通过自有通道进行消息下发。当开发者推送请求超过厂商 QP…...

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程
目录 network 和 NetworkManager关系: 实验:编写一个扫描脚本,知道本局域网里哪些ip在使用,哪些没有使用? 使用的ip对应的mac地址都要显示出来 计算机程序执行的两种不同方式: shell语言编写扫描脚本 …...

gitee 配置ssh 公钥(私钥)
步骤1:添加/生成SSH公钥,码云提供了基于SSH协议的Git服务,在使用SSH协议访问项目仓库之前,需要先配置好账户/项目的SSH公钥。 绑定账户邮箱: git config --global user.name "Your Name" git config --glob…...

JAVA面试总结-Redis篇章(七)——数据淘汰策略
JAVA 面试总结-数据淘汰策略...

[SQL挖掘机] - 算术函数 - round
介绍: 当谈到 SQL 中的 round 函数时,它用于将一个数值四舍五入到指定的小数位数。 用法: round 函数的用法如下: round(number, decimals)其中,number 是要进行四舍五入的数值,decimals 是要保留的小数位数。round 函数接受两…...

php-golang-rpc spiral/goridge库和php spiral/goridge2.4.5实践
golang 代码: package main import ( "fmt" "net" "net/rpc" "github.com/spiral/goridge/v2" ) type App struct{} func (*App) Hi(name string, r *string) error { *r fmt.Sprintf("hello %s!", name) re…...

关于Kubernetes的一些零碎想法
关于Kubernetes的一些零碎想法 容器集群管理系统与容器编排系统 很多使用Kubernetes的企业可能没有认识到Kubernetes最重要的特点。许多企业将其视为一种容器集群管理系统(container management system),只使用其管理容器的能力。然而&#x…...

C—数据的储存(下)
文章目录 前言🌟一、练习一下🌏1.例一🌏2.例二🌏3.例三🌏4.例四 🌟二、浮点型在内存中的储存🌏1.浮点数🌏2.浮点数存储💫(1).二进制浮点数&#x…...

「软件测试面试干货」2023年软件测试面试题大全(持续更新)附答案..
先卖个关子,如果你是面试官,你希望招一个什么样的人进来? 如果这个问题搞明白了,那么可以说测试岗位的面试,就变得非常轻松了。 按照一般的惯例,面试官都会让你自我介绍,介绍你的项目经验&…...

YOLOv2论文对比总结
1、高分辨率图片效果提升 2、Anchor 3、Loss函数 4、小目标友好...

数据中心机房机柜配电新模式的探讨与选型
安科瑞 华楠 摘 要:对数据中心机房列头柜配电方式特征和问题进行深入研究,分析机房末端配电安全性及可用性,主要阐述了数据中心机房机柜配电新模式。 关键词:数据中心;机房机柜;配电模式 1 原始配电方案 …...

Redis未授权访问漏洞
前言 传统数据库都是持久化存储到硬盘中,所以执行某些业务时传统数据库并不是很理想。redis等数据存储在内存中的数据库就应允而生了。基于内存的Redis读速度是110000次/s,写速度是81000次/s 。但是基于内存的缺点就是断电即失,如果服务器产生了意外…...

Python 各种进制转换
def binary_to_decimal(binary_number):#2进制转换成10进制return int(binary_number, 2) def hex_to_decimal(binary_number):#hexadecimal #16进制转换成10进制return int(binary_number, 16) def octal_to_decimal(binary_number):#8进制转换成10进制return int(binary_numb…...

关于K8s的Pod的详解(一)
关于K8s的Pod的详解(一) Pod和API server的通信加快Pod启动更改Pod的资源Pod 的持久卷的单个访问模式Pod 拓扑分布约束Pod 拓扑分布中的最小域数 Pod 作为k8s创建,调度,管理的基本单位。由上级的Controller对Node上安装的Kubelet发…...

Vue3通透教程【十六】TS编译配置
文章目录 🌟 写在前面🌟 初始化配置文件⭐ target⭐ module⭐ lib⭐ types/node⭐ include⭐ outDir🌟 写在最后 🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更…...

OpenCV系列__chapter2
这里写目录标题 1 图像加减乘除位运算1.1 加法 img cv2.add(img1, img2)1.2 减法 img cv2.subtract(img1, img2)1.3 乘法 img cv2.multiply(img1, img2)1.4 除法 img cv2.divide(img1, img2)1.5 位运算 cv2.bitwise_and() 2 图像增强2.1 线性变换2.2 非线性变换 3 图像几何…...

Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
目录 Chat GPT是什么 初学者怎么使用Chat GPT 使用Chat GPT需要注意什么 一些简单的prompt示例 Chat GPT是什么 Chat GPT是由OpenAI开发的一种大型语言模型,它基于GPT(Generative Pre-trained Transformer)架构。GPT是一种基于深度学习的…...

hcip mgre与rip实验
要求: 1.toop搭建 2.IP地址规划 R1g 0/0/1 192.168.1.1 24 s 4/0/0 188.0.0.2 24 t:10.0.0.1 24R2 s 4/0/0 188.0.0.1 24 s 4/0/1 188.0.1.1 24 s 3/0/0 188.0.2.1 24 loop0 8.8.8.8 24 t:10.0.0.2 24 R3g…...

骨传导耳机对身体有没有别的危害?骨传导耳机有什么好处?
骨传导耳机对身体有没有别的危害? 在此之前,我们先了解一下骨传导的原理:骨传导就跟它的名字一样通过骨头传声,主要是借助头部颅骨传递到听觉中枢,这种传播方式省略了直接接触耳道和耳膜。打个比方,就是我们…...

c++11/c++98动态规划入门第5课,经典DP问题 --- 区间
第1题 取数问题 查看测评数据信息 有一排N个数,你和小明2个人玩游戏,每个人轮流从2端取数,每次可以从左或右取,不能从中间取。你取的所有的数的和是你的得分,小明取的所有的数的和是小明的得分。如果你先取&#x…...

vue中重新获取数据导致页面加长,要求在页面更新之后浏览器滚动条滚动到之前浏览记录的位置。以及获取当前页面中是哪个元素产生滚动条的方法。
目前的页面样式为: 代码是: <section id"detailSection"><el-tableref"multipleTable":data"logDetailList"style"width: 650px;margin:20px auto;"id"dialogDetail":show-header"fals…...