Ubuntu 系统上部署 Kubernetes 的完整指南


在这里插入图片描述


Ubuntu 系统上部署 Kubernetes 的完整指南

  • 一、环境准备(Ubuntu 22.04/24.04)
    • 1. 系统初始化
    • 2. 安装容器运行时(containerd)
    • 3. 安装 Kubernetes 组件(kubeadm, kubelet, kubectl)
  • 二、部署 Kubernetes 集群
    • 1. 初始化主节点
    • 2. 添加工作节点
    • 3. 验证集群状态
  • 三、部署应用示例
    • 1. 创建 Deployment
    • 2. 创建 Service
    • 3. 部署应用
  • 四、运维管理
    • 1. 资源监控
    • 2. 日志管理
    • 3. 自动扩缩容
  • 五、生产级最佳实践
    • 1. 高可用控制平面
    • 2. 持久化存储
  • 3. 安全加固
  • 六、备份与灾难恢复
    • 1. 备份 etcd 数据
    • 2. 恢复 etcd 数据
  • 七、常见问题排查
    • 1. Pod 处于 Pending 状态
    • 2. 服务无法访问


以下是 在全新安装的 Ubuntu 系统上部署 Kubernetes 的完整指南,涵盖环境准备、集群部署、运维管理及生产级最佳实践,适用于开发和生产场景。


一、环境准备(Ubuntu 22.04/24.04)

1. 系统初始化

# 更新系统并安装基础工具
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl gnupg apt-transport-https ca-certificates software-properties-common# 禁用交换分区(Kubernetes 要求)
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab  # 永久禁用# 设置主机名(可选)
sudo hostnamectl set-hostname k8s-master  # 主节点
sudo hostnamectl set-hostname k8s-worker1 # 工作节点

2. 安装容器运行时(containerd)

# 安装 containerd
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd
sudo systemctl enable containerd# 验证运行时状态
sudo ctr version

3. 安装 Kubernetes 组件(kubeadm, kubelet, kubectl)

# 添加 Kubernetes 官方 GPG 密钥
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg# 添加仓库源
echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list# 安装指定版本(例如 1.28.x)
sudo apt update && sudo apt install -y kubeadm=1.28.* kubelet=1.28.* kubectl=1.28.*# 设置 kubelet 自动启动(暂不启动)
sudo systemctl enable kubelet

二、部署 Kubernetes 集群

1. 初始化主节点

# 主节点执行
sudo kubeadm init \--pod-network-cidr=192.168.0.0/16 \  # 匹配 Calico 默认配置--apiserver-advertise-address=<主节点IP> \--control-plane-endpoint=<主节点IP或负载均衡地址># 成功后按提示操作
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config# 安装网络插件(Calico)
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.27.0/manifests/calico.yaml

2. 添加工作节点

# 在工作节点执行(使用主节点初始化后生成的命令)
sudo kubeadm join <主节点IP>:6443 \--token <token> \--discovery-token-ca-cert-hash sha256:<hash>

3. 验证集群状态

kubectl get nodes  # 所有节点状态应为 Ready
kubectl cluster-info

三、部署应用示例

1. 创建 Deployment

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25ports:- containerPort: 80resources:requests:cpu: "100m"memory: "128Mi"limits:cpu: "200m"memory: "256Mi"

2. 创建 Service

# service.yaml
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80nodePort: 30080

3. 部署应用

kubectl apply -f deployment.yaml
kubectl apply -f service.yaml# 验证
kubectl get pods -o wide
curl http://<节点IP>:30080  # 应返回 Nginx 欢迎页

四、运维管理

1. 资源监控

# 安装 Metrics Server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml# 查看资源使用
kubectl top nodes
kubectl top pods

2. 日志管理

# 查看 Pod 日志
kubectl logs <pod-name> -f  # 实时日志# 安装 EFK 日志系统(生产环境)
kubectl apply -f https://raw.githubusercontent.com/elastic/cloud-on-k8s/main/config/recipes/elasticsearch/elasticsearch.yaml

3. 自动扩缩容

# 设置 Horizontal Pod Autoscaler
kubectl autoscale deployment nginx-deployment --cpu-percent=50 --min=2 --max=5

五、生产级最佳实践

1. 高可用控制平面

  • 使用 kubeadm 部署多主节点:

    # 第一个主节点初始化后,其他主节点执行:
    sudo kubeadm join <负载均衡IP>:6443 --token <token> \--discovery-token-ca-cert-hash sha256:<hash> \--control-plane
    

2. 持久化存储

	# 创建 PersistentVolume(示例使用本地存储)apiVersion: v1kind: PersistentVolumemetadata:name: local-pvspec:capacity:storage: 10GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:path: /mnt/datanodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- <特定节点主机名>

