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

01-Kubernetes 入门:概念与安装

Kubernetes 入门:概念与安装


Part 1:什么是 Kubernetes

概念引入

想象你经营一个巨大的集装箱港口

  • 每天有上百艘货船要停靠(你的应用程序)
  • 每艘船需要泊位、电力、工人(CPU、内存、存储)
  • 有的船坏了要换一艘顶上(自动修复)
  • 旺季来了要多安排船,淡季要减少(自动扩缩)
  • 你不可能每艘船都手动管

Kubernetes(简称 K8s)就是那个港口调度系统。你告诉它"我要 3 艘这样的船",它会自动帮你安排泊位、调度工人、坏了就替换、多了就缩减。

名字由来
Kubernetes 来自希腊语,意思是"舵手"或"飞行员"。Google 内部叫它 Borg,2014 年开源后改名 Kubernetes。因为 K 和 s 之间有 8 个字母,所以简称K8s

原理讲解

K8s 解决什么问题?

在 K8s 之前,你可能这样部署应用:

手动时代

手动 SSH

手动 SSH

手动 SSH

开发者

服务器1

服务器2

服务器3

问题:每台服务器手动操作,不可扩展、容易出错、无法自动修复。

有了 K8s 之后:

声明式 YAML

调度到

调度到

调度到

开发者

K8s 集群

控制平面

节点1

节点2

节点3

你只需要声明"我要什么",K8s 自动帮你实现。

核心概念速览
概念比喻说明
Cluster整个港口一组服务器组成的集群
Node港口里的码头集群中的一台服务器
Pod一艘货船K8s 的最小调度单元,包含一个或多个容器
Deployment航运公司的调度计划声明"我要几艘这样的船"
Service港口接待处稳定的访问入口,不管后面的船怎么换
K8s 架构一览

工作节点 (Worker Node)

工作节点 (Worker Node)

控制平面 (Control Plane)

kube-apiserver
所有操作的入口

etcd
集群状态存储

kube-scheduler
决定 Pod 放哪个节点

kube-controller-manager
维持期望状态

kubelet
管理 Pod

kube-proxy
网络转发

containerd
运行容器

Pod

Pod

kubelet

kube-proxy

containerd

Pod

Pod

💡现在不用记住每个组件。后面每篇文章会逐步介绍它们。这里只需要知道:控制平面负责"决策",工作节点负责"干活"。

声明式 vs 命令式

K8s 最大的特点是声明式操作:

命令式(传统)声明式(K8s)
方式“在服务器 A 上启动这个容器”“我要 3 个这样的 Pod”
谁做决策K8s
自动修复❌ 需要手动✅ K8s 自动补上
示例docker run nginxkubectl apply -f deploy.yaml

声明式的好处:你写一份 YAML 描述想要的状态,K8s 会持续把现实状态调整到与你声明的一致——即使 Pod 崩溃了、节点宕机了,K8s 都会自动修复。

自检问题

  1. K8s 的 K 和 s 之间有几个字母?为什么叫 K8s?
查看答案 8 个字母(ubernete),所以 K + 8 + s = K8s。
  1. Pod 和容器是什么关系?
查看答案 Pod 是 K8s 的最小调度单元,一个 Pod 可以包含一个或多个容器。Pod 里的容器共享网络和存储。
  1. 声明式和命令式的核心区别是什么?
查看答案 命令式是你告诉系统"怎么做"(具体步骤),声明式是你告诉系统"要什么"(期望状态),由系统自己决定怎么做。K8s 是声明式的。

Part 2:安装 Kind

概念引入

现在你知道了 K8s 是什么,但你不可能在港口调度系统上直接练习——你需要一个迷你港口

Kind(Kubernetes in Docker)就是这样一个迷你港口。它在你电脑的 Docker 里运行一个完整的 K8s 集群,启动只要不到 1 分钟,用完随时删掉。就像在你书桌上放了一个港口模型,可以随便摆弄。

你的电脑

Kind 集群

kubectl

Docker 引擎

Kind Node
(Docker 容器)

K8s 控制平面 + 工作节点

