Kubernetes(k8s) 集群的快速部署

实验目的

本实验旨在通过 Kubeadm 工具快速部署一个 Kubernetes 1.28.2 集群,包含 1 个 Master 节点和 2 个 Worker 节点,并验证集群的基本功能。实验涉及以下关键步骤:

  1. 环境准备:配置主机名、关闭防火墙、禁用 SELinux、设置时区、关闭 Swap 等。

  2. 安装 Docker:使用高版本 Docker(27.3.1)并配置镜像加速。

  3. 安装 CRI-Docker:解决 Kubernetes 1.28+ 对 Docker 的支持问题。

  4. 部署 Kubernetes:通过 kubeadm 初始化 Master 节点并加入 Worker 节点。

  5. 安装网络插件:使用 Flannel 提供 Pod 网络通信。

拓扑图

主机名

ip

硬件最低要求

master

10.1.1.85

2核,2G

node1

10.1.1.86

1核,1G

node2

10.1.1.79

1核,1G

配置步骤

前期准备(三台机子都需要,所以可以克隆)

(1)修改主机名

hostnamectl set-hostname  xxx

exec bash

为了避免做dns,在/etc/hosts 文件中记录主机名

(2)关闭防火墙,安装iptables

 systemctl stop firewalld

 systemctl disable firewalld

(3)安装iptables

 yum -y install iptables-services

各节点启动

systemctl start iptables

清空规则

iptables -F

开机启动

systemctl enable iptables

 (4)禁用selinux

 setenforce 0

 sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

 (5) 设置时区

timedatectl set-timezone Asia/Shanghai

 (6)关闭 swap 分区

swapoff -a

sed -i 's:/dev/mapper/rl-swap:#/dev/mapper/rl-swap:g' /etc/fstab

 (7) 安装 ipvs

 yum install -y ipvsadm ipset

 (8)加载 bridge

 yum install -y epel-release

yum install -y bridge-utils

 modprobe br_netfilter

 echo 'br_netfilter' >> /etc/modules-load.d/bridge.conf

 echo 'net.bridge.bridge-nf-call-iptables=1' >> /etc/sysctl.conf

 echo 'net.bridge.bridge-nf-call-ip6tables=1' >> /etc/sysctl.conf

 echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf

 sysctl -p

 (9)添加 docker-ce yum 源

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

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

sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

 (10)安装docker(27.3.1)

yum -y install docker-ce

注:不一定是这个版本,只是提醒一下,我们安装的docker 是高版本;

如果下面不想使用cri-docker ,安装的docker 版本不要高于20.10,因为kubeadm-1.23.6 不支持太高的版本;

(11) 配置 daemon.json  重要的是配置源

 配置docker守护进程,创建docker服务目录

cat > /etc/docker/daemon.json << EOF

{

  "data-root": "/data/docker",

  "exec-opts": ["native.cgroupdriver=systemd"],

  "log-driver": "json-file",

  "log-opts": {

    "max-size": "100m",

    "max-file": "100"

  },

  "registry-mirrors": [

    "https://docker.m.daocloud.io",

    "https://docker.hcp.cloud",

    "https://docker.unsee.tech",

    "https://docker.ipanel.live",

    "http://mirrors.ustc.edu.cn",

    "https://docker.chenby.cn",

    "http://mirror.azure.cn",

    "https://dockerpull.org",

    "https://dockerhub.icu",

    "https://hub.rat.dev"

  ]

}

EOF

mkdir -p /etc/systemd/system/docker.service.d

(12) 重启docker服务

systemctl daemon-reload && systemctl restart docker && systemctl enable docker

(13)上传CRI-Docker插件

(或者通过命令下载wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.9/cri dockerd-0.3.9.amd64.tgz)

下面是我的飞书资源下载链接

Docs

(14)解压CRI-Dockerd插件,将解压后的cri-dockerd可执行文件复制到/usr/bin/目录,并设置执行权限

tar -xf cri-dockerd-0.3.9.amd64.tgz

cp cri-dockerd/cri-dockerd /usr/bin/

chmod +x /usr/bin/cri-dockerd

(15)配置CRI-Docker服务文件

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.service

[Unit]

Description=CRI Interface for Docker Application Container Engine

