ARTICLE DETAIL

资讯详情

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

90DaysOfDevOps 第 51 天:使用 Minikube 部署你的第一个 Kubernetes 集群

90DaysOfDevOps 第 51 天:使用 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 阶段的关键实操课用Minikube在你的本地机器上部署第一个可用的 Kubernetes 集群并配套安装kubectl完成集群的日常交互。文章将以 2022/es/Days/day51.md 为主体结合仓库中2022/Days/Kubernetes目录下的 Vagrant 多节点部署脚本与 kubeconfig 配置讲解本地单节点快速验证与多节点虚拟机集群两种部署路径的差异最终让你掌握一条从零到能跑通kubectl get nodes的完整链路。为什么选择 Minikube 作为第一个集群在正式动手之前先回顾 第 50 天 关于 Kubernetes 平台选型的结论开发者桌面场景有 minikube、kindKubernetes in Docker等多种本地发行版而 minikube 的优势在于插件add-ons丰富、一条命令即可部署完整集群、跨平台且对硬件无强绑定用完之后还能一键销毁非常适合学习与演示。选择本地 Minikube 而不是公有云托管集群如 EKS、AKS、GKE的直接原因很现实即使使用免费额度云上托管集群依然会产生费用。而 Minikube 跑在本地零成本即可获得一个够用的基线集群后续整个 Kubernetes 章节的练习YAML、Ingress、Service、Helm、持久化存储、有状态应用等都可以在这个集群上完成。Minikube 的官方定义是minikube 可在 macOS、Linux 和 Windows 上快速搭建本地 Kubernetes 集群我们专注帮助应用开发者和 Kubernetes 新手。也就是说它是为快速试一下 Kubernetes而生的工具能轻松部署应用还自带一批开箱即用的插件这正是本教程选它的核心理由。安装前置依赖容器或虚拟机管理器Minikube 本身并不包含虚拟化能力它需要借助一个容器或虚拟机管理器来承载集群节点官方支持的列表包括类别支持项容器Docker、Podman、containerd虚拟机HyperKit、Hyper-V、KVM、Parallels、VirtualBox、VMware在绝大多数场景下Docker 是最简单的选择也是默认驱动。安装 Docker 可参考官方 Get Docker 文档https://docs.docker.com/get-docker/。从 仓库中 Day51 的截图 可以看到官方安装指引页允许你按操作系统Windows / macOS / Linux、CPU 架构、版本类型和安装方式二进制下载、包管理器等组合出适合自己环境的步骤。使用 Arkade 安装 Minikube 与 kubectl除了官方安装页的方式原文档作者更推荐一条一站式路径Arkade。Arkade 是一个用 Golang 编写的跨平台工具市场专门用于安装各类 Kubernetes 工具与 CLI你可以把它理解成Kubernetes 工具的应用商店。在 2022/Days/Linux 部分讨论过系统包管理器Arkade 的思路类似只是面向的是 K8s 生态。安装 Arkade 后即可用它下载 Minikubearkade get minikube执行后 Arkade 会从 GitHub 拉取对应平台架构的 Minikube 二进制截图 展示了可安装的工具清单并安装到用户目录下如$HOME/.arkade/bin/minikube。Arkade 安装完成后会提示两件事# 将 arkade 的 bin 目录加入 PATH export PATH$PATH:$HOME/.arkade/bin/ # 或者将二进制移动到全局目录需 sudo sudo mv $HOME/.arkade/bin/minikube /usr/local/bin/同样地交互集群必需的kubectl也可以通过 Arkade 安装arkade get kubectl或者按照平台从 Kubernetes 官方文档下载Linux / macOS / Windows 各有独立安装页。启动你的第一个 Kubernetes 集群最小化启动minikube start所有前置就绪后启动集群只需要一条命令minikube start从 截图 可以看到整个启动过程Minikube 检测到 Ubuntu 20.04 系统后自动选用 docker 驱动随后依次完成拉取 Kubernetes 镜像、创建 Docker 容器示例中配置 2 核 CPU、约 12.8GB 内存、准备指定版本的 Kubernetes 环境示例为 v1.22.2、生成证书与密钥、启动控制平面、配置 RBAC 等初始化动作最后启用storage-provisioner与default-storageclass两个插件并输出成功信息。需要特别理解的是默认情况下一个 Minikube 集群就是一个 Docker 容器其中同时包含控制平面节点control-plane和工作节点worker两者合二为一。这与生产环境中控制平面与工作节点分离的架构不同——多节点、更接近生产形态的部署会在下一节用 VirtualBox Vagrant 实现。加入插件与自定义参数Minikube 的一大卖点是插件系统。通过minikube addons list可以查看全部插件及其状态截图 展示了minikubeprofile 下插件的四列表插件名 / 所属集群 / 状态 / 维护方默认启用的只有default-storageclass和storage-provisioner其余如 dashboard、ingress、metrics-server、volume 快照等默认处于禁用状态。原文档作者常用的两个存储相关插件是CSI-hostpath-driver和volumesnapshots它们也可以从启动时直接带入集群。这些插件通常可以通过 Helm 部署但 Minikube 让这件事变成一条命令的事。在项目中作者还会为minikube start追加自定义配置把 API Server 端口固定为6443而非随机端口、指定容器运行时为containerdDocker 是默认值CRI-O 也可选、并锁定一个具体的 Kubernetes 版本截图 中示例为--kubernetes-version1.21.2。综合起来一个带插件、带自定义参数的启动命令形如minikube start \ --addons volumesnapshots,csi-hostpath-driver \ --apiserver-port6443 \ --container-runtimecontainerd \ --kubernetes-version1.21.2 \ -p mc-demo其中-p mc-demo为集群指定了 profile配置文件名称Minikube 支持同时运行多个命名集群这为演示不同配置的环境提供了便利。用 kubectl 与集群交互kubectl 是什么kubectl 是 Kubernetes 官方的命令行接口用于部署应用、检查和操作集群资源。无论你面对的是本地 minikube 集群还是公有云上的企业级集群交互方式都是同一套 kubectl。kubectl 的请求会发送到控制平面节点上的 API Server——这是它在集群架构中的关键位置。kubectl 通过 kubeconfig 文件默认~/.kube/config定位集群、完成认证与授权。仓库中的 2022/Days/Kubernetes/configs/config 就是一个真实的 kubeconfig 示例它包含了 CA 证书数据、客户端证书与私钥数据以及 API Server 地址https://10.0.0.10:6443这与本篇文章中API Server 端口固定为 6443的实践一致该文件由 master.sh 脚本 在kubeadm init之后从/etc/kubernetes/admin.conf复制生成。安装 kubectl 后验证集群的最简单命令是kubectl get nodes截图 展示了执行结果节点名为mc-demo、状态Ready、角色control-plane,master单节点集群中控制平面与工作节点合一、Kubernetes 版本v1.21.2与启动时指定的版本完全吻合说明集群按要求成功启动。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删除资源可从标准输入或文件读取kubectl 短名称速查表在编写命令和脚本时使用资源类型的短名称能让命令更简洁、代码更整洁。例如-n就是namespace的缩写。常用短名称如下短名称完整名称csrcertificatesigningrequestscscomponentstatusescmconfigmapsdsdaemonsetsdeploydeploymentsependpointseveventshpahorizontalpodautoscalersingingresseslimitslimitrangesnsnamespacesnonodespvcpersistentvolumeclaimspvpersistentvolumespopodspdbpoddisruptionbudgetspsppodsecuritypoliciesrsreplicasetsrcreplicationcontrollersquotaresourcequotassaserviceaccountssvcservices例如kubectl get pods -n kube-system可简写为kubectl get po -n kube-system在脚本中明显更紧凑。从单节点到多节点仓库里的生产化路径Minikube 适合快速验证但单容器承载控制平面与工作节点的形态与生产架构有差距。原文档明确预告了下一步用 VirtualBox Vagrant 部署多节点虚拟机集群这与 Linux 章节中用 Vagrant 快速拉起机器的思路一致。仓库 2022/Days/Kubernetes/Vagrantfile 提供了具体实现定义 1 台 master 节点4GB 内存、2 核和 2 台 worker 节点各 2GB 内存、1 核基于bento/ubuntu-21.10镜像私有网络网段10.0.0.0/24并通过 scripts/common.sh、scripts/master.sh、scripts/node.sh 完成 kubeadm 初始化、Calico 网络插件、Metrics Server、Kubernetes Dashboard 以及节点加入集群等步骤。对比之下多节点路径的差异很明显集群初始化master.sh使用kubeadm init并指定--apiserver-advertise-address10.0.0.10与 Pod 网段--pod-network-cidr192.168.0.0/16之后把生成的 admin kubeconfig 保存到/vagrant/configs共享目录并通过kubeadm token create --print-join-command生成 join.sh 供 worker 节点执行加入。这与 Minikube 的一条命令形成鲜明对比——前者把集群生命周期都自动化隐藏了后者则需要亲手执行 init / join 等底层步骤但换来的是更接近生产的多节点拓扑。此外原文档还提到作者基于 Minikube 构建的姊妹项目Project Pacehttps://github.com/MichaelCade/project_pace用于快速拉起演示环境、展示数据服务并用 Kasten K10 保护这些工作负载其中也包含自动部署 minikube 集群的脚本化方式可作为进一步研究的参考。本系列 Kubernetes 主题预告进入 Kubernetes 章节后接下来会逐步深入以下主题其中部分已在今天开始涉及Kubernetes 架构Kubectl 命令Kubernetes YAMLKubernetes IngressKubernetes ServicesHelm 包管理器持久化存储有状态应用下一篇第 52 天将用第二个集群完成多节点部署之后就可以开始往集群里部署真实应用了。赞分享文档/教程【免费下载链接】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文档/教程使用Kubespray部署你的第一个Kubernetes集群使用Kubespray部署你的第一个Kubernetes集群 Kubespray是一个基于Ansible的Kubernetes部署工具它简化了Kubernet云原生容器编排DevOps运维90DaysOfDevOps 实战在 Minikube 上使用 Helm 部署 Jenkins并跑通第一个声明式 CI PipelineDay 7290DaysOfDevOps 实战在 Minikube 上使用 Helm 部署 Jenkins并跑通第一个声明式 CI PipelineDay 72 本文档/教程上一篇JavaCPP性能基准测试与JNA、JNR等替代方案的全面对比下一篇一篇文章讲透结构化提示词用 LangGPT 从 0 到 1 写出专业级提示词创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表