java k8s-资源类型

时间:2025-08-27 11:18:01来源:互联网

下面小编就为大家分享一篇java k8s-资源类型,具有很好的参考价值,希望对大家有所帮助。

资源类型概述

k8s提供了一系列的资源来管理和部署容器化应用程序

类别

名称

资源对象

Pod、ReplicaSet、ReplicationController、Deployment、StatefulSet、DaemonSet、Job、CronJob、HorizontalPodAutoscaling

配置对象

Node、Namespace、Service、Secret、ConfigMap、Ingress、Label、ThirdPartyResource、 ServiceAccount

存储对象

Volume、Persistent Volume

策略对象

SecurityContext、ResourceQuota、LimitRange

 

Deployment、Service、Pod是k8s最核心的3个资源对象。

资源类型详细说明

pod(容器组)

Pod是Kubernetes中运行容器以及调度的最小单位,同一个Pod可以同时运行多个容器。Pod中的容器共享网络和存储资源,并且它们可以通过本地的localhost进行通信。

Deployment(部署)

Deployment用于定义应用程序的部署方式。它可以指定要运行的Pod副本数量,并可以自动进行滚动更新和回滚操作。Deployment还可以定义应用程序的更新策略和健康检查。

service

Service是一个抽象的逻辑概念,它定义了一组Pod的访问方式,用于服务发现和服务访问。其他应用程序可以通过Service来访问后端的Pod实例。当创建一个Service时,Kubernetes会为该Service分配一个唯一的虚拟IP地址和端口号。其他应用程序可以通过该虚拟IP地址和端口号来访问该Service。

Kubernetes提供了几种不同的服务发现方式:

1. 环境变量:Kubernetes会为每个Pod设置一组环境变量,其中包括其他Service的地址和端口号。应用程序可以通过读取这些环境变量来发现和访问其他Service。

2. DNS:Kubernetes内置了一个DNS服务,它为每个Service分配了一个域名。应用程序可以通过使用Service的域名来发现和访问其他Service。

3. Service名称:Kubernetes允许通过Service名称来发现和访问其他Service。应用程序可以通过使用Service名称作为主机名来发起请求。

通过这些服务发现机制,Kubernetes使得在集群中部署和管理应用程序变得更加简单和灵活。无论是在同一个Pod内部还是在不同的Pod之间,应用程序都可以方便地发现和访问其他Service。
 

apiVersion: v1
kind: Service
metadata:
  name: my-service #Service的名称
  labels: #为Service添加一个标签
    app: my-app 
  annotations:
    description: "This is a sample Service" #描述信息
spec:
  type: ClusterIP #Service的类型
  selector: #通过标签选择器(app: my-app)来关联Service与对应的Pod
    app: my-app
  ports: #定义了Service监听的端口与与之关联的Pod的端口的映射关系
    - name: http #定义了此端口的名称
      protocol: TCP #定义了使用的协议
      port: 80 #定义了Service监听的端口号
      targetPort: 8080 #定义了将流量转发到Pod的端口号
      nodePort: 32000 #定义了NodePort类型Service的端口号
  sessionAffinity: ClientIP #定义了会话关联策略

 

Service资源有以下几个重要的属性:

1. ClusterIP:每个Service都会被分配一个ClusterIP,它是一个虚拟的内部IP地址。其他应用程序可以通过该IP地址来访问Service。
2. Port:Service可以定义一个或多个端口,用于接收来自其他应用程序的请求。每个端口可以是TCP或UDP类型。
3. Selector:Service通过Selector来选择与之关联的Pod实例。Selector使用标签(Label)来匹配Pod,从而确定哪些Pod属于该Service。
4. Session Affinity:Service可以配置会话亲和性,以确保来自同一客户端的请求始终被路由到同一个后端Pod实例。这可以通过设置sessionAffinity属性为"ClientIP"来实现。
5. Type:Service可以有不同的类型,包括ClusterIP、NodePort和LoadBalancer。ClusterIP类型是默认的,用于在集群内部提供访问。NodePort类型会在每个节点上公开一个固定的端口,以便外部应用程序可以访问Service。LoadBalancer类型会在云平台上创建一个负载均衡器,并将流量路由到Service。