3. 安全加固

  • 启用 RBAC:

        # 创建 Role 和 RoleBindingapiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:name: pod-readerrules:- apiGroups: [""]resources: ["pods"]verbs: ["get", "list"]---apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:name: read-podssubjects:- kind: Username: dev-userroleRef:kind: Rolename: pod-readerapiGroup: rbac.authorization.k8s.io
    
  • 网络策略:

        # 限制 Pod 入站流量apiVersion: networking.k8s.io/v1kind: NetworkPolicymetadata:name: deny-all-ingressspec:podSelector: {}policyTypes:- Ingress
    

六、备份与灾难恢复

1. 备份 etcd 数据

	# 在主节点执行sudo ETCDCTL_API=3 etcdctl \--endpoints=https://127.0.0.1:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/etcd/server.crt \--key=/etc/kubernetes/pki/etcd/server.key \snapshot save /backup/etcd-snapshot.db

2. 恢复 etcd 数据

	# 停止 kube-apiserver 和 etcdsudo systemctl stop kube-apiserver etcd# 恢复快照sudo ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db \--data-dir=/var/lib/etcd-restored# 重启服务sudo systemctl start etcd kube-apiserver

七、常见问题排查

1. Pod 处于 Pending 状态

  • 可能原因:

    • 资源不足(CPU/内存)。

    • 没有可用节点匹配调度规则。

  • 解决:

    kubectl describe pod <pod-name> | grep Events  # 查看事件
    kubectl get nodes -o wide                     # 检查节点资源
    

2. 服务无法访问

  • 可能原因:

    • Service 的 selector 与 Pod 标签不匹配。

    • 网络策略阻止流量。

  • 解决:

    kubectl describe service <service-name>  # 检查 Endpoints
    kubectl get networkpolicy                # 查看网络策略
    

通过以上步骤,您可以在 Ubuntu 系统上完成 Kubernetes 集群的部署、应用管理及生产级运维。建议结合监控、日志和备份策略,确保集群的稳定性和可靠性。


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

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

相关文章

partition_pdf 和chunk_by_title 的区别

from unstructured.partition.pdf import partition_pdf from unstructured.chunking.title import chunk_by_titlepartition_pdf 和 chunk_by_title 初看有点像&#xff0c;都在"分块"&#xff0c;但是它们的本质完全不一样。 先看它们核心区别 partition_pdfchun…

基于深度学习的医疗诊断辅助系统设计

标题:基于深度学习的医疗诊断辅助系统设计 内容:1.摘要 随着医疗数据的爆炸式增长和深度学习技术的飞速发展&#xff0c;开发基于深度学习的医疗诊断辅助系统具有重要的现实意义。本研究的目的在于设计一个高效、准确的医疗诊断辅助系统&#xff0c;以辅助医生进行更精准的诊断…

Matlab/Simulink - BLDC直流无刷电机仿真基础教程(四) - PWM调制模拟

Matlab/Simulink - BLDC直流无刷电机仿真基础教程&#xff08;四&#xff09; - PWM调制模拟 前言一、PWM调制技术基本原理二、仿真模型中加入PWM调制三、逆变电路MOS管添加体二极管四、模拟添加机械负载五、仿真模型与控制框图文章相关模型文件下载链接参考链接 前言 本系列文…

Curl 全面使用指南

Curl&#xff08;Client URL&#xff09;是一个跨平台命令行工具&#xff0c;支持多种协议&#xff08;HTTP/HTTPS/FTP/SFTP等&#xff09;&#xff0c;用于数据传输、API调试、文件上传/下载等场景。以下从 核心功能、用户疑问解答、高级技巧 三方面系统总结&#xff0c;并整合…

PyTorch中“原地”赋值的思考

在开发一个PyTorch模块时&#xff0c;遇到了一个诡异的现象&#xff0c;将他描述出来就是下面这样&#xff1a; f[..., :p_index - 1] f[..., 1:p_index] 这个操作将f张量的部分数值进行左移&#xff0c;我在模型训练的时候还能正常跑&#xff0c;但是当我将模型部署到项目中…

什么是:云边端一体化架构

什么是云边端一体化架构 文章目录 什么是云边端一体化架构云、边、端云计算边缘计算终端设备 云边端一体化协同云边端一体化架构协同的流程云边端一体化架构协同的应用云边端一体化架构协同的价值云边端一体化架构协同未来发展趋势 云、边、端 云&#xff08;Cloud&#xff09…

gephi绘图

参考&#xff1a; 如何在Gephi中正确的显示中文&#xff1f; Gephi绘制网络图初步探索 gephi 节点标签 调节_图分析与可视化-从Gephi开始

