【问题标题】:Load balancing K8s Pods with operator-framework使用操作员框架对 K8s Pod 进行负载平衡
【发布时间】:2018-12-04 01:43:38
【问题描述】:

我通过调整 memcached 示例构建了一个简单的运算符。唯一的主要区别是我的 pod 中需要两个 docker 映像。让部署运行。我的 test.yaml 曾经使用kubectl 进行部署。

apiVersion: "cache.example.com/v1alpha1"
kind: "Memcached"
metadata:
  name: "solar-demo"
spec:
  size: 3
  group: cache.example.com
  names:
    kind: Memcached
    listKind: MemcachedList
    plural: solar-demos
    singular: solar-demo
  scope: Namespaced
  version: v1alpha1

不过,我仍然缺少一件 - 负载平衡部分。目前,在 Docker 下,我们使用 nginx 镜像作为反向代理,配置为:

upstream api_microservice {
  server api:3000;
}
upstream solar-svc_microservice {
  server solar-svc:3001;
}
server {
  listen $NGINX_PORT default;

  location /city {
    proxy_pass http://api_microservice;
  }

  location /solar {
    proxy_pass http://solar-svc_microservice;
  }

  root /html;
  location / {
    try_files /$uri /$uri/index.html /$uri.html /index.html=404;
  }
}

我希望我的集群公开端口 8080 并将端口 30003001 转发到我在 Pod 中运行的图像。

我的部署:

dep := &appsv1.Deployment{
    TypeMeta: metav1.TypeMeta{
        APIVersion: "apps/v1",
        Kind:       "Deployment",
    },
    ObjectMeta: metav1.ObjectMeta{
        Name:      m.Name,
        Namespace: m.Namespace,
    },
    Spec: appsv1.DeploymentSpec{
        Replicas: &replicas,
        Selector: &metav1.LabelSelector{
            MatchLabels: ls,
        },
        Template: v1.PodTemplateSpec{
            ObjectMeta: metav1.ObjectMeta{
                Labels: ls,
            },
            Spec: v1.PodSpec{
                Containers: []v1.Container{
                    {
                        Image:   "shmukler/docker_solar-svc",
                        Name:    "solar-svc",
                        Command: []string{"npm", "run", "start-solar-svc"},
                        Ports: []v1.ContainerPort{{
                            ContainerPort: 3001,
                            Name:          "solar-svc",
                        }},
                    },
                    {
                        Image:   "shmukler/docker_solar-api",
                        Name:    "api",
                        Command: []string{"npm", "run", "start-api"},
                        Ports: []v1.ContainerPort{{
                            ContainerPort: 3000,
                            Name:          "solar-api",
                        }},
                    },
                },
            },
        },
    }

我需要在我的 pod 前面添加什么 ingress 或运行的东西?

谢谢

【问题讨论】:

    标签: go kubernetes kubernetes-helm kubernetes-ingress


    【解决方案1】:

    我需要在我的 Pod 前面添加什么?

    是的,Ingress 专为此类任务而设计。

    Ingress 有一个path-based 路由,它将能够设置与您在 Nginx 示例中提到的相同的配置。此外,Ingress 最流行的实现之一是将Nginx 作为代理。

    Ingress 基本上是一组规则,允许流量(否则丢弃或转发到其他地方)到达集群服务。
    下面是一个 Ingress 配置示例:

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: my-app
    spec:
      rules:
      - host: '' # Empty value means ‘any host’
        http:
          paths:
          - path: /city
            backend:
              serviceName: myapp
              servicePort: 3000
          - path: /solar
            backend:
              serviceName: myapp
              servicePort: 3001
    

    另外,因为Pod 不是静态的东西,您应该创建一个Service 对象,它将作为Ingress 的应用程序的静态入口点。

    这是Service 的示例:

    kind: Service
    apiVersion: v1
    metadata:
      name: myapp
    spec:
      selector:
        app: "NAME_OF_YOUR_DEPLOYMENT"
      ports:
      - name: city
        protocol: TCP
        port: 3000
        targetPort: 3000
      - name: solar
        protocol: TCP
        port: 3001
        targetPort: 3001
    

    【讨论】:

    • 感谢您的回答。做了你建议的。它显示:$ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d solar-demo ClusterIP 10.106.81.209 <none> 3000/TCP,3001/TCP 4m 但是,我的 Pod 中有两个容器。 ingress 怎么知道发送 3000 到 solar-api 和 3001 到 solar-svc
    • 原因是 pod 中的网络是如何工作的,以及我们如何配置从 Ingress 通过 service 到 pod 本身的通信。由于 pod 中的容器共享所有端口,并且我们将服务映射到端口 3000 上的“city”和端口 3001 上的“solar”,它会将请求转发到指定的端口(记得将配置文件中的名称更改为 solar-api 和solar-svc 而不是我的应用程序)。您可以在 link 下找到一篇关于 Pod 内部网络的文章。
    猜你喜欢
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-04
    • 2018-03-12
    • 2019-10-20
    • 2012-06-04
    • 1970-01-01
    相关资源
    最近更新 更多