访问Service:使用Service提供的ClusterIP、NodePort、LoadBalancer IP等,通过网络访问Pod。

  • 如果使用ClusterIP类型的Service,可以通过在Kubernetes集群内部使用ClusterIP来访问Pod。
  • 如果使用NodePort类型的Service,可以通过任一节点的NodePort来访问Pod。例如,使用Node IP和NodePort:<Node_IP>:<Node_Port>.
  • 如果使用LoadBalancer类型的Service,Kubernetes将为Service创建一个云提供商特定的负载均衡器,并分配一个外部IP,通过该外部IP即可访问Pod。

Ingress

ingress对象的作用是定义从集群外部访问Service的规则的一种资源。它充当了集群内部和外部之间的网关,可以将外部流量路由到不同的Service,并提供了一些高级功能,如SSL/TLS终止、负载均衡和路径匹配等。

  • 它其实就是一组基于域名和URL路径,把用户的请求转发到一个或多个service的规则。
  • ingress与service用于路由到service,所以使用ingress的基础是已经创建了service。
  • ingress不与pod进行直接交互

Ingress 简单的理解就是你原来需要改 Nginx 配置,然后配置各种域名对应哪个 Service,现在把这个动作抽象出来,变成一个 Ingress 对象,你可以用 yaml 创建,每次不要去改 Nginx 了,直接改yaml 然后创建/更新就行了;

以下是Ingress对象的一些重要属性和功能:

1. Hostname和Path:Ingress可以根据请求的主机名和路径来路由流量到不同的Service。您可以定义多个Ingress规则,每个规则可以匹配不同的主机名和路径。

2. Service后端:Ingress可以将流量路由到一个或多个后端的Service。您可以指定后端Service的名称和端口号。

3. TLS:Ingress可以配置SSL/TLS终止,以加密传输的流量。您可以为每个Ingress规则配置TLS证书和私钥。

4. 路径匹配:Ingress支持基于路径的路由,可以根据请求的路径将流量路由到不同的Service。您可以使用正则表达式或通配符来定义路径匹配规则。

5. 负载均衡:Ingress可以通过负载均衡算法将流量分发到后端的Service。您可以配置不同的负载均衡策略,如轮询、最少连接等。

6. Annotations:Ingress支持使用Annotations来配置一些高级功能和定制化选项。例如,您可以配置缓存、限流、重定向等功能。

 

ingress和nginx

Ingress和Nginx的作用是相似的,都用于管理和路由流量。但是,Ingress是Kubernetes的一部分,提供了更高级的功能和集成,而Nginx是一个独立的反向代理服务器和负载均衡器,可以与Kubernetes集成使用。 

ingress与gateway

 Ingress来管理集群内部服务的入口流量,作为流量网关使用;Gateway作为微服务架构的统一入口点,作为微服务网关使用

ingress使用

要使用Ingress对象来管理和路由流量,您需要完成以下步骤:

1. 安装Ingress控制器:首先,您需要在Kubernetes集群中安装和配置一个Ingress控制器。常见的Ingress控制器包括Nginx Ingress Controller、Traefik、HAProxy等。您可以根据您的需求选择适合的Ingress控制器,并按照其文档进行安装和配置。

2.创建Ingress资源:接下来,您需要创建一个Ingress资源对象来定义流量的路由规则。您可以使用YAML或JSON文件来定义Ingress资源的配置。以下是一个示例的Ingress配置文件:

apiVersion: networking.k8s.io/v1
   kind: Ingress
   metadata:
     name: my-ingress
     annotations:
       nginx.ingress.kubernetes.io/rewrite-target: /
   spec:
     rules:
       - host: example.com
         http:
           paths:
             - path: /app1
               pathType: Prefix
               backend:
                 service:
                   name: app1-service
                   port:
                     number: 80
             - path: /app2
               pathType: Prefix
               backend:
                 service:
                   name: app2-service
                   port:
                     number: 80

在上面的示例中,我们定义了一个名为my-ingress的Ingress对象,它将example.com/app1的流量路由到名为app1-service的Service,并将example.com/app2的流量路由到名为app2-service的Service。

3. 应用Ingress配置:使用kubectl命令将Ingress配置应用到Kubernetes集群中:

   kubectl apply -f <配置文件>

其中,<配置文件>是您创建的Ingress配置文件的路径。

