微服务 云原生:搭建 K8S 集群

为节约时间和成本,仅供学习使用,直接在两台虚拟机上模拟 K8S 集群搭建

踩坑之旅

系统环境:CentOS-7-x86_64-Minimal-2009 镜像,为方便起见,直接在 root 账户下操作,现实情况最好不要这样做。

基础准备

  1. 关闭防火墙
systemctl disable firewalld
systemctl stop firewalld
  1. 关闭 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
  1. 禁用 Swap
# 临时关闭 Swap
swapoff -a# 永久禁用 Swap
vi /etc/fstab
在swap分区这行前加 # 注释掉
#/dev/mapper/centos-swap swap
  1. 设置存储库
# 安装 yum-utils 包, 并设置稳定存储库
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装配置 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
  1. 安装 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 集群

  1. 修改 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 不同,不同软件的操作不同,具体操作此处此处不做赘述。

  1. 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
  1. Worker 端安装 kubeadm、kubelet
# 安装
yum install -y kubeadm kubelet# 启动 kubelet 服务
systemctl enable kubelet && systemctl start kubelet
  1. 启动容器运行时 containerd
# Master 端和 Worker 端都要操作
mv /etc/containerd/config.toml /etc/containerd/config.bak
containerd config default | sudo tee /etc/containerd/config.toml
systemctl restart containerd
  1. 配置主机名,需要同时在 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
    
  2. 初始化 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
  1. 将 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
  1. 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):
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

pycharm——涟漪散点图

