)
文档/教程【免费下载链接】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点击查看免费下载本篇文章以 2022/ja/Days/day50.md对应英文原版 2022/Days/day50.md为核心骨架结合本仓库 2022/Days/Kubernetes/ 目录下的真实部署脚本与配置文件展开解读。Kubernetes 生态最大的问题从来不是功能不足而是选择过多裸金属、虚拟化、本地桌面、云托管……读完本篇你将理解各类 Kubernetes 平台/发行版的定位差异、各自的成本与运维边界掌握按学习目标与实际投入挑选平台的判断框架并能顺着仓库中的 Vagrant kubeadm 脚本与 minikube 路径亲手搭建出属于自己的第一个集群。为什么选择平台是 Kubernetes 学习的第一道坎在 Kubernetes 世界里一个持续存在的挑战是移除复杂性。原文档指出Kubernetes the hard way这类教程会带你从零开始一步步构建出一个完整可用的 Kubernetes 集群——这显然是极端路线。而越来越多的人尤其是作者交流过的同行希望反过来直接运行一个托管 Kubernetes 集群把复杂性交给服务商。这引出一个关键权衡托管服务的代价是金钱即便使用免费层托管集群通常也要付费但换来的是不再需要关心底层节点架构、Control Plane控制平面节点的内部状态——而这些在托管模式下你通常根本无权访问。本地开发发行版的价值是体验在自有电脑上运行一个本地版 Kubernetes让开发者在目标平台上拥有完整的工作环境来运行自己的应用。无论走哪条路线它们本质上都是Kubernetes 的一种风味a flavour of Kubernetes因此工作负载应当能够在不同平台之间自由迁移按需搬到最合适的地方——这正是平台无关性的意义所在。选择还高度依赖已有投资既有硬件、既有虚拟化平台、云厂商承诺等。本地环境则几乎零成本特别适合初学者上手。四条主路线详解1. 裸金属集群Bare-Metal Clusters裸金属路线把 Linux 直接安装到若干物理服务器上组成集群理论上 Windows 也可以但作者指出 Windows 容器 Kubernetes 的采用率很低。适合这种路线的典型场景是企业已经做出CAPEX 决策资本性支出采购了物理服务器。此时你从底层硬件、操作系统、容器运行时到集群组件一切都要自己构建、自己管理——运维负担最重可控性也最强。2. 虚拟化Virtualisation无论用于测试学习环境还是企业级集群虚拟化都是很常见的选择先创建若干虚拟机作为节点再把它们聚合成集群。它的优势在于拥有底层可控的架构underpinning architecture获得虚拟化带来的效率与速度复用已有的虚拟化投入。作者提到 VMware 在虚拟机与 Kubernetes 两个方向上都提供了多种解决方案而作者本人人生中第一个 Kubernetes 集群就是用Microsoft Hyper-V在一台旧服务器上搭建的——跑几个 VM 作为节点这就是虚拟化路线的典型起点。仓库佐证本仓库 2022/Days/Kubernetes/ 目录下的 Vagrantfile 正是虚拟化 自建集群的真实落地——它基于bento/ubuntu-21.10镜像在 VirtualBox 上拉起 1 个 master 节点4 GB 内存、2 核和 2 个 worker 节点各 2 GB 内存、1 核并通过 private_network 划分10.0.0.10/11/12三个内网地址。master 节点依次执行 scripts/common.sh 与 scripts/master.shworker 节点执行 scripts/common.sh 与 scripts/node.sh。3. 本地桌面选项Local Desktop Options在笔记本/台式机上运行本地 Kubernetes 集群的选项不少。它们让开发者无需多个昂贵或复杂的集群就能预览应用在 Kubernetes 中的运行形态。作者个人最常用的正是minikube——它有强大的功能与 addons插件能大幅改变你把一个环境跑起来的方式。minikube社区最流行的单节点本地集群工具跨平台、跨硬件自带丰富 addon 生态KindKubernetes in Docker基于 Docker 容器模拟节点的轻量方案。关于这两者的选型建议见下文学习起点一节。仓库佐证下一篇 2022/ja/Days/day51.mdDeploying your first Kubernetes Cluster详细演示了用 minikube 部署第一个本地集群包括通过arkade get minikube安装、minikube start启动、指定--apiserver-port 6433、切换 containerd 运行时以及启用csi-hostpath-driver、volumesnapshots等 addon——这是本地桌面选项路线的完整实操延续。4. Kubernetes 托管服务Kubernetes Managed Services托管服务来自大型云厂商hyperscalers以及部分 MSP托管服务提供商它们把管理控制层从终端用户手中移走——最典型的就是把Control Plane从用户侧移除例如Amazon EKSAWSMicrosoft AKSAzureGoogle Kubernetes Engine / GKEGoogle Cloud这些服务的共同逻辑是本地/私有云通过虚拟机承载节点公共云同样可以用 VM 作为节点而托管服务进一步替你管理控制平面、升级与运维细节。付出更高成本换取更少运维。选择过多OpenShift 与从哪开始的现实建议作者直言选择多是好事但多到一定程度会让人不知所措。上文只是每个类别下的概览并未穷举所有选项。在所有这些之上还有 Red Hat 的OpenShift——它几乎可以跨上述所有路线部署各大主流云厂商均支持就当下而言它为管理员提供了跨部署位置最好的整体可用性usability。那么从学习角度该从哪开始作者回顾自身最初走虚拟化路线是因为当时手头恰有一台可用的物理服务器后来不再拥有该条件便转向了更轻量的方案。作者当前的实际建议是优先使用 Minikube或者 KindKubernetes in Docker。Minikube 的额外优势几乎把复杂度抽象掉了用 addon 即可快速把环境搭起来用完即弃blow it away可同时运行多个集群几乎随处可跑——跨平台、与硬件无关。仓库实战佐证虚拟化 kubeadm 的完整自建链路为了让平台选择不止停留在概念层仓库 2022/Days/Kubernetes/ 提供了与上文虚拟化和裸金属/自建两条路线强对应的可运行资产。我们拆解一下这条链路理解它对你选择平台的启示第一步定义拓扑VagrantfileVagrantfile 的核心参数参数值含义NUM_WORKER_NODES2worker 节点数量决定循环生成多少个 nodeIP_NW10.0.0.私有网络前缀IP_START10起始主机位master10、worker0111、worker0212config.vm.boxbento/ubuntu-21.10虚拟机基础镜像Ubuntu 21.10master 资源配置内存 4048 MB、CPU 2 核控制平面所在节点worker 资源配置内存 2048 MB、CPU 1 核每个工作节点节点通过/etc/hosts相互解析主机名master.vm.provision shell, path: scripts/common.sh等语句把配置脚本注入各节点——这正是虚拟化路线下自动化工序的具象化。第二步节点初始化scripts/common.shscripts/common.sh 承担每个节点master 与 worker 通用的初始化工作关闭 swapswapoff -a并注释/etc/fstab中的 swap 条目保证重启后依然关闭加载br_netfilter、overlay内核模块并配置 sysctl桥接流量转发、IPv4 转发为容器网络打基础安装并配置Docker Engine 与 containerdcontainerd config default生成默认配置后重启添加 Kubernetes apt 源安装kubelet、kubeadm、kubectl三个组件并用apt-mark hold锁定版本KUBERNETES_VERSION1.23.3-00避免意外升级破坏集群一致性。这一脚本解释了自建集群的关键前提容器运行时 kubeadm 三件套 内核网络参数缺一不可。第三步控制平面初始化scripts/master.shscripts/master.sh 只作用于 master 节点kubeadm config images pull预拉取所需镜像验证预检通过kubeadm init --apiserver-advertise-address$MASTER_IP --apiserver-cert-extra-sans$MASTER_IP --pod-network-cidr$POD_CIDR --node-name $NODENAME --ignore-preflight-errors Swap初始化控制平面其中--pod-network-cidr192.168.0.0/16是后续 Calico 网络插件要求的 Pod CIDR将admin.conf复制到$HOME/.kube/config供 kubectl 使用并同步到/vagrant/configs/config宿主与虚拟机共享目录通过kubeadm token create --print-join-command自动生成 worker 的加入命令写入/vagrant/configs/join.sh依次安装Calico网络插件、Metrics Server并 patch--kubelet-insecure-tls参数、Kubernetes Dashboard为 Dashboard 创建admin-userServiceAccount 与cluster-adminClusterRoleBinding并把访问 token 保存到/vagrant/configs/token。第四步工作节点加入scripts/node.sh configs/join.shscripts/node.sh 在每个 worker 上执行/vagrant/configs/join.sh -v——该文件内容即 kubeadm 生成的加入指令见 configs/join.shkubeadm join 10.0.0.10:6443 --token token --discovery-token-ca-cert-hash sha256:hash随后脚本复制管理员 kubeconfig、给节点打上node-role.kubernetes.io/workerworker-new标签并重启 kubelet 使配置生效。补充说明仓库还提供了一套 Rancher/Vagrantfile 变体基于 Rancher 生态、使用 public_network 桥接模式master 与 worker 节点仅执行 scripts/common.sh体现了同一套自建脚本在不同编排器/网络模式下的复用性。这条链路的意义在于虚拟化路线的价值恰恰是让你以较低成本一台宿主机的 VM 资源完整经历从初始化、控制平面到节点加入的全过程这与托管服务隐藏控制平面的思路形成鲜明对照——两条路线各有所长取决于你是想理解还是想交付。本系列 Kubernetes 章节将覆盖的主题原文档列出了后续 90 天学习地图中 Kubernetes 部分的计划主题这是整个平台选择讨论之后的下一步路线图Kubernetes Architecture架构Kubectl Commandskubectl 命令Kubernetes YAMLKubernetes IngressKubernetes ServicesHelm Package ManagerHelm 包管理器Persistent Storage持久化存储Stateful Apps有状态应用这些主题与仓库中的实际演示文件相互印证例如 nginx-stateless-demo.yaml无状态应用示例、pacman-ingress.yamlIngress 示例、pacman-stateful-demo.yaml 与 statefulset.yaml有状态应用示例会在后续章节逐一展开。延伸阅读与系列入口作者围绕平台选择曾在自己博客撰写过一组实战记录Kubernetes playground 系列、EKS/AKS/GKE 上手、Bottlerocket EKS、CIVO Cloud、minikube 演示环境等主题覆盖从选平台、搭集群到各家托管服务的实际操作这些内容在后续的 Day 51 及 Kubernetes 章节中会被进一步吸收进仓库正文。下一站Day 51部署你的第一个 Kubernetes 集群minikube它紧接本文的平台选择结论用 minikube 在本地快速拉起基线集群为后面所有的 Kubernetes 实操提供运行环境。官方参考资料建议关注 Kubernetes 官方文档入门与 kubectl 概览以及社区公开的初学者视频课程若你有免费且优质的学习资源也可以通过 PR 补充到仓库中。一句话总结选平台就是在复杂度与成本之间做权衡——想理解底层就走虚拟化/自建仓库的 Vagrant kubeadm 脚本就是现成的练习场想快速上手就选 Minikube/Kind想交付生产就把控制平面交给 EKS、AKS、GKE 或 OpenShift。赞分享文档/教程【免费下载链接】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 第 50 天如何选择你的 Kubernetes 平台与发行版90DaysOfDevOps 第 50 天如何选择你的 Kubernetes 平台与发行版 本文是 90DaysOfDevOps 挑战中 Kubernetes文档/教程90DaysOfDevOps Day 50如何选择你的 Kubernetes 平台——裸金属、虚拟化、本地开发与托管服务全解析90DaysOfDevOps Day 50如何选择你的 Kubernetes 平台——裸金属、虚拟化、本地开发与托管服务全解析 在 90DaysOfDevOp文档/教程如何选择适合你的Linux发行版awesome-linux深度对比分析如何选择适合你的Linux发行版awesome linux深度对比分析 作为开源世界的核心力量Linux发行版的选择往往让新手感到困惑。awesome li文档上一篇Windows Cleaner免费系统清理工具一键解决C盘爆红问题下一篇3步把微信聊天记录导出成HTML/Word/CSVWeChatMsg完整实践指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考