当前位置: 首页 > news >正文

kubernetes 集群搭建(二进制方式)

Kubernetes 作为当今最流行的容器编排平台,提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外,直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权,并且适用于那些希望深入理解 Kubernetes 内部工作原理的人。本文将详细介绍如何通过二进制方式搭建一个功能齐全的 Kubernetes 集群,并分享一些实用技巧和注意事项。

准备工作

在开始之前,请确保您的环境满足以下条件:

  • 操作系统:支持的操作系统包括 Ubuntu、CentOS 等主流 Linux 发行版。
  • 硬件要求:至少两台机器(一台作为 Master 节点,另一台或更多作为 Worker 节点),每台机器建议配置至少 2GB RAM 和 2 CPU 核心。
  • 网络连接:所有节点之间需要能够互相通信,最好是在同一个局域网内。
  • 时间同步:确保所有节点的时间一致,可以安装 NTP 服务来自动同步时间。
  • 防火墙设置:根据实际情况调整防火墙规则,允许必要的端口访问(如 6443, 2379-2380, 10250, 10251, 10252 等)。

安装依赖项

在所有节点上执行如下命令以更新软件包列表并安装必要的依赖项:

Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
CentOS
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

安装 Docker(使用国内镜像源)

为了加快 Docker 的安装速度,我们将使用阿里云提供的 Docker 源。

Ubuntu/Debian

# 添加阿里云 Docker 源
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install -y docker-ce

CentOS

# 创建或编辑 /etc/yum.repos.d/docker-ce.repo 文件
cat <<EOF | sudo tee /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - \$basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/\$releasever/\$basearch/stable
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
EOF
sudo yum makecache fast
sudo yum install -y docker-ce

启动并启用 Docker 服务:

sudo systemctl start docker
sudo systemctl enable docker

下载 Kubernetes 组件

接下来,在所有节点上下载所需的 Kubernetes 组件(kubeletkubectlkubeadm)。虽然我们这里不使用 kubeadm 来初始化集群,但是它仍然可以用于某些辅助操作。我们将从官方 GitHub 发布页面获取这些组件的二进制文件。

下载二进制文件

假设我们要部署 Kubernetes v1.26.0 版本,可以根据官方文档找到对应的发布地址,并下载相应的 tarball 文件。然后解压并将可执行文件放置到 /usr/local/bin 目录下:

# 下载并解压 Kubernetes 二进制文件
wget https://dl.k8s.io/v1.26.0/kubernetes-server-linux-amd64.tar.gz
tar -xvf kubernetes-server-linux-amd64.tar.gz
cd kubernetes/server/bin/
sudo cp kubelet kubectl /usr/local/bin/# 设置正确的权限
sudo chmod +x /usr/local/bin/kubelet
sudo chmod +x /usr/local/bin/kubectl

对于 kubectl,还可以选择将其配置为特定版本,以便与集群保持一致:

sudo mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

配置 Master 节点

现在我们已经准备好配置 Master 节点了。请登录到您计划用作 Master 的服务器,并执行以下步骤:

初始化 etcd

etcd 是 Kubernetes 的键值存储数据库,用于保存集群状态信息。您可以选择安装独立的 etcd 实例或者使用静态 Pod 来运行 etcd。在这里我们将介绍如何使用静态 Pod 启动 etcd。

首先,创建一个名为 etcd.yaml 的文件来定义 etcd Pod 的配置:

apiVersion: v1
kind: Pod
metadata:name: etcdnamespace: kube-system
spec:hostNetwork: truecontainers:- name: etcdimage: quay.io/coreos/etcd:v3.5.0command:- "/usr/local/bin/etcd"- "--data-dir"- "/var/lib/etcd"- "--advertise-client-urls"- "http://127.0.0.1:2379"- "--listen-client-urls"- "http://0.0.0.0:2379"- "--initial-advertise-peer-urls"- "http://127.0.0.1:2380"- "--listen-peer-urls"- "http://0.0.0.0:2380"- "--initial-cluster"- "default=http://127.0.0.1:2380"- "--initial-cluster-token"- "etcd-cluster-0"- "--initial-cluster-state"- "new"volumeMounts:- mountPath: /var/lib/etcdname: etcd-storagevolumes:- hostPath:path: /var/lib/etcdname: etcd-storage

保存后,使用 kubectl 应用此配置:

kubectl apply -f etcd.yaml --kubeconfig=/etc/kubernetes/admin.conf

配置 API Server

接下来是配置 API Server。同样地,我们需要编写一个 YAML 文件来描述 API Server 的配置。以下是 apiserver.yaml 的示例内容:

apiVersion: v1
kind: Pod
metadata:name: kube-apiservernamespace: kube-system
spec:hostNetwork: truecontainers:- name: kube-apiserverimage: registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.26.0command:- "/usr/local/bin/kube-apiserver"- "--etcd-servers=http://127.0.0.1:2379"- "--service-cluster-ip-range=10.96.0.0/12"- "--insecure-bind-address=0.0.0.0"- "--secure-port=6443"- "--allow-privileged=true"- "--advertise-address=<MASTER_IP>"- "--authorization-mode=Node,RBAC"- "--enable-admission-plugins=NodeRestriction"- "--tls-cert-file=/etc/kubernetes/pki/apiserver.crt"- "--tls-private-key-file=/etc/kubernetes/pki/apiserver.key"- "--client-ca-file=/etc/kubernetes/pki/ca.crt"- "--service-account-key-file=/etc/kubernetes/pki/sa.pub"- "--service-account-signing-key-file=/etc/kubernetes/pki/sa.key"- "--service-account-issuer=https://kubernetes.default.svc.cluster.local"- "--service-account-api-audiences=api"- "--proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt"- "--proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key"- "--requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt"- "--requestheader-allowed-names=front-proxy-client"- "--requestheader-extra-headers-prefix=X-Remote-Extra-"- "--requestheader-group-headers=X-Remote-Group"- "--requestheader-username-headers=X-Remote-User"- "--kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt"- "--kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key"- "--enable-bootstrap-token-auth=true"- "--token-auth-file=/etc/kubernetes/pki/tokens.csv"- "--audit-log-maxage=30"- "--audit-log-maxbackup=3"- "--audit-log-maxsize=100"- "--audit-log-path=/var/log/kube-apiserver/audit.log"volumeMounts:- mountPath: /etc/kubernetes/pkiname: pki- mountPath: /var/log/kube-apiservername: audit-logvolumes:- hostPath:path: /etc/kubernetes/pkiname: pki- hostPath:path: /var/log/kube-apiservername: audit-log

请注意替换 <MASTER_IP> 为实际 Master 节点的 IP 地址。此外,还需要提前生成所需的证书和密钥文件,这可以通过 cfssl 工具来完成。具体步骤可以参考官方文档。

配置其他控制平面组件

除了 API Server 和 etcd 外,Kubernetes 控制平面还包括 Scheduler 和 Controller Manager。它们也可以通过静态 Pod 的方式来配置。这里不再赘述详细的配置文件,因为其结构与上述类似,只是命令参数有所不同。

启动控制平面组件

当所有的控制平面组件配置完毕后,可以使用 kubectl 来启动它们:

kubectl apply -f <component>.yaml --kubeconfig=/etc/kubernetes/admin.conf

等待几分钟直到所有组件都成功启动。

安装 Pod 网络插件

Kubernetes 需要一个 CNI (Container Network Interface) 插件来为 Pods 提供网络连接。有许多不同的 CNI 实现可供选择,例如 Flannel、Calico 等。在这里我们将使用 Flannel 作为示例:

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

等待几分钟直到所有的 Pod 都变为 Running 状态。

加入 Worker 节点

当 Master 节点成功配置并且 Pod 网络插件已安装后,就可以让其他节点加入集群了。回到 Master 节点上,使用 kubeadm token create 命令生成一个新的加入令牌,然后在每个 Worker 节点上运行如下命令来加入集群:

kubeadm join <master-ip>:<master-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>

注意,这个 token 是有时效性的,默认有效期为24小时,如果过期可以重新生成新的 token。

验证集群状态

最后,我们可以使用 kubectl get nodes 来查看当前集群中的所有节点及其状态。理想情况下,你应该看到 Master 和所有 Worker 节点都处于 Ready 状态。

kubectl get nodes

此外,还可以检查 Pod 和 Service 是否正常工作:

kubectl get pods --all-namespaces
kubectl get services --all-namespaces

注意事项

尽管通过二进制方式安装 Kubernetes 提供了更大的灵活性,但在实际应用中也要注意以下几点:

  • 安全性:确保正确设置了 RBAC 规则、网络策略等安全措施,防止潜在的安全漏洞。
  • 性能优化:合理配置资源限制和请求,避免不必要的浪费或争用。
  • 备份恢复:定期备份 etcd 数据库和其他重要配置文件,以便于灾难恢复。
  • 监控告警:集成 Prometheus、Grafana 等监控工具,实时掌握集群健康状况。
  • 日志管理:采用 ELK Stack 或其他日志聚合方案来集中收集和分析日志信息。

结语

感谢您的阅读!如果您对 Kubernetes 或者二进制方式搭建集群有任何疑问或见解,欢迎继续探讨。

相关文章:

kubernetes 集群搭建(二进制方式)