马克·雷伯特:用算法让机器人飞奔的人

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 马克雷伯特:用算法让机器人飞奔的人 一、天才的起点 在机器人领域,有一个名字如雷贯耳——马克雷伯特(Marc Raibert)。作为波士顿动力公司(Boston…

三维装配可视化界面开发笔记

三维装配可视化界面开发笔记 项目概述 这是一个基于Vue.js和Three.js的三维装配可视化系统&#xff0c;用于展示机械零部件的装配和拆解过程。系统支持模型加载、拆解/装配路径生成、动画展示和工艺流程图生成等功能。 技术栈 前端框架: Vue 3 (使用组合式API)构建工具: Vi…

深⼊理解指针(8)

1.对上一篇的补充内容 typedef int* ptr_t #define PTR_T int* 这两种写法都是可以的 ptr_t p1, p2; //p1, p2 都是指针变量 PTR_T p3, p4; //p3 是指针变量, p4是整型变量 为什么p3 是指针变量, p4是整型变量呢&#xff1f; 因为PTR_T 真的被改为了 int* 在编译器中…

neo4j暴露公网ip接口——给大模型联通知识图谱

特别鸣谢 我的领导&#xff0c;我的脑子&#xff0c;我的学习能力&#xff0c;感动了 1. 搭建知识图谱数据库&#xff08;见上一章博客&#xff09; 这里不加赘述了&#xff0c;请参考上一篇博客搭建 2. FastApi包装接口 这里注意&#xff1a;NEO4J_URI不得写http:,只能写…

AI编程新选择!VSCode + RooCode,超越Cursor​

在当今快节奏的开发环境中&#xff0c;AI编程助手已经成为提升开发效率的关键工具。然而&#xff0c;面对众多选择&#xff0c;开发者往往陷入纠结&#xff1a;如何在众多AI编程工具中找到最适合自己的方案&#xff1f;尤其是当VSCode搭配RooCode时&#xff0c;相比Cursor&…

电子病历高质量语料库构建方法与架构项目(环境聆听与自动化文档生成篇)

电子病历高质量语料库的构建是一个复杂而系统的工程,涉及数据收集、清洗、标注、验证等多个环节。在项目实施过程中,"环境聆听"和"自动化文档生成"是两个关键支撑要素,前者确保项目能够适应不断变化的技术和业务环境,后者则保障项目过程的可追溯性和知…

Python协程入门指北

一、什么是协程&#xff1f; 协程&#xff08;Coroutine&#xff09;就像可以暂停执行的函数&#xff0c;能够在执行过程中主动让出控制权&#xff0c;等准备好后再继续执行。 生活小例子 想象你在咖啡店排队&#xff1a; 普通函数&#xff1a;必须一直排到取餐&#xff08…

mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz的下载安装和使用

资源获取链接&#xff1a; mysql-5.7.24-linux-glibc2.12-x86-64.tar.gz和使用说明资源-CSDN文库 详细作用 数据库服务器的核心文件&#xff1a; 这是一个压缩包&#xff0c;解压后包含 MySQL 数据库服务器的可执行文件、库文件、配置文件模板等。 它用于在 Linux 系统上安装…

C++笔记-继承(下)(包含派生类的默认成员函数,菱形继承等)

一.派生类的默认成员函数 1.14个常见默认成员函数 默认成员函数&#xff0c;默认的意思就是指我们不写&#xff0c;编译器会自动为我们生成一个&#xff0c;那么在派生类中&#xff0c;这几个成员函数是如何生成的呢&#xff1f; 1.派生类的构造函数必须调用基类的构造函数初…

C++中指针使用详解(3)数组、指针和函数参数传递的底层 ABI实现

要深入理解 数组、指针和函数参数传递 的底层 ABI&#xff08;Application Binary Interface&#xff09;实现&#xff0c;需要从以下几个维度出发进行学习&#xff1a; 一、什么是 ABI&#xff1f; ABI 是编译器和操作系统之间的协定&#xff0c;规定了&#xff1a; 函数如何…

【RustDesk 】中继1:压力测试 Python 版 RustDesk 中继服务器

测试 Python 版 RustDesk 中继服务器 测试我们实现的中继服务器有几种方法,从简单到复杂依次如下: 1. 基本连接测试客户端 创建一个简单的测试客户端来验证中继服务器的基本功能: 2. 用两个测试客户端测试中继功能 要测试完整的中继功能,你需要运行两个客户端实例来模拟…

Spring Boot集成Spring Cloud 2024(不使用Feign)

本文介绍Spring Boot集成Spring Cloud 2024&#xff0c;且不使用Feign&#xff0c;而是采用Spring 6自带的HttpExchange方式进行服务调用的详细步骤&#xff1a; 环境准备 Spring Boot版本&#xff1a;推荐使用Spring Boot 3.4.1及以上版本&#xff0c;以更好地与Spring Clou…

vue中$set原理

Vue 中的 $set 方法&#xff08;Vue.set&#xff09;主要用于 向响应式对象中添加一个新的属性&#xff0c;并确保这个新属性是响应式的&#xff0c;能够触发视图更新。 &#x1f4cc; 背景问题&#xff1a;为什么需要 $set&#xff1f; 在 Vue 2 中&#xff0c;直接给对象新增…