当前位置: 首页 > 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;…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...