Documentation=https://docs.mirantis.com

After=network-online.target firewalld.service docker.service

Wants=network-online.target

Requires=cri-docker.socket

[Service]

Type=notify

ExecStart=/usr/bin/cri-dockerd --network-plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.8

ExecReload=/bin/kill -s HUP $MAINPID

TimeoutSec=0

RestartSec=2

Restart=always

StartLimitBurst=3

StartLimitInterval=60s

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

TasksMax=infinity

Delegate=yes

KillMode=process

[Install]

WantedBy=multi-user.target

EOF

(16)添加 cri-docker 套接字,创建CRI-Docker socket文件

cat <<"EOF" > /usr/lib/systemd/system/cri-docker.socket

[Unit]

Description=CRI Docker Socket for the API

PartOf=cri-docker.service

[Socket]

ListenStream=%t/cri-dockerd.sock

SocketMode=0660

SocketUser=root

SocketGroup=docker

[Install]

WantedBy=sockets.target

EOF

(17)重新加载systemd守护进程,启用CRI-Docker服务,启动该服务,并检查服务是否处于活动状态。

systemctl daemon-reload

systemctl enable cri-docker

systemctl start cri-docker

systemctl is-active cri-docker

(18)添加 kubeadm yum 源

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

(19)安装kubernetes 1.28.2

yum install -y kubelet-1.28.2 kubectl-1.28.2 kubeadm-1.28.2    这个只是告知怎么在安装的过程中选择版本

yum -y install kubelet kubeadm kubeadm

systemctl enable kubelet.service

kubelet 刚安装完成后,通过 systemctl start kubelet 方式是无法启动的,需要加入节点 或初始化为 master 后才可启动成功。

以上的内容三台都要做;所以偷懒的办法就是,做好一台克隆2个,改ip,改主机名就行。

在master节点的操作

(1)生成默认的初始化配置文件init-config.yaml

kubeadm config print init-defaults > init-config.yaml

(2)编辑配置文件

vi init-config.yaml

apiVersion: kubeadm.k8s.io/v1beta3

bootstrapTokens:

- groups:

  - system:bootstrappers:kubeadm:default-node-token

  token: abcdef.0123456789abcdef

  ttl: 24h0m0s

  usages:

  - signing

  - authentication

kind: InitConfiguration

localAPIEndpoint:

  advertiseAddress: 10.1.1.85

  bindPort: 6443

nodeRegistration:

  criSocket: unix:///var/run/cri-dockerd.sock

  imagePullPolicy: IfNotPresent

  name: master

  taints: null

---

apiServer:

  timeoutForControlPlane: 4m0s

apiVersion: kubeadm.k8s.io/v1beta3

certificatesDir: /etc/kubernetes/pki

clusterName: kubernetes

controllerManager: {}

dns: {}

etcd:

  local:

    dataDir: /var/lib/etcd

imageRepository: registry.aliyuncs.com/google_containers

kind: ClusterConfiguration

kubernetesVersion: 1.28.2

networking:

  dnsDomain: cluster.local

  serviceSubnet: 10.96.0.0/12

  podSubnet: 10.244.0.0/16

scheduler: {}

(3)列出初始化集群所需的镜像并拉取

kubeadm config images list --config=init-config.yaml

kubeadm config images pull --config=init-config.yaml

注:如果下载镜像失败,尝试手动下载;举例如下:

ctr -n k8s.io images pull registry.aliyuncs.com/google_containers/kube-apiserver:v1.23.0

(4)初始化K8S集群

kubeadm init --config=init-config.yaml

(5)创建.kube目录,复制管理员配置文件,修改文件权限

mkdir -p  $HOME/.kube

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

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

(6)将各节点加入到集群(注意要修改成自己的节点信息,初始化集群时可以看到)

kubeadm join 10.1.1.85:6443 \

  --token abcdef.0123456789abcdef \

  --discovery-token-ca-cert-hash sha256:15612baa3473388167c8ff2ca2ff06474909c9f1329d84e68f2966299347a62c \

  --cri-socket unix:///var/run/cri-dockerd.sock

(7)查看集群中的节点状态

kubectl get nodes

(8)上传flannel网络插件(也可以用下面的命令下载)

Docs