from pyecharts import options as opts from pyecharts.charts import EffectScatterc (EffectScatter().add_xaxis( ["高等数学1&#xff0c;2","C语言程序设计","python程序设计","大数据导论","数据结构","大数据…

CentOS 8 上安装 Nginx

Nginx是一款高性能的开源Web服务器和反向代理服务器&#xff0c;以其轻量级和高效能而广受欢迎。在本教程中&#xff0c;我们将学习在 CentOS 8 操作系统上安装和配置 Nginx。 步骤 1&#xff1a;更新系统 在安装任何软件之前&#xff0c;让我们先更新系统的软件包列表和已安…

opencv 31-图像平滑处理-方框滤波cv2.boxFilter()

方框滤波&#xff08;Box Filtering&#xff09;是一种简单的图像平滑处理方法&#xff0c;它主要用于去除图像中的噪声和减少细节&#xff0c;同时保持图像的整体亮度分布。 方框滤波的原理很简单&#xff1a;对于图像中的每个像素&#xff0c;将其周围的一个固定大小的邻域内…

HTTP、HTTPS协议详解

文章目录 HTTP是什么报文结构请求头部响应头部 工作原理用户点击一个URL链接后&#xff0c;浏览器和web服务器会执行什么http的版本持久连接和非持久连接无状态与有状态Cookie和Sessionhttp方法&#xff1a;get和post的区别 状态码 HTTPS是什么ssl如何搞到证书nginx中的部署 加…

Sqli-labs1~65关 通关详解 解题思路+解题步骤+解析

Sqli-labs 01关 (web517) 输入?id1 正常 输入?id1 报错 .0 输入?id1-- 正常判断是字符型注入&#xff0c;闭合方式是这里插一句。limit 100,1是从第100条数据开始&#xff0c;读取1条数据。limit 6是读取前6条数据。 ?id1 order by 3-- 正常判断回显位有三个。?id…

ChatGPT在法律行业的市场潜力

​ChatGPT现在已经成为我们的文字生成辅助工具、搜索引擎助手&#xff0c;许多体验过它的朋友会发现对它越来越依赖&#xff0c;并将其逐渐融入到自己的日常工作、生活。但有一点值得注意&#xff1a;这种人工智能除了技术可行、经济价值可行还要与相关规范即人类普遍的价值观念…

轻松批量文件改名!一键翻译重命名文件夹/文件,省时高效!」

繁忙的数字时代&#xff0c;我们经常需要处理大量的文件和文件夹。而手动逐个更改文件名不仅费时费力&#xff0c;还容易出错。因此&#xff0c;我们为您带来了一款强大的工具——批量文件改名软件&#xff01;现在&#xff0c;您可以一键翻译重命名文件夹和文件&#xff0c;轻…

csdn新星计划vue3+ts+antd赛道——利用inscode搭建vue3(ts)+antd前端模板

文章目录 ⭐前言⭐利用inscode免费开放资源&#x1f496; 在inscode搭建vue3tsant项目&#x1f496; 调整配置&#x1f496; antd 国际化配置&#x1f496; 用户store&#x1f496; 路由权限&#x1f496; 预览 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享…

Day10-作业(SpringBootWeb案例)

作业1&#xff1a;完成课上预留给大家自己完成的功能 【部门管理的修改功能】 注意&#xff1a; 部门管理的修改功能&#xff0c;需要开发两个接口&#xff1a; 先开发根据ID查询部门信息的接口&#xff0c;该接口用户查询数据并展示 。(一定一定先做这个功能) 再开发根据ID…

YOLOv5改进系列(18)——更换Neck之AFPN(全新渐进特征金字塔|超越PAFPN|实测涨点)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

[JAVA基础]自动拆装箱NPE问题

1.自动拆装箱场景 自动装箱 当把字面量转换成包装类的时候会自动装箱 比如&#xff1a; Integer a 1; Integer b 1; 自动拆箱 当你对包装类的对象进行运算&#xff08;如加法、减法等&#xff09;时&#xff0c;Java会自动进行拆箱操作。拆箱是将包装类型的对象转换为相应的基…

华为云hcip核心知识笔记(数据库服务规划)

华为云hcip核心知识笔记&#xff08;数据库服务规划&#xff09; 1.云数据接库优势 1.1云数据库优点有&#xff1a; 易用性强&#xff1a;能欧快速部署和运行 高扩展&#xff1a;开放式架构和云计算存储分离 低成本&#xff1a;按需使用&#xff0c;成本更加低廉 2.云数据库r…

react中的高阶组件理解与使用

一、什么是高阶组件&#xff1f; 其实就是一个函数&#xff0c;参数是一个组件&#xff0c;经过这个函数的处理返回一个功能增加的组件。 二、代码中如何使用 1&#xff0c;高级组件headerHoc 2&#xff0c;在普通组件header中引入高阶组件并导出高阶组件&#xff0c;参数是普…

基于jeecg-boot的flowable流程提供一种动态设置发起人部门负责人的方式

更多功能看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbacheng/nbcio-boot 前端代码&#xff1a;https://gitee.com/nbacheng/nbcio-vue.git 在线演示&#xff08;包括H5&#xff09; &#xff1a; http://122.227.135.243:9888 这里给大家提供一种…

安全加固服务器

根据以下的内容来加固一台Linux服务器的安全。 首先是限制连续密码错误的登录次数&#xff0c;由于RHEL8之后都不再使用pam_tally.so和pam_tally2.so&#xff0c;而是pam_faillock.so 首先进入/usr/lib64/security/中查看有什么模块&#xff0c;确认有pam_faillock.so 因为只…

【雕爷学编程】MicroPython动手做(28)——物联网之Yeelight 5

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…

HTML中元素和标签有什么区别?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 标签&#xff08;Tag&#xff09;⭐元素&#xff08;Element&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&a…

Rust操作MySQL

查询 本部分是对 「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录 经常使用的时间处理库&#xff1a; chrono 流式查询使用&#xff1a; query_iter 输出到Vec使用&#xff1a; query 映射到结构体使用&#xff1a; query_map 获取单条数据使用&#xff1a; query_first 命名…

中兴服务器支持百度“文心一言”,助力AI产业发展

前段时间&#xff0c;中兴和百度正式对外宣布中兴服务器将会支持百度“文心一言”&#xff0c;为其提供更加强劲的算力支撑&#xff0c;从而加速“文心一言”的完事升级与更新迭代&#xff0c;助力AI产业化应用和生态的繁荣发展。   “文心一言”是百度基于文心大模型技术推出…

Centos7搭建Apache Storm 集群运行环境

文章目录 1. 安装 Java2. 下载并解压 Storm3. 配置环境变量4. 配置 ZooKeeper5. 配置 Stormstorm.yaml自定义 storm.yamlstorm-env.shlogback/cluster.xml 6. 启动 Storm 集群7. 验证 1. 安装 Java Storm 运行在 Java 平台上&#xff0c;因此需要先安装 Java。你可以使用以下命…