Kubernetes第五天学习指南:集群交互与 Namespace

发布时间:2026/6/23 2:56:08

Kubernetes第五天学习指南:集群交互与 Namespace 欢迎来到 Kubernetes 学习的关键一步今天我们将亲手在集群上运行第一个应用Nginx并学会使用kubectl这个强大的命令行工具与集群进行交互。同时我们会深入理解Namespace命名空间这个概念它是你在 K8s 中进行资源隔离和组织的基石。一、与集群交互的核心命令kubectlkubectl是 K8s 的“瑞士军刀”所有对集群的操作几乎都通过它来完成。以下是你今天必须掌握的五个核心命令。命令作用常用选项/示例kubectl get列出资源kubectl get podskubectl get nodeskubectl get allkubectl describe显示资源的详细信息kubectl describe pod pod-namekubectl logs查看 Pod 中容器的日志kubectl logs pod-namekubectl logs -f pod-name(实时跟踪)kubectl exec在 Pod 的容器内执行命令kubectl exec -it pod-name -- /bin/bashkubectl delete删除资源kubectl delete pod pod-name 提示你可以在任何命令后加上-o wide获取更多信息如 Pod 的 IP 和所在节点或加上-o yaml查看资源的完整 YAML 配置。二、实战在集群上运行第一个 Nginx PodPod 是 K8s 中最小的部署单元你可以把它想象成一个或多个容器的“胶囊”。现在我们通过命令行直接创建一个运行 Nginx 的 Pod。1. 使用run命令创建 Pod# 创建一个名为 my-nginx 的 Pod使用 nginx:alpine 镜像 kubectl run my-nginx --imagenginx:alpine --port80输出pod/my-nginx created2. 查看 Pod 状态刚创建的 Pod 状态为ContainerCreating几秒后会变为Running。kubectl get pods输出示例NAME READY STATUS RESTARTS AGE my-nginx 1/1 Running 0 45sREADY 1/1表示 Pod 内 1 个容器已准备就绪。3. 使用describe查看 Pod 的“体检报告”当 Pod 出现问题时describe是最佳诊断工具。kubectl describe pod my-nginx这条命令会输出大量信息包括基本信息Pod 名称、Namespace、节点 IP。事件 (Events)这是最关键的诊断区记录了 Pod 从调度、拉取镜像到启动的全过程以及任何错误如镜像拉取失败。4. 使用exec进入 Pod 内部你可以像操作普通 Linux 容器一样进入 Pod 内部进行调试。# 进入 Pod 的 /bin/shAlpine 镜像默认 shell kubectl exec -it my-nginx -- /bin/sh进入后可以执行ls /usr/share/nginx/html查看网页文件或curl localhost测试服务。输入exit退出。5. 使用logs查看 Nginx 访问日志即使不进入 Pod你也可以查看其日志。# 查看日志 kubectl logs my-nginx # 实时跟踪日志类似 tail -f kubectl logs -f my-nginx打开一个新终端再通过“端口转发”访问服务就能看到日志输出。6. 端口转发本地访问 Pod 服务Pod 默认有集群内部 IP外部无法直接访问。我们可以使用端口转发临时打通一个通道。# 将本地的 8080 端口转发到 Pod 的 80 端口 kubectl port-forward pod/my-nginx 8080:80现在打开浏览器访问http://localhost:8080就能看到 Nginx 的欢迎页了7. 清理资源# 删除 Pod kubectl delete pod my-nginx三、核心概念Namespace (命名空间)当你的团队或应用变得复杂时Namespace就变得至关重要。它提供了一种逻辑上非物理上的隔离机制就像在同一个操作系统中划分出不同的文件夹。为什么需要 Namespace资源隔离将不同环境如dev、test、prod或不同团队的项目放在不同的命名空间中避免资源命名冲突和相互干扰。权限控制结合 RBAC可以精确控制用户对特定命名空间的访问权限。资源配额可以为不同的命名空间设置 CPU、内存等资源配额防止某个应用耗尽整个集群的资源。K8s 默认的 Namespace集群创建后默认会有几个命名空间default如果你不指定所有资源默认都创建在这里。kube-system存放 Kubernetes 系统组件如 CoreDNS、kube-proxy建议不要在这里操作。kube-public一个特殊的命名空间其资源可以被所有人包括未认证用户读取。kube-node-lease用于存储节点心跳信息。实战使用 Namespace 隔离资源1. 创建 Namespace# 方式一直接命令创建 kubectl create namespace dev # 方式二通过 YAML 创建更规范可保存配置 cat EOF | kubectl apply -f - apiVersion: v1 kind: Namespace metadata: name: test EOF验证kubectl get namespaces或kubectl get ns2. 在指定 Namespace 中创建资源# 方法一使用 --namespace 参数缩写 -n kubectl run nginx-dev --imagenginx --namespacedev # 方法二查看 Pod 时加上 -n 参数 kubectl get pods -n dev 设置默认 Namespace为了避免每次输入-n可以通过工具kubens(kubectx 套件的一部分) 或直接修改 kubeconfig 来切换默认上下文。3. 查看不同命名空间的资源# 查看所有命名空间的 Pod kubectl get pods --all-namespaces # 或者 kubectl get pods -A4. 删除 Namespace# 删除命名空间这会同时删除该命名空间内的所有资源 kubectl delete namespace dev⚠️ 警告删除操作不可逆请务必谨慎四、综合实战多命名空间部署演练下面我们通过一个完整的场景来巩固所学知识。场景在default和test命名空间中分别运行 Nginx1. 创建test命名空间kubectl create namespace test2. 创建两个 Nginx Pod# 在 default 命名空间创建 kubectl run nginx-default --imagenginx:alpine # 在 test 命名空间创建 kubectl run nginx-test --imagenginx:alpine -n test3. 查看和管理 Pod# 查看 default 命名空间的 Pod kubectl get pods # 查看 test 命名空间的 Pod kubectl get pods -n test # 查看所有命名空间的 Pod kubectl get pods -A | grep nginx4. 体验“逻辑隔离”# 尝试在 default 空间中查看 test 的 Pod会提示“no resources found” kubectl get pods | grep nginx-test # 不会输出内容 # 正确的查看方式 kubectl get pods -n test | grep nginx-test这就体现了 Namespace 的资源隔离特性在不同 Namespace 中即使资源名称相同如两个 Pod 都叫nginx它们也是相互独立、互不干扰的。5. 清理环境kubectl delete pod nginx-default kubectl delete pod nginx-test -n test # 或直接删除整个命名空间会删除其中的所有资源 kubectl delete namespace test五、总结今日核心收获✅掌握核心命令get,describe,logs,exec,delete是日常运维的“五虎将”。✅理解资源模型Pod 是最小部署单元今天是你与它第一次亲密接触。✅Namespace 管理能力学会了创建、切换、查看和删除 Namespace理解了它对于资源组织和隔离的价值。 今日学习检查清单我能在集群上成功运行一个 Nginx Pod。我能熟练使用kubectl get pods,describe,logs,exec命令。我理解了 Namespace 的作用并能创建和切换 Namespace。我能够区分不同 Namespace 下的同名资源。

相关新闻