4. 验证Ingress配置:运行以下命令来验证Ingress配置是否成功应用:

   kubectl get ingress

如果配置成功,您将看到Ingress对象的名称、规则和其他相关信息。

5. 配置DNS解析:最后,您需要将域名解析指向集群的Ingress IP地址。这样,外部流量才能正确地路由到Ingress对象定义的Service。

请注意,Ingress对象的配置选项和属性可能会因不同的Ingress控制器而有所差异。

ingress控制器-Traefik

traefik是一个开源的反向代理和负载均衡器,专为现代化的微服务架构设计,可以作为Kubernetes集群中的Ingress控制器。作为Ingress控制器,Traefik负责实现和管理Ingress对象定义的路由规则。它与Kubernetes API进行交互,动态地发现和加载后端服务,并将流量路由到相应的服务。

traefik 的性能较nginx差,但是配置使用要简单许多,它最大的优点是能够与常见的微服务系统直接整合,可以实现自动化动态配置。

Traefik控制器,用于在Kubernetes集群中管理和路由流量。

以下是Traefik的一些主要特点和功能:

1. 动态配置:Traefik支持动态配置,可以自动检测和加载Kubernetes中的新服务和路由规则。它与Kubernetes API进行交互,实时更新配置,无需重启。

2. 自动发现:Traefik可以自动发现Kubernetes中的Service和Pod,并将其作为后端服务进行负载均衡。它可以根据标签选择器和其他元数据来动态地发现和管理后端服务。

3. 多协议支持:Traefik支持多种协议,包括HTTP、HTTPS、TCP和UDP。它可以根据请求的协议和端口将流量路由到不同的后端服务。

4. 健康检查:Traefik可以定期检查后端服务的健康状态,并自动从负载均衡池中排除不可用的服务。它支持多种健康检查机制,如HTTP、TCP和命令执行等。

5. 动态TLS证书:Traefik可以自动为每个域名配置和管理TLS证书。它支持ACME协议,可以与Let's Encrypt等证书颁发机构集成,实现自动化的证书签发和更新。

6. 路由规则:Traefik使用基于规则的路由配置来定义流量的转发规则。您可以使用标签选择器、路径匹配、主机名匹配等方式来定义路由规则。

7. 中间件支持:Traefik支持各种中间件,如重定向、重写、请求头修改、IP白名单等。这些中间件可以在路由规则中配置,以实现更高级的流量控制和转换。

8. 可视化面板:Traefik提供了一个可视化的Web界面,用于监控和管理流量路由。您可以通过Web界面查看当前的路由规则、后端服务和健康状态。

 

使用:

1. 安装Traefik:首先,您需要在Kubernetes集群中安装Traefik。Traefik提供了多种安装方式,包括使用Helm Chart、使用Kubernetes YAML文件或使用Traefik Operator等。

2. 创建Traefik IngressRoute:接下来,您需要创建Traefik IngressRoute资源对象来定义流量的路由规则。IngressRoute是Traefik特有的资源对象,用于配置Traefik的路由规则。您可以使用YAML或JSON文件来定义IngressRoute资源的配置。以下是一个示例的IngressRoute配置文件:

apiVersion: traefik.containo.us/v1alpha1
   kind: IngressRoute
   metadata:
     name: my-ingressroute
   spec:
     entryPoints:
       - web
     routes:
       - match: Host(`example.com`) && PathPrefix(`/app1`)
         kind: Rule
         services:
           - name: app1-service
             port: 80
       - match: Host(`example.com`) && PathPrefix(`/app2`)
         kind: Rule
         services:
           - name: app2-service
             port: 80

在上面的示例中,我们定义了一个名为my-ingressroute的IngressRoute对象,它将example.com/app1的流量路由到名为app1-service的Service,并将example.com/app2的流量路由到名为app2-service的Service。

3. 应用IngressRoute配置:使用kubectl命令将IngressRoute配置应用到Kubernetes集群中:

   kubectl apply -f <配置文件>

其中,<配置文件>是您创建的IngressRoute配置文件的路径。

4. 配置DNS解析:最后,您需要将域名解析指向Traefik的入口点IP地址。这样,外部流量才能正确地路由到Traefik IngressRoute定义的Service。

本站部分内容转载自互联网,如果有网站内容侵犯了您的权益,可直接联系我们删除,感谢支持!