【问题标题】:Lifecycle of the Kubernetes endpoints typeKubernetes 端点类型的生命周期
【发布时间】:2020-10-27 04:56:11
【问题描述】:

问题

我想查询一个endpoint类型的对象的生命周期,想知道Pod缩小到0个实例后endpoint自动消失是否正常?

场景结构

Kubernetes 集群 v1.19 [1 个主节点 + 3 个工作节点]

Glusterfs 端点(绑定到命名空间)[包括 Glusterfs 设备的配置 IP 地址]

Service [pod 和 storage 的正常服务]

部署[包括相关的部署信息,例如环境变量]

互连管道的结构

端点 -> 服务 -> 部署

端点 yaml

apiVersion: v1
kind: Endpoints
metadata:
name: gluster-test
namespace: "test"
subsets:
- addresses:
    - ip: "ip 1"
  ports:
    - port: 1
      protocol: TCP
- addresses:
    - ip: "ip 2"
  ports:
    - port: 1
      protocol: TCP
- addresses:
    - ip: "ip 3"
  ports:
    - port: 1
      protocol: TCP
- addresses:
    - ip: "ip 4"
  ports:
    - port: 1
      protocol: TCP

Glusterfs 服务 yaml

apiVersion: v1
kind: Service
metadata:
name: "gluster-test-sv"
namespace: "test"
spec:
ports:
  - port: 1

持久化卷yaml

apiVersion: v1
kind: PersistentVolume
metadata:
name: "gluster-test2-pv"
namespace: test
spec:
capacity:
  storage: "5Gi"
accessModes:
  - ReadWriteMany
glusterfs:
  endpoints: gluster-test
  path: "/test2"
  readOnly: false
persistentVolumeReclaimPolicy: Retain

持久性卷声明

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: "gluster-test2-claim"
namespace: test
spec:
accessModes:
  - ReadWriteMany
resources:
  requests:
    storage: "5Gi"

部署yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: "test-de"
labels:
  app.kubernetes.io/name: "test"
namespace: kubernetes-dashboard
spec:
replicas: 1
selector:
  matchLabels:
    app.kubernetes.io/name: "test"
template:
  metadata:
    labels:
      app.kubernetes.io/name: "test"
  spec:
    containers:
      - name: "test"
        image: "test:latest"
        ports:
          - name: http
            containerPort: XXXX
            protocol: TCP
        volumeMounts:
          - mountPath: /XXX
            name: storage
            readOnly: false
    imagePullSecrets:
      - name: "test"
    volumes:
      - name: storage
        persistentVolumeClaim:
          claimName: "gluster-test-claim"
    securityContext:
      fsGroup: XXX

【问题讨论】:

  • 你能用你的 yaml 文件更新这个问题吗?
  • @thomas 我更新了主帖并添加了 yaml 文件。

标签: kubernetes


【解决方案1】:

Endpoint 是填充在 K8s APi 服务器上的 REST API 端点的面向对象表示。这意味着在 K8s 世界中,它是实现服务的端点的地址(IP 和端口)列表。

它们是在创建 Service 并使用与 Service 的选择器匹配的 Pod 进行配置时自动创建的。当然可以在没有选择器的情况下创建服务。在这种情况下,您必须手动创建端点:

apiVersion: v1
kind: Endpoints
metadata:
  name: glusterfs-cluster <--remember to match this with service name
subsets:
  - addresses:
      - ip: 10.10.10.10 
    ports:
      - port: 
  - addresses:
      - ip: 12.12.12.12 
    ports:
      - port: 

注意:在您的示例中,端点名称与服务名称不匹配。

幕后发生的事情是 kube-proxy 监视 Kubernetes 控制平面以添加和删除 Service 和 Endpoint 对象。然后,它为每个服务安装 iptables 规则,这些规则将流量捕获到服务的clusterIPport,并将该流量重定向到服务的支持集之一。对于每个 Endpoint 对象,它会安装 iptables 规则来选择一个支持的 Pod。

【讨论】:

  • 谢谢你这么详细的回答,我想通过调整名称应该可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2021-09-27
  • 2019-08-13
相关资源
最近更新 更多