Kubernetes 作为当今最流行的容器编排平台&#xff0c;提供了强大的功能来管理和扩展容器化应用。除了使用 kubeadm 等工具简化集群的创建过程外&#xff0c;直接通过二进制文件安装 Kubernetes 组件也是一种常见的方法。这种方式给予用户更多的控制权&#xff0c;并且适用于那…...

linux平台RTMP|RTSP播放器如何回调SEI数据?

我们在对接Linux平台RTMP|RTSP播放的时候&#xff0c;有遇到这样的技术需求&#xff0c;合作企业在做无人机视觉分析场景的时候&#xff0c;除了需要低延迟的拿到解码后的RGB|YUV数据&#xff0c;然后投递给他们自己的视觉算法处理模块外&#xff0c;还需要播放器支持SEI的回调…...

Vue uni-app免手动import

unplugin-auto-import 是一个流行的 JavaScript/TypeScript 插件&#xff0c;可以自动导入常用的库、API 或自定义函数&#xff0c;减少手动书写 import 语句的繁琐操作。它常用于 Vue、React 等框架&#xff0c;帮助开发者提高效率和减少样板代码。 核心功能&#xff1a; 自…...

7. 计算机视觉

计算机视觉&#xff08;Computer Vision&#xff0c;简称 CV&#xff09;是人工智能&#xff08;AI&#xff09;领域中的一个重要分支&#xff0c;旨在使计算机能够像人类一样“看”并理解数字图像或视频。它结合了计算机科学、数学、图像处理、模式识别、机器学习等多个学科&a…...

在服务器进行docker部署频繁提示permission denied

当你频繁遇到permission denied&#xff0c;证明当前用户的权限不够 可以参考如下操作&#xff1a; 1.创建用户组docker sudo groupadd docker把当前用户添加到docker用户组中 sudo usermod -aG docker $USER优点&#xff1a; 可以在不使用sudo的情况下运行docker命令...

c/c++ static

定义 修饰普通变量&#xff0c;修改变量的存储区域和生命周期&#xff0c;使变量存储在静态区&#xff0c;在 main 函数运行前就分配了空间&#xff0c;如果有初始值就用初始值初始化它&#xff0c;如果没有初始值系统用默认值初始化它。修饰普通函数&#xff0c;表明函数的作…...

C#中System.Text.Json:从入门到精通的实用指南

一、引言 在当今数字化时代&#xff0c;数据的高效交换与处理成为软件开发的核心环节。JSON&#xff08;JavaScript Object Notation&#xff09;凭借其简洁、轻量且易于读写的特性&#xff0c;已然成为数据交换领域的中流砥柱。无论是前后端数据交互&#xff0c;还是配置文件…...

内存故障原因与诊断(Reasons and Diagnosis of Memory Failure)

内存故障原因与诊断 您是否曾遇到过电脑无法启动、黑屏、死机&#xff0c;或者系统卡顿的情况&#xff1f;这些问题看起来很复杂&#xff0c;实际上大多数都是内存故障引起的。内存是电脑的核心组成部分之一&#xff0c;任何小东西问题都可能导致系统死机&#xff0c;严重时甚…...

[操作系统] 进程状态详解

在操作系统中&#xff0c;进程是程序执行的基本单位&#xff0c;操作系统负责管理进程的生命周期。为了高效地管理进程&#xff0c;操作系统通过定义不同的进程状态来表示进程在不同时间点的行为。本文将详细介绍常见的进程状态及其相互之间的转换过程。 进程状态概述 在kerne…...

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…...

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发&#xff08;源码&#xff09;3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png) 前言 .NET 多平台应用 UI (.NET MA…...

Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)

Profiles Profile 是一个以名称标识的集合&#xff0c;用于管理 密码 和 资源限制。 每个用户都对应一个profiles&#xff0c;可以通过 CREATE USER 或 ALTER USER 命令分配给用户。 Profiles 可以启用或禁用。 Profiles 可以关联到默认的 DEFAULT Profile。 密码管理&…...

C语言:位段

位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char &#xff08;属于整形家族&#xff09;类型 2. 位段的空间上是按照需要以4个字节&#xff08; 类型 int &#xff09;或者1个字节&#xff08; char &#xff09;的方式来开辟的。 3. 位段涉及…...

MPLS VPN 原理与配置

一.简介 MPLS&#xff0c;称之为多协议标签交换&#xff0c;在九十年代中期被提出来&#xff0c;用于解决传统IP报文依赖查表转发而产生的瓶颈&#xff0c;现多用于VPN技术&#xff0c;MPLS报头封装在数据链路层之上&#xff0c;网络层之下。本文为结合了华为技术和新华三技术…...

稳定的通信桥梁,CCLINKIE转ModbusTCP网关实现AGV运输的光速效应

