写点什么

总结归纳 Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(服务治理与网络访问)

作者:洛神灬殇
  • 2024-05-05
    江苏
  • 本文字数:3000 字

    阅读完需:约 10 分钟

总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(服务治理与网络访问)

前提介绍

Kubernetes,亦被称为 K8s,是业界公认的容器编排巨擘,以其卓越的能力简化了容器化应用的部署、扩展和管理流程。通过其强大的功能,Kubernetes 不仅提升了应用的可靠性和可伸缩性,还优化了资源利用率,为开发者和运维人员提供了更加高效、灵活的容器运行环境。


在传统的应用部署模式中,不同环境间的基础设施与配置差异构成了巨大的挑战,使得跨环境部署变得困难重重。然而,Kubernetes 的出现彻底改变了这一局面。它通过构建一个统一的容器编排平台,巧妙地将底层基础设施的复杂性进行了抽象,让开发人员能够摆脱繁琐的环境配置问题。在 Kubernetes 的助力下,应用程序可以在不同环境中实现一致且高效的部署与管理,这不仅极大地提升了应用的可移植性,更为未来的扩展性奠定了坚实的基础。

文章主旨

本篇文章是学习开发使用 k8s 的必备工具,提供了对无缝部署管理所需的基本命令的快速访问。让我们将其视为快节奏 Kubernetes 环境中的必备指南,以提高生产力,减少错误,并确保在复杂任务中的高效导航。不仅包含了 Kubernetes 中最常用的命令,还提供了针对特定任务的实用提示和最佳实践。无论您是经验丰富的 Kubernetes 管理员还是初学者,这份速查表都将成为您日常工作中的宝贵资源。


通过本系列文章,您可以快速了解如何创建和管理部署(Deployments)、服务(Services)、持久存储(Persistent Storage)以及其他 Kubernetes 资源。

Services 和 Networking

Service 为一组 pod 提供了稳定的访问端点,而 network 则负责构建这些 pod 之间高效通信的机制。

网络组件之间交互

网络组件间的交互是一个复杂而关键的过程,它涉及到信息的传递和组件间的协作。为了确保这种交互的顺畅进行,需要精心设计和实现组件间的接口和通信协议。下图是一个 K8s 框架的 Node 以及内部的 Pod 之间的网络调用和交互,其中包含了很多隐藏信息:服务发现、服务调用等。



同时,网络的安全性、稳定性和可扩展性等因素也必须得到充分考虑,以确保整个系统的正常运行和可靠性。因此,对于网络组件间的交互,我们需要进行全面的规划、设计和测试,以优化其性能和提升可靠性。

创建 Service 组件

利用 kubectl 命令和指定的 YAML 文件(service-definition.yaml),可以便捷地创建和部署服务。


apiVersion: v1kind: Servicemetadata:  name: demo-servicespec:  selector:    app: demo  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: ClusterIP
复制代码


这个 YAML 文件定义了一个名为 demo-service 的 Kubernetes Service,它选择所有带有 app=demo 标签的 Pods,并将外部流量从集群的 80 端口转发到这些 Pods 的 8080 端口。

重要参数解析

  • protocol: TCP:这指定了使用的协议是 TCP。Kubernetes 支持 TCP 和 UDP 协议。

  • port: 80:这是 Service 的集群内部端口,也就是集群内的其他 Pods 或 Services 可以通过这个端口访问此 Service。

  • targetPort: 8080:这是实际转发到选定 Pods 的端口。这意味着,尽管外部世界可能通过端口 80 访问此 Service,但流量实际上会被转发到 Pods 的 8080 端口。

  • type: ClusterIP:意味着 Service 将有一个仅在集群内部可用的 IP 地址。外部流量无法直接访问它,除非通过其他方式(如 LoadBalancer、NodePort 等)进行转发。

执行指令创建

执行命令kubectl apply -f service-definition.yaml时,Kubernetes 将读取 YAML 文件中的配置信息,并据此在集群中创建或更新对应的服务资源。

管理和操作 Services

  • 列出默认命名空间中的所有服务:kubectl get service

  • 删除服务: kubectl delete service <service_name>

  • 将部署作为服务公开: kubectl expose deployment <deployment_name> --port=<external_port>

服务发现

  • 发现服务详细信息: kubectl describe service <service_name>

  • 读取服务的 ClusterIP: kubectl get service <service_name> -o jsonpath='{.spec.clusterIP}'

快速指令列表