为什么选 Kind?
工具启动速度资源占用多节点适合场景
Kind⚡ <1分钟本地学习、CI 测试
Minikube🐢 2-5分钟需要完整 VM 隔离
Docker Desktop⚡ 即开❌ 单节点只需要简单单节点

原理讲解

Kind 的工作原理

Kind 的每个"节点"实际上是一个 Docker 容器。容器里运行着完整的 K8s 组件:

Kind Node (Docker 容器)

kube-apiserver

etcd

kube-scheduler

controller-manager

kubelet

kube-proxy

containerd

你的 Pod

这意味着你可以在一台电脑上创建多节点集群——每个节点就是一个容器。

前提条件

Kind 依赖 Docker。你需要先安装:

  1. Docker Desktop(macOS/Windows)或Docker Engine(Linux)
  2. kubectl(K8s 命令行工具)
  3. Kind本身

🪟Windows 用户:本文所有实验命令均为 Linux/macOS shell 语法。建议通过WSL2学习:

  1. 在 PowerShell(管理员)中执行wsl --install,重启后进入 Ubuntu 终端
  2. 安装 Docker Desktop,在 Settings → Resources → WSL Integration 中启用你的 Ubuntu 发行版
  3. 后续所有命令直接在 WSL2 Ubuntu 终端中执行(走下面的Linux路线即可)

动手实验

步骤 1:安装 Docker

macOS:从 docker.com 下载 Docker Desktop

Linux (Ubuntu)

# 安装 Dockersudoapt-getupdatesudoapt-getinstall-ydocker.iosudousermod-aGdocker$USER# 重新登录使 docker 组生效

验证:

dockerversion

预期输出:

Client: Version: 29.x.x Server: Version: 29.x.x
步骤 2:安装 kubectl
# macOSbrewinstallkubectl# Linuxcurl-LO"https://dl.k8s.io/release/$(curl-L-shttps://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"# 如果上面网络下载不了,试下换谷歌源#curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -L -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"chmod+x kubectlsudomvkubectl /usr/local/bin/

验证:

kubectl version--client

预期输出:

Client Version: v1.31.0 Kustomize Version: v5.4.2
步骤 3:安装 Kind
# macOSbrewinstallkind# Linux[$(uname-m)=x86_64]&&curl-Lo./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-amd64[$(uname-m)=aarch64]&&curl-Lo./kind https://kind.sigs.k8s.io/dl/v0.24.0/kind-linux-arm64chmod+x ./kindsudomv./kind /usr/local/bin/kind

验证:

kind version

预期输出:

kind v0.24.0 go1.22.6 linux/amd64
步骤 4:创建你的第一个集群

先创建配置文件(后续 Ingress 和 NodePort 实验需要端口映射):

cat>kind-config.yaml<<'EOF' kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane image: kindest/node:v1.31.0 kubeadmConfigPatches: - | kind: InitConfiguration nodeRegistration: kubeletExtraArgs: node-labels: "ingress-ready=true" extraPortMappings: - containerPort: 80 hostPort: 80 protocol: TCP - containerPort: 443 hostPort: 443 protocol: TCP - containerPort: 30080 hostPort: 30080 protocol: TCP - role: worker image: kindest/node:v1.31.0 - role: worker image: kindest/node:v1.31.0 EOF

然后创建集群:

kind create cluster--namek8s-guide--configkind-config.yaml

预期输出:

Creating cluster "k8s-guide" ... ✓ Ensuring node image (kindest/node:v1.31.0) 🖼 ✓ Preparing nodes 📦 📦 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾 ✓ Joining worker nodes 🚜 Set kubectl context to "kind-k8s-guide" You can now use your cluster with: kubectl cluster-info --context kind-k8s-guide Not sure what to do next? 😅 Check out https://kind.sigs.k8s.io/docs/user/quick-start/
步骤 5:验证集群
kubectl get nodes

预期输出:

NAME STATUS ROLES AGE VERSION k8s-guide-control-plane Ready control-plane 2m29s v1.31.0 k8s-guide-worker Ready <none> 85s v1.31.0 k8s-guide-worker2 Ready <none> 85s v1.31.0
kubectl cluster-info

预期输出:

Kubernetes control plane is running at https://127.0.0.1:45819 CoreDNS is running at https://127.0.0.1:45819/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