(9)部署Pod网络

wget -L https://github.com/flannel-io/flannel/releases/latest/download/kube flannel.yml

kubectl apply -f kube-flannel.yml

使用kubectl get nodes查看集群中的节点状态,确认所有节点都已加入并处于Ready状态。使用kubectl get pods -n kube-system查看kube-system命名空间下的Pod状态,确认所有Pod都在运行

kubectl get nodes -o wide

kubectl get pod -n kube-system

至此,通过Kubeadm快速安装Kubernetes集群已经完成。

实验结论

本实验通过标准化流程完成了 Kubernetes 集群的快速部署,验证了集群的基本功能(节点管理、网络通信)。实验过程中遇到的典型问题(如运行时兼容性、镜像拉取)通过替换组件和配置镜像源解决,为后续深入学习 Kubernetes 运维和开发奠定了基础。

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

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

相关文章

7年经验的Java程序员的技术知识概览(及分阶段学习计划、资源推荐、职业发展建议)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 **一、技术栈全景与深度要求****1. 核心Java…

28、.NET 中元数据是什么?

在.NET中&#xff0c;元数据&#xff08;Metadata&#xff09;是描述程序结构和类型信息的二进制数据集合&#xff0c;它是.NET运行时&#xff08;CLR&#xff09;的核心基础组件之一&#xff0c;用于支持程序加载、类型解析、反射、安全校验等关键功能。以下是其核心特性和作用…

Idea中实用设置和插件

目录 一、Idea使用插件 1.Fitten Code智能提示 2.MyBatisCodeHelperPro 3.HighlightBracketPair‌ 4.Rainbow Brackets Lite 5.GitToolBox(存在付费) 6.MavenHelperPro 7.Search In Repository 8.VisualGC(存在付费) 9.vo2dto 10.Key Promoter X 11.CodeGlance…

Linux新手快速入门指南

Linux新手快速入门指南&#xff1a;从零到熟练的简明路线图 对于刚接触Linux的新手而言&#xff0c;这个开源世界既充满机遇又令人望而生畏。本文将通过系统化的学习路径和实战技巧&#xff0c;帮助您快速突破入门难关&#xff0c;掌握Linux核心技能。 一、突破认知误区&#x…

交叉编译paho.mqtt.c和paho.mqtt.cpp(MQTT客户端)

一、参考资料 【MQTT】paho.mqtt.cpp 库的 介绍、下载、交叉编译、MQTT客户端例子源码-CSDN博客 【MQTT】paho.mqtt.c 库的“介绍、下载、交叉编译” 详解&#xff0c;以及编写MQTT客户端例子源码-CSDN博客 二、准备工作 1. 重要说明 paho.mqtt.cpp与paho.mqtt.c&#xff…

Flink 源码编译

打包命令 打包整个项目 mvn clean package -DskipTests -Drat.skiptrue打包单个模块 mvn clean package -DskipTests -Drat.skiptrue -pl flink-dist如果该模块依赖其他模块&#xff0c;可能需要先将其他模块 install 到本地&#xff0c;如果依赖的模块的源代码有修改&#…

【Agent实战】从0到1开发一个Python 解释器 MCP SSE Server

写在前面 想象一个场景:LLM Agent(如 AutoGPT、MetaGPT 或我们自己构建的 Agent)在规划任务后,决定需要运行一段 Python 代码来处理数据或调用某个 API。它不能直接在自己的环境中执行(通常不具备这个能力,也不安全),而是需要将这段代码发送给一个专门的外部服务来执行…

HTML word属性

介绍 CSS word-spacing 属性&#xff0c;用于指定段字之间的空间&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing属性增加或减少字与字之间的空白。 注意&#xff1a; 负值是允许的。 浏览器支持 表格中的数字表示支持该属性的第一个浏览器版本号。 属…

assertEquals()

assertEquals() 是 JUnit 框架中用于进行断言操作的一个非常常用的方法&#xff0c;其主要目的是验证两个值是否相等。如果两个值不相等&#xff0c;测试就会失败&#xff0c;JUnit 会给出相应的错误信息&#xff0c;提示开发者测试未通过。下面为你详细介绍&#xff1a; 方法…

