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

本文涉及的产品
网络型负载均衡 NLB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 总结归纳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),可以便捷地创建和部署服务。

yaml

复制代码

apiVersion: v1
kind: Service
metadata:
  name: demo-service
spec:
  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端口。

yaml

复制代码

apiVersion: v1
kind: Service
metadata:
  name: clusterip-service
spec:
  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组件

yaml

复制代码

apiVersion: v1
kind: Service
metadata:
  name: nodeport-service
spec:
  selector:
    app: demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: NodePort

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

LoadBalancer(集群外部访问)

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

yaml

复制代码

apiVersion: v1
kind: Service
metadata:
  name: loadbalancer-service
spec:
  selector:
    app: demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

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

查看日志快速指令

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


下篇预告

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
382
分享
相关文章
如何用 eBPF 实现 Kubernetes 网络可观测性?实战指南
本文深入探讨了Kubernetes网络观测的挑战与eBPF技术的应用。首先分析了传统工具在数据碎片化、上下文缺失和性能瓶颈上的局限性,接着阐述了eBPF通过零拷贝观测、全链路关联和动态过滤等特性带来的优势。文章进一步解析了eBPF观测架构的设计与实现,包括关键数据结构、内核探针部署及生产环境拓扑。实战部分展示了如何构建全栈观测系统,并结合NetworkPolicy验证、跨节点流量分析等高级场景,提供具体代码示例。最后,通过典型案例分析和性能数据对比,验证了eBPF方案的有效性,并展望了未来演进方向,如智能诊断系统与Wasm集成。
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
K8s集群实战:使用kubeadm和kuboard部署Kubernetes集群
总之,使用kubeadm和kuboard部署K8s集群就像回归童年一样,简单又有趣。不要忘记,技术是为人服务的,用K8s集群操控云端资源,我们不过是想在复杂的世界找寻简单。尽管部署过程可能遇到困难,但朝着简化复杂的目标,我们就能找到意义和乐趣。希望你也能利用这些工具,找到你的乐趣,满足你的需求。
382 33
ACK Gateway with AI Extension:面向Kubernetes大模型推理的智能路由实践
本文介绍了如何利用阿里云容器服务ACK推出的ACK Gateway with AI Extension组件,在Kubernetes环境中为大语言模型(LLM)推理服务提供智能路由和负载均衡能力。文章以部署和优化QwQ-32B模型为例,详细展示了从环境准备到性能测试的完整实践过程。
【Azure K8S | AKS】在AKS的节点中抓取目标POD的网络包方法分享
在AKS中遇到复杂网络问题时,可通过以下步骤进入特定POD抓取网络包进行分析:1. 使用`kubectl get pods`确认Pod所在Node;2. 通过`kubectl node-shell`登录Node;3. 使用`crictl ps`找到Pod的Container ID;4. 获取PID并使用`nsenter`进入Pod的网络空间;5. 在`/var/tmp`目录下使用`tcpdump`抓包。完成后按Ctrl+C停止抓包。
149 12
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
在Docker容器中部署GitLab服务器的步骤(面向Ubuntu 16.04)
现在,你已经成功地在Docker上部署了GitLab。这就是我们在星际中的壮举,轻松如同土豆一样简单!星际旅行结束,靠岸,打开舱门,迎接全新的代码时代。Prepare to code, astronaut!
108 12
Docker网关冲突导致容器启动网络异常解决方案
当执行`docker-compose up`命令时,服务器网络可能因Docker创建新网桥导致IP段冲突而中断。原因是Docker默认的docker0网卡(172.17.0.1/16)与宿主机网络地址段重叠,引发路由异常。解决方法为修改docker0地址段,通过配置`/etc/docker/daemon.json`调整为非冲突段(如192.168.200.1/24),并重启服务。同时,在`docker-compose.yml`中指定网络模式为`bridge`,最后通过检查docker0地址、网络接口列表及测试容器启动验证修复效果。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问