🎉恭喜!你有了一个运行中的 K8s 集群!

步骤 6:清理

实验完成后,删除集群:

kind delete cluster--namek8s-guide

💡 如果你还想继续学习,先不要删!后面的文章会继续用这个集群。

自检问题

  1. Kind 集群的"节点"实际上是什么?
查看答案 是一个 Docker 容器。Kind 在 Docker 容器里运行完整的 K8s 组件(kubelet、kube-apiserver 等)。
  1. 为什么 Kind 比 Minikube 启动快?
查看答案 Kind 直接利用已有的 Docker 引擎创建容器,不需要启动完整的虚拟机。Minikube 默认需要启动一个 VM,所以更慢。
  1. kubectl 和 Kind 是什么关系?
查看答案 Kind 负责创建和管理集群,kubectl 负责与集群交互(部署应用、查看状态等)。Kind 创建集群后会自动配置 kubectl 的 context。

下一步

集群准备好了,让我们部署第一个应用:

→ 02. 工作负载:Pod、ReplicaSet 与 Deployment


📚本文来自 K8s Guide—— 开源免费的 Kubernetes 中文学习指南

  • 🗺️ 初学者轨道 + 面试轨道,从零基础到拿 Offer 一站式覆盖
  • 🧪 每篇文章配套 Kind 实验脚本,本地一键运行
  • 🔗 本文源码:docs/beginner/01-what-is-k8s.md / docs/beginner/02-install-kind.md

如果对你有帮助,欢迎 Star!github.com/callmebg/k8s-guide

http://www.jsqmd.com/news/1275970/

相关文章:

  • BruteShark深度解析:如何通过三层架构设计实现企业级网络取证分析
  • Logseq Anki Sync:如何将笔记知识高效转化为记忆卡片?
  • 基于Java+MySQL+SSM网上挂号系统的设计与实现
  • 计算机毕业设计之基于springboot的家政服务系统的设计与实现
  • Anaconda and Miniconda 软件仓库 - 清华大学开源软件镜像站
  • TRF3750 EVM实战:从PLL原理到射频频率合成器调试优化
  • Searx API完全手册:如何利用JSON/CSV接口构建自定义搜索应用
  • 绝区零全自动游戏助手终极指南:解放双手,享受游戏乐趣
  • SlimeVR Server:开源全身追踪系统的终极解决方案
  • TI CC1312PSIP LaunchPad:Sub-1GHz低功耗无线MCU开发与EnergyTrace功耗分析实战
  • 深入解析正交编码器接口:从寄存器配置到电机控制实战
  • Android特殊权限处理:Nammu如何应对SYSTEM_ALERT_WINDOW与WRITE_SETTINGS
  • AI+医疗健康:辅助诊断、病历生成、医学问答与药物研发应用详解
  • 十万卡AI超级群之后,中国AI算力底座正在发生什么变化?
  • 自指螺旋紧致度与基本物理常数的几何化推导(初稿)
  • 5G从头开始
  • 5分钟快速上手:AI视频创作神器MoneyPrinterTurbo终极指南
  • QMS与MES结合使用的最佳实践
  • 2025年Unity游戏逆向工程完整指南:用Il2CppDumper轻松破解IL2CPP保护
  • Spring Bean 完整生命周期
  • LM3S2950 Flash保护与GPIO配置:嵌入式系统安全与硬件接口设计核心
  • Uchiwa与Sensu Go迁移指南:从旧版监控系统平滑过渡
  • PDF补丁丁:一个开源免费的PDF文档处理终极工具,轻松解决PDF编辑难题
  • 百考通:AI精准赋能开题报告,让学术研究更高效,满足多元研究场景
  • 基于Java+MySQL+SSM企业人才管理与测评系统的设计与实现
  • 3分钟掌握B站视频解析:用开源工具轻松获取高清视频地址
  • 20秒完成设置!Playlist-AutoUpdater新手入门教程
  • 基于华为云 FlexusX 四节点集群的云计算全栈实操(三):云硬盘 IO 压测(fio 全场景读懂 IOPS 与吞吐)
  • 豆包图像生成实战手册:从零到日均产出200张高质量图的7步工作流
  • 【JAVA毕设源码分享】基于springboot乡村信息管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)