Kubernetes单一容器节点架构

时间:2018-01-04 22:55:20

标签: docker kubernetes yaml azure-container-service

我是kubernetes的半新手,因为我理解樱桃围绕这个话题的许多事情,有些事情仍然难以组合在一起。

我有一个以下项目设置,需要一个架构建议,以了解设置我的k8群集的最佳方法。

我现在有两个应用程序:API-APP和WORKER-APP,它们都有大量的资源消耗,因此我需要为一个应用程序(pod)保留一个节点。

我创建了总共6个节点,因此3个API-APP(使用复制控制器复制)和3个WORKER-APP(使用复制控制器复制)都可以拥有自己的节点(它们使用大约90%的CPU /内存)。

目前k8只是将它们部署到任何一个节点,有时我的情况是我的所有3个API-APP都存在于1个节点上,我有2个节点什么都不做。

有没有办法指定我想为1个应用程序保留1个节点?

我已经看过指定请求/限制,但要么就是没有任何反应或者我做错了。

yaml文件:

# RC for svc1
kind: ReplicationController
apiVersion: v1
metadata:
  name: APP-API
spec:
  replicas: 3
  selector:
  template:
    metadata:
      labels:
        app: APP-API
    spec:
      containers:
      - name: APP-API
        image: SOME-IMAGE
        resources:
          limits:
            cpu: "7000m"
        requests:
          cpu: "7000m"
        env:
        - name: APP_SVC
          value: APP-API
        ports:
        - containerPort: 80
          protocol: TCP
---
# Service for svc1
kind: Service
apiVersion: v1
metadata:
  labels:
    app: APP-API
  name: APP-API
spec:
  type: ClusterIP
  ports:
  - port: 80
    name: http
  selector:
    app: APP-API

我的机器有全部8个内核所以在这种情况下我试图告诉它要求7个内核但没有任何反应。

enter image description here

1 个答案:

答案 0 :(得分:1)

我遇到了这个https://kubernetes.io/docs/concepts/configuration/assign-pod-node/,这使我走向了正确的方向。 Inter-Pod亲和力和反亲和力正是我所寻求的。它允许我根据yaml文件中提供的标签键/值确保在同一节点上没有运行2个应用程序。

我的yaml看起来非常相似:

apiVersion: apps/v1beta1 # for versions before 1.6.0 use extensions/v1beta1
kind: Deployment
metadata:
  name: redis-cache
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: store
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - store
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: redis-server
        image: redis:3.2-alpine