ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

90DaysOfDevOps 实战:用 Minikube 在本地部署你的第一个 Kubernetes 集群

90DaysOfDevOps 实战:用 Minikube 在本地部署你的第一个 Kubernetes 集群 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载本篇文章是 90DaysOfDevOps 系列 Kubernetes 篇章的开篇实战指南对应 2022/ja/Days/day51.md 文档核心目标是在你自己的工作站上通过 minikube 快速拉起一个可用的 Kubernetes 集群并学会用 kubectl 与之交互。读完本文你将掌握为什么选择本地单节点集群而非云托管集群、如何用 arkade 一站式安装 minikube 与 kubectl、如何通过minikube start配合 addons 与自定义参数启动符合自己要求的集群以及一套高频 kubectl 命令速查表——这些能力将作为整个 Kubernetes 系列后续实操多节点集群、应用部署、Ingress、持久化存储等的基线环境。为什么用 Minikube 而不是云托管集群在开始动手之前先回答一个关键问题为什么这篇文章选择 minikube而不是在公有云上开一个托管的 Kubernetes 集群如 EKS、AKS、GKE原因很直接——成本。即使使用各云厂商的免费额度托管集群也仍然可能产生费用而 minikube 完全运行在你的本地机器上零成本、可随时销毁重建非常适合用来做 Kubernetes 概念验证和日常实验。如果你确实希望在公有云上演练托管集群可以回顾本系列前一篇文章 Day 50 中分享的云环境搭建思路。什么是 Minikube定位与前置条件minikube 官方这样定位自己minikube quickly sets up a local Kubernetes cluster on macOS, Linux, and Windows. We proudly focus on helping application developers and new Kubernetes users. minikube 可在 macOS、Linux 和 Windows 上快速搭建本地 Kubernetes 集群专注于帮助应用开发者和 Kubernetes 新用户。即使你不是典型的新用户minikube 也足够轻量好用想用 Kubernetes 的方式验证一个想法、快速部署一个应用试试水它都能胜任并且它附带一批非常实用的 addons后面会专门介绍。前置条件容器或虚拟机管理器无论你的工作站是什么操作系统minikube 都能运行但有一个共同的前置条件——你机器上必须有一个容器或虚拟机管理器例如DockerHyperkitHyper-VKVMParallelsPodmanVirtualBoxVMwareminikube 本身运行在这样一个管理器之上。本系列仓库的默认选择是Docker这也是minikube start时的默认驱动你可以在系统中安装 Docker 作为底座然后继续下面的安装步骤。安装方式用 arkade 一站式装好 minikube 与 kubectl安装 minikube 有多种路径官方提供了按平台区分的安装脚本/包管理器方式本系列作者则更偏爱一种市场式的工具——arkade。arkade 是什么arkade 是一个用Golang 编写、跨平台的命令行工具可以把它理解成 Kubernetes 生态工具链的应用商店它把各种 Kubernetes 相关的 CLI 工具和应用程序聚合在一起arkade get一下就能下载对应工具的二进制文件。相比逐个去官网找安装脚本这种统一入口让环境准备变得非常简单——这也呼应了本系列 Linux 章节中讲过的软件包管理思想。用 arkade 安装 minikube在 arkade 长长的可用应用清单里minikube 是其中之一。安装只需一条命令arkade get minikube执行后 arkade 会自动下载 minikube 的二进制文件并完成安装装完即可直接使用。用 arkade 安装 kubectl与集群交互还离不开 kubectl。同样可以通过 arkade 安装arkade get kubectlkubectl 的作用会在后文详细展开minikube 官方文档的安装步骤中也会通过 curl 脚本一并处理 kubectl二选一即可。部署第一个集群minikube start一切就绪后部署你的第一个 Kubernetes 集群只需要一条命令minikube start从上面的运行截图可以看到整个启动过程的实际输出minikube 检测到本机环境截图中为 Ubuntu 20.04 Docker 驱动创建控制平面节点、拉取基础镜像、为节点分配资源截图中 CPU2、内存 12800MB准备指定版本的 Kubernetes 与 Docker 运行时随后依次完成证书与密钥生成、控制平面启动、RBAC 规则配置、核心组件验证并启用默认 addon如 storage-provisioner、default-storageclass。最后输出关键提示Done! kubectl is now configured to use minikube cluster and default namespace by default这意味着 kubectl 已经自动指向 minikube 集群可以直接开始使用。单节点结构说明在 Docker 驱动下一个 minikube 集群实际上就是一个 Docker 容器控制平面节点Control Plane与工作节点Worker Node合并在同一实例中——这与生产环境控制平面与工作节点分离的典型架构不同。这种简化正是本地实验环境的特点足够支撑你学习 Kubernetes 的核心概念本系列接下来的章节会切换到更接近生产架构的家庭实验室Home Lab型多节点环境参见后文下一步。用 addons 与自定义参数定制你的集群addons一次启动即可带齐扩展能力minikube 的一大亮点是addons插件体系它允许你在启动集群时就通过命令行一次性启用所需扩展保证每次都能复现同样的环境。本系列作者最常用的两个 addons 是csi-hostpath-driver基于 HostPath 的 CSI 驱动为本地集群提供持久化存储能力便于测试有状态应用volumesnapshots卷快照能力配合 CSI 驱动使用。这类能力通常需要借助 Helm 或手动部署 CSI 组件才能获得而 minikube 把它们做成了开箱即用的开关大大简化了实验流程。完整的 addon 清单可以在本地执行minikube addons list查看再按需启用。自定义参数固定 API 端口、指定运行时与版本除了 addonsminikube start还支持大量自定义参数。本系列作者在项目中使用过的一组典型配置如下截图中有实际执行记录minikube start \ --addons volumesnapshots,csi-hostpath-driver \ --apiserver-port6443 \ --container-runtimecontainerd \ --kubernetes-versionv1.21.2 \ -p mc-demo各参数的含义与影响参数作用说明--addons启动时自动启用的插件列表多个用逗号分隔如volumesnapshots、csi-hostpath-driver--apiserver-port固定 API Server 监听端口文档示例为 6433截图命令中为 6443核心思想是把随机分配的 API 端口固定下来便于 kubectl 配置与脚本引用--container-runtime指定容器运行时默认是 Docker可选containerd或cri-o本示例选用 containerd--kubernetes-version指定 Kubernetes 版本例如v1.21.2保证实验环境与目标版本一致-p/--profile指定集群配置文件名称例如mc-demo用于区分多个 minikube 集群这些参数让用一条命令复现标准环境成为可能——既保留了默认 Docker 驱动的便捷又能在需要时调整架构细节这正是 minikube 适合作为本系列基线集群的原因。kubectl与集群交互的命令行工具集群起来之后我们需要一个遥控器来操作它这就是kubectl。kubectl 是 Kubernetes 官方的命令行工具允许你与 Kubernetes 集群交互部署应用、检查和管理集群资源。它在这里用于操作 minikube 集群但同样的命令也完全适用于公有云上的企业级集群——这也是学习 kubectl 一举多得的原因。kubectl 本质上是在与位于控制平面节点上的 API Server通信所有对集群的读写操作都经过 API Server 完成。用kubectl get nodes验证集群安装好 kubectl 后最简单的验证方式就是查看集群节点状态kubectl get nodes从截图输出可以看到名为mc-demo的节点状态为Ready角色为control-plane,master运行 Kubernetes v1.21.2。Ready状态说明节点上的 kubelet 已正常注册并与 API Server 保持通信集群真正可用了。kubectl 速查表日常使用中下面这张速查表覆盖了最高频的操作类别命令说明列出资源kubectl get nodes列出集群中所有节点列出资源kubectl get namespaces列出集群中所有命名空间列出资源kubectl get pods列出默认命名空间中的所有 Pod列出资源kubectl get pods -n name列出指定命名空间 name 中的所有 Pod创建资源kubectl create namespace name创建名为 name 的命名空间创建资源kubectl create -f [filename]从 JSON 或 YAML 文件创建资源编辑资源kubectl edit svc/servicename编辑某个 Service查看详情kubectl describe nodes以详细信息展示资源的当前状态删除资源kubectl delete pod删除资源支持从 stdin 或文件读入kubectl 资源短名称写命令或脚本时常会用到资源类型的短名称既少打字又让脚本更整洁。例如-n就是--namespace的短标志。下表是官方支持的部分资源短名称短名称完整名称csrcertificatesigningrequestscscomponentstatusescmconfigmapsdsdaemonsetsdeploydeploymentsependpointseveventshpahorizontalpodautoscalersingingresseslimitslimitrangesnsnamespacesnonodespvcpersistentvolumeclaimspvpersistentvolumespopodspdbpoddisruptionbudgetspsppodsecuritypoliciesrsreplicasetsrcreplicationcontrollersquotaresourcequotassaserviceaccountssvcservices比如kubectl get no、kubectl get po -n kube-system熟悉这些短名称后日常操作和自动化脚本都会高效很多。仓库中的配套示例从无状态到有状态本系列仓库的 Kubernetes 目录2022/Days/Kubernetes中除了上面用到的 minikube 集群之外还沉淀了与后续章节配套的实战清单可以用kubectl create -f直接应用到 minikube 集群上正好呼应速查表中的创建命令。无状态应用示例nginx-stateless-demo.yaml 演示了最基础的三件套先创建nginx命名空间再声明一个apps/v1Deploymentreplicas1镜像nginx暴露容器端口 80最后通过一个 Service 把 Pod 暴露为集群内可访问的稳定入口。这是理解命名空间 工作负载 服务发现的最简闭环。有状态应用示例statefulset.yaml 则是有状态应用的样板一个 MongoDB 的 StatefulSet包含 initContainer 修复/bitnami/mongodb目录权限、通过 Secretmongodb-users-secret注入数据库账号密码、挂载 PVCmongo-storage实现持久化并配置了 readinessProbe 探活。这类示例正是 minikube 上验证csi-hostpath-driver与volumesnapshots两个 addon 的最佳场景。Ingress 入口示例pacman-ingress.yaml 演示了networking.k8s.io/v1的 Ingress 资源将pacman.com域名的/路径路由到pacman命名空间中的pacman服务的 80 端口。它对应系列后续Kubernetes Ingress专题的实操基础。下一步VirtualBox 多节点集群正如文首所述minikube 单节点集群是基线而本系列接下来Day 52会部署更接近生产架构的多节点集群在 VirtualBox 中通过 Vagrant 拉起多台虚拟机分别扮演控制平面节点与工作节点——就像 Linux 章节用 Vagrant 快速批量建机、部署软件一样按一个轻松按钮完成环境搭建。仓库中已准备好这套完整骨架Vagrantfile定义 1 台 master4GB 内存、2 核IP 10.0.0.10与 2 台 worker各 2GB 内存、1 核IP 10.0.0.11/12并使用 bento/ubuntu 镜像scripts/common.sh两台机器共同的初始化逻辑——关闭 swap、加载br_netfilter内核模块、配置 iptables 桥接流量转发、安装 Docker 与 containerd再安装并固定 kubeadm/kubelet/kubectl 版本scripts/master.sh在 master 上执行kubeadm init初始化控制平面指定 Pod CIDR192.168.0.0/16、生成 kubeconfig、生成 worker 加入令牌写入 configs/join.sh并部署 Calico 网络插件、Metrics Server 与 Kubernetes Dashboardscripts/node.shworker 节点执行join.sh加入集群并打上 worker 角色标签configs/configkubeadm init生成的 kubeconfig 样例可看到集群入口为https://10.0.0.10:6443这与生产式架构中 API Server 独立暴露的方式一致。Kubernetes 系列将覆盖的主题本系列 Kubernetes 篇章才刚刚开始后续将围绕以下主题逐一深入minikube 集群将作为这些实操的演练场Kubernetes 架构Architecturekubectl 命令CommandsKubernetes YAML 清单Kubernetes IngressKubernetes ServicesHelm 包管理器持久化存储Persistent Storage有状态应用Stateful Apps资源与继续学习Kubernetes 官方文档集群概念、kubectl 参考、API 资源定义kubectl 命令参考与官方速查表面向初学者的 Kubernetes 视频课程含架构简化讲解用 Vagrant Ansible 在 VirtualBox 上部署 minikube 的社区教程在仓库内你可以继续研读 2022/Days/Kubernetes 目录下的全部配置与脚本作为多节点部署的直接参考下一篇 Day 52 将带你完成第二个集群VirtualBox 多节点的部署之后就可以开始向集群中部署应用了。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps Day 51用 minikube 部署你的第一个本地 Kubernetes 集群90DaysOfDevOps Day 51用 minikube 部署你的第一个本地 Kubernetes 集群 本篇是《90DaysOfDevOps》Kube文档/教程90DaysOfDevOps 第 51 天使用 Minikube 部署你的第一个 Kubernetes 集群90DaysOfDevOps 第 51 天使用 Minikube 部署你的第一个 Kubernetes 集群 引言 本篇是 90DaysOfDevOps 系列文档/教程90DaysOfDevOps 实战用 Helm 在 Minikube 上部署 Jenkins 并落地第一条 CI Pipeline90DaysOfDevOps 实战用 Helm 在 Minikube 上部署 Jenkins 并落地第一条 CI Pipeline 本文基于 90DaysOf文档/教程上一篇Excalidraw-CN 核心架构揭秘深入理解组件系统与渲染机制下一篇Qwen3-Coder 30B-A3B256K上下文AI编码终极工具创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表