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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月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搭建和管理企业级网站应用
相关文章
|
2月前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
1月前
|
存储 运维 Kubernetes
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
飞轮科技推出了 Doris 的 Kubernetes Operator 开源项目(简称:Doris Operator),并捐赠给 Apache 基金会。该工具集成了原生 Kubernetes 资源的复杂管理能力,并融合了 Doris 组件间的分布式协同、用户集群形态的按需定制等经验,为用户提供了一个更简洁、高效、易用的容器化部署方案。
正式开源,Doris Operator 支持高效 Kubernetes 容器化部署方案
|
2月前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
178 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
2月前
|
存储 Kubernetes Docker
Kubernetes(k8s)和Docker Compose本质区别
理解它们的区别和各自的优势,有助于选择合适的工具来满足特定的项目需求。
232 19
|
1月前
|
人工智能 运维 监控
容器服务Kubernetes场景下可观测体系生产级最佳实践
阿里云容器服务团队在2024年继续蝉联Gartner亚洲唯一全球领导者象限,其可观测体系是运维的核心能力之一。该体系涵盖重保运维、大规模集群稳定性、业务异常诊断等场景,特别是在AI和GPU场景下提供了全面的观测解决方案。通过Tracing、Metric和Log等技术,阿里云增强了对容器网络、存储及多集群架构的监控能力,帮助客户实现高效运维和成本优化。未来,结合AI助手,将进一步提升问题定位和解决效率,缩短MTTR,助力构建智能运维体系。
|
2月前
|
Kubernetes 应用服务中间件 nginx
二进制安装Kubernetes(k8s)v1.32.0
本指南提供了一个详细的步骤,用于在Linux系统上通过二进制文件安装Kubernetes(k8s)v1.32.0,支持IPv4+IPv6双栈。具体步骤包括环境准备、系统配置、组件安装和配置等。
686 10
|
2月前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
75 4
|
2月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
87 2
|
1月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
2月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
148 12