Nginx 反向代理,啥是“反向代理“啊,为啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解与配置 User 我打包了我的前端vue项目&#xff0c;上传到服务器&#xff0c;在宝塔面板安装了nginx服务&#xff0c;配置了文件 nginx.txt .运行了项目。 我想清楚&#xff0c;什么是nginx反向代理&#xff1f;是nginx作为一个中介&#xff1f;中间件来集…

用 Python 打造打篮球字符动画!控制台彩色炫酷输出,抖音搞怪视频灵感还原

一、引言&#xff1a;从抖音搞怪视频到 Python 字符动画的奇妙之旅 刷抖音时刷到一个神级操作 —— 博主用 01 数字矩阵还原了明星打篮球的经典画面&#xff0c;字符在控制台随动作节奏炫彩跳动&#xff0c;瞬间点燃了技术宅的 DNA&#xff01;作为 Python 图像处理爱好者&…

《逐梦九天:中国航天编年史》

《逐梦九天:中国航天编年史》 新华社酒泉2025年4月24日电(记者李国利、黄一宸)神舟二十号载人飞船发射4月24日取得圆满成功,中国载人航天在“东方红一号”发射55载之际开启第20次神舟问天之旅。 当日17时17分,搭载神舟二十号载人飞船的长征二号F遥二十运载火箭在酒泉卫星…

IDEA搭建环境的五种方式

一、普通的java项目 File--New--Project 选择Java&#xff0c;jdk选择1.8版本&#xff0c;然后点next 输入项目名和路径名&#xff0c;点击Finish 创建包结构&#xff0c;编写Class类 编写主方法&#xff0c;输出Hello标志完成 二、普通的javaWeb项目 Java Enterprise-- 勾选…

【黑马 微服务面试篇】

分布式事务 cap定理-Availability CAP定理-Partition tolerance BASE理论 BASE理论是对CAP的一种解决思路&#xff0c;包含三个思想&#xff1a; BasicallyAvailable&#xff08;基本可用&#xff09;&#xff1a;分布式系统在出现故障时&#xff0c;允许损失部分可用性&#…

实时数仓体系概览与架构演进

✨ 引言&#xff1a;为什么我们离不开“实时” 曾经的你可能会认为“数据分析一天一更&#xff0c;够用了”。但当你所在的公司遇上这些情况&#xff1a; 用户在投放广告后5分钟内就想知道转化效果 风控平台必须秒级判断是否拦截订单 新产品上线后一小时就需调整推荐算法策略…

基于Matlab的车牌识别系统

1.程序简介 本模型基于MATLAB,通过编程创建GUI界面&#xff0c;基于Matlab的数字图像处理&#xff0c;对静止的车牌图像进行分割并识别&#xff0c;通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等&#xff0c;并定位车牌的文字&#xff0c;实现字符的…

JAVA---面向对象(下)

重生之我开始补知识第三集 1.标准 JavaBean 要求&#xff1a; 1&#xff09;类名需要见名知意 2&#xff09;成员变量使用private修饰 3&#xff09;至少提供两个构造方法 a.无参构造方法 b.带全部参数的构造方法 4&#xff09;成员方法 a.提供每一个成员变量对应的 …

信奥赛CSP-J复赛集训(DP专题)(24):P1977 出租车拼车

信奥赛CSP-J复赛集训&#xff08;DP专题&#xff09;&#xff08;24&#xff09;&#xff1a;P1977 出租车拼车 题目背景 话说小 x 有一次去参加比赛&#xff0c;虽然学校离比赛地点不太远&#xff0c;但小 x 还是想坐出租车去。大学城的出租车总是比较另类&#xff0c;有“拼…

Windows申请苹果开发者测试证书Uniapp使用

注意事项 苹果设备,最好是iPhone XS以上,要不然下载不了Apple DeveloperopenSSL 要是V1版本的来生成证书,要不然HBuilder报错按步骤来,生成证书,生成标识符,添加测试设备,生成描述性文件注册苹果开发者账号 (如果有苹果账号直接登录) 苹果开发者官网 开通付费 点击右上…

dockercompose文件仓库

mysql version: 3 # 使用docker-compose的版本&#xff0c;根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限&#xff08;确保MySQL容器可以读写这些目录&#xff09; # chmod 777 /ho…