代码之家  ›  专栏  ›  技术社区  ›  Moshe Shmukler

基于操作框架的负载均衡K8S POD

  •  0
  • Moshe Shmukler  · 技术社区  · 6 年前

    我通过调整memcached示例构建了一个简单的操作符。唯一的主要区别是我需要两个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 并转发到端口 3000 3001 我的照片在豆荚里运行。

    我的部署:

    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",
                            }},
                        },
                    },
                },
            },
        }
    

    我需要补充什么 ingress 或者有什么东西在我的豆荚前跑?

    谢谢你

    1 回复  |  直到 6 年前
        1
  •  1
  •   aurelius    6 年前

    我需要添加什么有入口或在我的豆荚前运行的东西?

    对, Ingress 是为这类任务设计的。

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

    进入 基本上是一组规则,允许通信量(否则丢弃或转发到其他地方)到达群集服务。
    以下是入口配置的示例:

    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 对象,该对象将是应用程序的静态入口点。 进入 是的。

    下面是 服务 :

    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