Service 组件的 ClusterIP 和 NodePort 模式

在 Kubernetes(k8s)中,Service 是一个核心概念,它允许你将一组 Pod(运行应用的容器组)暴露为一个统一的、抽象的网络服务。这个 Service 可以被集群内部或外部的其他应用访问。总体包含了三种模式,分别为 ClusterIP 和 NodePort、LoadBalancer。

ClusterIP(集群内部访问)

  • ClusterIP 是 Kubernetes Service 的默认类型。当你创建一个 Service 时,Kubernetes 会自动为它分配一个唯一的 IP 地址,这个 IP 地址仅在集群内部可见和可访问。

  • IP 地址与 Service 关联的后端 Pods 的端口(称为 targetPort)绑定。集群内的其他 Pods 可以通过ClusterIP:ServicePort来访问这个 Service,进而访问到后端 Pods。


由于 ClusterIP 仅在集群内部可见,如果你希望从集群外部访问这个 Service,你需要使用其他方式,如 NodePort 或 LoadBalancer。

创建 Cluster-IpService 组件

配置定义了一个名为clusterip-service的 ClusterIP 服务,它专门选择那些带有app: demo标签的 Pods。此服务在集群内部将 80 端口公开,以便其他 Pods 或 Service 能够访问,并将接收到的流量智能地路由到对应 Pods 的 8080 端口。


apiVersion: v1kind: Servicemetadata:  name: clusterip-servicespec:  selector:    app: demo  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: ClusterIP
复制代码

NodePort(集群外部访问)

NodePort 是 Kubernetes Service 的另一种类型,它允许你将 Service 暴露给集群外部。


  • 当一个 Service 被设置为 NodePort 类型时,Kubernetes 会在每个 Node(节点)上打开一个静态端口(NodePort)。这个端口是外部可访问的,并且会路由到 Service 的 ClusterIP。

  • 因此,外部客户端可以通过<NodeIP>:<NodePort>来访问这个 Service。这种机制允许外部流量进入集群,然后通过 ClusterIP 路由到后端 Pods。

创建 NodePort-service 组件
apiVersion: v1kind: Servicemetadata:  name: nodeport-servicespec:  selector:    app: demo  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: NodePort
复制代码


NodePort 通常用于开发、测试或某些不需要高度可用性的生产环境。如果你需要一个更加健壮的外部访问方案,你可能会考虑使用 LoadBalancer 类型的 Service。

LoadBalancer(集群外部访问)

定义了一个名为 loadbalancer-service 的 LoadBalancer 服务,其专门筛选带有 app: demo 标签的 Pods。


apiVersion: v1kind: Servicemetadata:  name: loadbalancer-servicespec:  selector:    app: demo  ports:    - protocol: TCP      port: 80      targetPort: 8080  type: LoadBalancer
复制代码


此服务将端口暴露给外部访问,而在云环境中,它会自动配置一个与云环境相匹配的负载均衡器。这个负载均衡器负责将接收到的流量智能地分配到相应的 Pods 上,确保服务的高可用性和可扩展性。通过这样的配置,我们能够在云环境中轻松实现负载均衡和服务发现,提升应用的可访问性和性能。

查看日志快速指令

为了帮助大家更高效地进行 Kubernetes(简称 K8s)的日常管理和故障排查,整理了一份关于 K8s 日志查询的指令快速列表。这些指令都是在日常工作中经常使用的,希望能为大家带来便利。


下篇预告

在即将发表的文章中,我们将进一步聚焦于 Configuration 和 Secrets 相关的核心组件,进行深入的介绍、分析和阐释。通过这篇文章,读者将能够更全面地了解这些组件的功能、特点以及它们在整体架构中的重要性。我们期待通过分享专业知识和经验,为读者提供更深入、更全面的了解和掌握这些关键组件的机会。

发布于: 刚刚阅读数: 4
用户头像

洛神灬殇

关注

🏆 InfoQ写作平台-签约作者 🏆 2020-03-25 加入

👑 前优酷资深工程师,一个具有高洞察力的理性自律小i人 — INTJ 📕 个人著作《深入浅出Java虚拟机—JVM原理与实战》 💻 10年开发经验,参与过多个大型互联网项目,定期分享技术干货和项目经验

评论

发布
暂无评论
总结归纳Kubernetes | 一站式速查知识,助您轻松驾驭容器编排技术(服务治理与网络访问)_Kubernetes_洛神灬殇_InfoQ写作社区