ARTICLE DETAIL

资讯详情

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

devops-exercises 实战指南:用 `kubectl run` 创建你的第一个 Kubernetes Pod(Pods 01 练习详解)

devops-exercises 实战指南:用 `kubectl run` 创建你的第一个 Kubernetes Pod(Pods 01 练习详解) 文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载导读本文以开源仓库 devops-exercises 中 Kubernetes 系列的第一个练习 Pods 01 及其官方答案为骨架系统讲解如何通过kubectl run在默认命名空间创建 Pod并借助kubectl get pods完成运行状态验证。读完本文你将掌握 Kubernetes 最小调度单元 Pod 的命令式创建方法、关键参数语义、创建流程的底层调用链以及基于仓库问答章节Kubernetes README沉淀的排障与进阶技巧可直接用于 CKA 备考和日常集群操作。一、练习目标从零创建第一个 Pod先看仓库中 Pods 01 练习原文 给出的任务拆解目标Objective学会如何创建 PodLearn how to create pods操作步骤Instructions选择一个容器镜像例如 redis、nginx、mongo 等使用所选镜像在默认命名空间default namespace中创建一个 Pod验证该 Pod 处于运行状态。在 Kubernetes README 的练习索引表 中该练习被命名为 My First Pod归属Pods主题是仓库 Kubernetes 系列的第一课与后续的 Killing Containers重启策略、Service、ReplicaSet、Labels and Selectors 等练习形成循序渐进的学习链路。二、完整解决方案两行命令搞定官方答案 极其精炼核心只有两条命令kubectl run nginx --imagenginx --restartNever kubectl get pods第一条命令以nginx镜像为模板创建一个名为nginx的 Pod第二条命令列出当前命名空间下的所有 Pod用于验证nginxPod 是否成功进入运行状态。这两条命令构成了 Kubernetes 命令式imperative创建 Pod 的最短路径也是后续所有 Kubernetes 练习ReplicaSet、Deployment、Service的基础操作。三、命令逐项解析参数语义与默认值3.1kubectl run命令式创建kubectl run是 kubectl 提供的命令式创建工具。在本练习语境下它的作用是根据命令行参数直接生成 Pod 对象并提交给集群。仓库 Kubernetes README 的 Pods 问答章节 也使用了同类命令演示 Pod 创建例如kubectl run my-pod --imagenginx:alpine。值得注意的参数细节--imagenginx指定容器镜像。本练习使用nginx你也可以按练习要求替换为redis、mongo、httpd等任意镜像例如仓库 Killing Containers 练习 就使用了registry.redhat.io/rhscl/httpd-24-rhel7--restartNever这是让kubectl run只创建独立 Pod而非 Deployment 等控制器的关键参数。省略该参数时kubectl run会默认创建 Deployment 对象此时 Pod 由控制器托管。仓库 静态 Pod 练习答案 中也出现了k run some-pod --imagepython --command sleep 2017 --restartNever --dry-runclient -o yaml的用法可见--restartNever用于要求生成裸 Pod 清单默认命名空间未指定--namespace时Pod 创建在当前 kubeconfig 上下文对应的命名空间中通常为default。如练习要求所强调本任务不切换命名空间。3.2kubectl get pods验证运行状态kubectl get pods简写kubectl get po列出当前命名空间内的 Pod输出包含NAME、READY、STATUS、RESTARTS、AGE等列。创建完成后nginxPod 的STATUS会依次经历以下阶段最终停留在Running仓库 Kubernetes README 的 Pod phases 问答 给出了各阶段的准确定义阶段含义PendingPod 已被集群接受但容器尚未运行例如镜像仍在下载或尚未被调度ContainerCreating容器正在创建/启动过程中RunningPod 已绑定到某个节点且至少有一个容器处于运行状态SucceededPod 内所有容器均成功终止Failed至少一个容器以失败状态终止Unknown无法获取 Pod 状态若需更详细的信息可在后续排障章节看到kubectl describe pod与kubectl logs的用法。四、从命令到集群kubectl run背后的完整调用链仅执行一条kubectl run集群内部会发生一系列联动。仓库 Kubernetes README 的问答 中专门描述了 What happens when you run a Pod with kubectl? 的七步流程结合其控制面/工作节点组件说明可以还原出以下完整链路kubectl向kube-apiserver发送创建 Pod 的请求用户在此过程中完成认证请求被校验集群状态数据被写入etcdScheduler通过监视 API Server 发现存在未被分配的 PodScheduler 选择一个合适的节点将调度结果写回 etcd 并更新 API Server目标节点上的Kubelet监视到有 Pod 被分配给自己且尚未运行Kubelet 请求容器运行时如 containerd、Docker 等拉取镜像并创建、启动容器Kubelet 向 API Server 回报 Pod 运行状态API Server 再次更新 etcd。这条链路印证了控制面组件API Server、Scheduler、etcd、Controller Manager与数据面组件Kubelet、kube-proxy、容器运行时的分工用户只输入一条命令调度与执行的编排由集群自行完成。这也是 Kubernetes 被设计为声明期望状态、由控制器持续调和的原因。五、为什么是 PodKubernetes 最小调度单元练习要求创建的是 Pod 而非 Deployment这恰好是理解 Kubernetes 对象模型的第一步。仓库 Kubernetes README 的问答章节 给出了 Pod 的标准定义Pod 是一组一个或多个容器的集合这些容器共享存储与网络资源并附带一份如何运行容器的规格说明。Pod 是 Kubernetes 中可创建和管理的最小计算单元。由此可以推导出几个关键结论没有kubectl get containers命令因为容器不是 Kubernetes 对象Pod 才是最小对象单元一个 Pod 内可以有一个或多个容器Pod 通常不直接创建仓库问答明确说明实践中 Pod 大多由 Deployment、ReplicaSet 等控制器创建并托管——如果裸 Pod 死亡Kubernetes 不会自动恢复它而 ReplicaSet 会保证指定数量的 Pod 始终运行。本练习用裸 Pod 是为了先把最小单元的概念练熟一个 Pod 只能运行在单个节点上Pod 不可跨节点拆分默认情况下 Pod 是非隔离的可接受来自任意来源的流量一个 Pod 可包含多个容器例如边车side-car模式中日志采集、监控适配器等辅助容器与应用容器共享生命周期与网络命名空间。六、进阶验证与排障从Running到真正可用创建命令验证通过后还可以沿用仓库后续练习的思路做更深层的确认6.1 查看调度节点与更宽输出kubectl get pods -o wide-o wide会额外展示 Pod 被调度到的工作节点、Pod 内部 IP 等信息——仓库问答中明确指出这是查看 Pod 运行在哪个节点的答案。6.2 进入容器执行命令kubectl exec nginx -- ls结合仓库 Killing Containers 练习 的做法还可以用kubectl exec web -- ps查看容器内进程、用kubectl exec web -- kill 1杀掉主进程然后观察kubectl get po web中RESTARTS计数上升——Kubernetes 会根据重启策略自动把异常容器重新拉起这正是其自愈能力的直观演示。6.3 查看详细事件与日志当 Pod 未按预期运行例如卡在Pending、CrashLoopBackOff、ErrImagePull时仓库 Kubernetes README 的排障问答 推荐两条命令kubectl describe pod POD_NAME # 查看事件、退出码、镜像拉取失败原因 kubectl logs POD_NAME # 查看容器标准输出/错误日志例如CrashLoopBackOff表示容器反复启动-崩溃-再启动可通过kubectl describe的Last State/Exit Code定位根因ErrImagePull则说明镜像拉取失败可能是认证或网络问题。6.4 清理kubectl delete pod nginx删除 Pod 时Kubernetes 会先向容器内主进程发送TERM信号给予 30 秒优雅退出窗口超时后再发送KILL强制终止见仓库问答 What happens when you delete a Pod?。七、与仓库其他练习的衔接完整学习路线本练习只是仓库 Kubernetes 体系的起点推荐按以下顺序继续均可从 Kubernetes README 练习索引 直达Killing Containers用kubectl exec 杀进程的方式验证 Pod 重启自愈其答案会解释 RESTARTS 上升的原因ReplicaSet 101对比裸 Pod 与控制器托管 Pod 的差异体验删除一个 Pod 自动补位的声明式调和逻辑其答案包含完整的 ReplicaSet YAMLServices 01为 Pod 创建 Service打通集群内/外访问Labels and Selectors用kubectl get po -l appweb等选择器命令按标签筛选对象CKA 备考页若以认证为目标可将本练习作为 CKA 实操刷题的第一步。八、总结通过 Pods 01 练习 及其标准答案我们完成了一次完整的 Kubernetes 入门闭环用kubectl run nginx --imagenginx --restartNever创建独立 Pod用kubectl get pods验证其进入Running状态并顺带理解了--restartNever的参数语义、Pod 作为最小调度单元的对象模型以及一条命令背后 API Server → etcd → Scheduler → Kubelet → 容器运行时的完整调用链。以此为基础再结合仓库 Kubernetes README 中大量的问答式知识库你就能逐步构建起从会跑命令到理解原理的 Kubernetes 实战能力。赞分享文档教程DevOps运维【免费下载链接】devops-exercisesLinux, Jenkins, AWS, SRE, Prometheus, Docker, Python, Ansible, Git, Kubernetes, Terraform, OpenStack, SQL, NoSQL, Azure, GCP, DNS, Elastic, Network, Virtualization. DevOps Interview Questions项目地址https://gitcode.com/GitHub_Trending/de/devops-exercises点击查看免费下载相关推荐LeetCode 394 字符串解码Decode String详解栈与递归两种解法LeetCode 394 字符串解码Decode String详解栈与递归两种解法 导读 本文围绕 LeetCode 394「字符串解码」Decode文档教程DevOps运维devops-exercises 实战指南在 AWS 上创建你的第一个 VPCexercise-vpcdevops exercises 实战指南在 AWS 上创建你的第一个 VPCexercise vpc 导读 本文基于 devops exercises文档教程DevOps运维AWS VPC 实战在 devops-exercises 中创建你的第一个 VPCexercise-vpcAWS VPC 实战在 devops exercises 中创建你的第一个 VPCexercise vpc 本文以 devops exercises 仓库文档教程DevOps运维上一篇Tabby跨平台终端解决方案技术深度解析与架构评估下一篇使用 Instant Python Admin SDK从安装到 Webhook 的完整实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表