三菱PLC与AGV机器人搬运车通过稳联技术协议转换网关建立通信 一、现场情况概述 - 三菱PLC&#xff1a;使用CC-Link IE协议进行通信。 - AGV机器人搬运车&#xff1a;使用Modbus TCP协议进行通信。 - 协议转换网关&#xff1a;使用稳联技术的协议转换网关将PLC和AGV连接&#xf…...

Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences

Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路2. 代码实现 题目链接&#xff1a;3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路 这一题不需要连续性&#xff0c;因此我们就是考虑取得子串长度为别为1…...

第2章:Python TDD构建Dollar类基础

写在前面 这本书是我们老板推荐过的&#xff0c;我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后&#xff0c;我突然思考&#xff0c;对于测试开发工程师来说&#xff0c;什么才更有价值呢&#xff1f;如何让 AI 工具更好地辅助自己写代码&#xff0c;或许…...

【算法学习笔记】34:扩展欧几里得算法

裴蜀定理 描述 对于任意正整数 a a a、 b b b&#xff0c;一定存在整数系数 x x x&#xff0c; y y y&#xff0c;使得&#xff1a; a x b y g c d ( a , b ) ax by gcd(a, b) axbygcd(a,b) 并且 g c d ( a , b ) gcd(a, b) gcd(a,b)是对于任意的系数 x x x和 y y y放在…...

云原生周刊:K8s 生产环境架构设计及成本分析

开源项目推荐 KubeZoneNet KubeZoneNet 旨在帮助监控和优化 Kubernetes 集群中的跨可用区&#xff08;Cross-Zone&#xff09;网络流量。这个项目提供了一种简便的方式来跟踪和分析 Kubernetes 集群中跨不同可用区的通信&#xff0c;帮助用户优化集群的网络架构、提高资源利用…...

WGAN - 瓦萨斯坦生成对抗网络

1. 背景与问题 生成对抗网络&#xff08;Generative Adversarial Networks, GANs&#xff09;是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分&#xff1a;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项&#xff0c;设置文件夹共享为总是启用&#xff0c;点击添加&#xff0c;可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download&#xff08;这是我共享的文件夹&#xff09;&…...

spring boot使用HttpServletResponse实现sse后端流式输出消息

1.以前只是看过SSE的相关文章&#xff0c;没有具体实践&#xff0c;这次接入AI大模型使用到了流式输出&#xff0c;涉及到给前端流式返回&#xff0c;所以记录一下。 2.resp要设置为text/event-stream resp.setContentType("text/event-stream"); resp.setCharacter…...

uniapp获取当前位置和经纬度信息

1.1. 获取当前位置和经纬度信息&#xff08;需要配置高的SDK&#xff09; 调用uni-app官方API中的uni.chooseLocation()&#xff0c;即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...

【Redis】Redis从入门到实战:全面指南

Redis从入门到实战:全面指南 一、Redis简介 Redis(Remote Dictionary Server)是一个开源的、基于内存的键值存储系统,它可以用作数据库、缓存和消息代理。由Salvatore Sanfilippo于2009年开发,因其高性能、丰富的数据结构和广泛的语言支持而广受欢迎。 Redis核心特点:…...

视觉slam--框架

视觉里程计的框架 传感器 VO--front end VO的缺点 后端--back end 后端对什么数据进行优化 利用什么数据进行优化的 后端是怎么进行优化的 回环检测 建图 建图是指构建地图的过程。 构建的地图是点云地图还是什么信息的地图&#xff1f; 建图并没有一个固定的形式和算法…...

【Axure高保真原型】图片列表添加和删除图片

今天和大家分享图片列表添加和删除图片的原型模板&#xff0c;效果包括&#xff1a; 点击图片列表的加号可以显示图片选择器&#xff0c;选择里面的图片&#xff1b; 选择图片后点击添加按钮&#xff0c;可以将该图片添加到图片列表&#xff1b; 鼠标移入图片列表的图片&…...

Razor编程中@Helper的用法大全

文章目录 第一章&#xff1a;Helper基础概念1.1 Helper的定义与作用1.2 Helper的基本语法结构1.3 Helper与HtmlHelper的区别 第二章&#xff1a;基础Helper用法2.1 无参数Helper2.2 带简单参数的Helper2.3 带默认值的参数2.4 使用模型作为参数 第三章&#xff1a;高级Helper用法…...

html - <mark>标签

<mark> 标签在HTML中用于高亮显示文本&#xff0c;通常用于突出显示某些重要的部分。它的默认样式通常是背景色为黄色&#xff0c;但你可以通过CSS自定义其外观。 1. 基本用法 <mark> 标签用于标记文本的高亮显示。它常用于搜索结果中&#xff0c;突出显示匹配的…...

GitHub 趋势日报 (2025年06月04日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 1757 onlook 870 nautilus_trader 702 ChinaTextbook 582 system-design-primer 4…...