Kubernetes:仅在一个节点池中部署

Bib*_*bas 2 deployment kubernetes google-kubernetes-engine

我目前正在为生产环境创建 Kubernetes 集群。在我的集群中,我有 2 个节点池,我们称它们api-poolweb-pool

在我的 中api-pool,我有 2 个节点,每个节点都有 4CPU 和 15Gb RAM。

我正在尝试在 my 中部署 api 的 8 个副本api-pool,每个副本应有 1CPU 和 3.5Gi RAM。

我的 api.deployment.yaml 看起来像这样:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-dev
spec:
  replicas: 8
  selector:
    matchLabels:
      app: my-api
  template:
    metadata:
      labels:
        app: my-api
    spec:
      containers:
      - name: api-docker
        image: //MY_IMAGE
        imagePullPolicy: Always
        envFrom:
          - configMapRef:
              name: api-dev-env
          - secretRef:
              name: api-dev-secret
        ports:
          - containerPort: 80
        resources:
          requests:
            cpu: "1"
            memory: "3.5Gi"
Run Code Online (Sandbox Code Playgroud)

但我的问题是Kubernetes 将 pod 部署在 myweb-pool和 my 的api-pool节点上,但我希望这些 pod 仅部署在 my 中api-pool

我尝试标记我的节点api-pool以使用与标签匹配的选择器,但它不起作用,而且我不确定它是否应该以这种方式工作。

我如何精确到 K8s 仅在我的 中部署这 8 个副本api-pool

Arg*_*dhu 5

您可以使用节点选择器,这是节点选择约束的最简单推荐形式。

使用 pool=api 标记 api-pool 的节点

kubectl label nodes nodename pool=api
Run Code Online (Sandbox Code Playgroud)

添加nodeSelectorPod 规格。

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-dev
spec:
  replicas: 8
  selector:
    matchLabels:
      app: my-api
  template:
    metadata:
      labels:
        app: my-api
    spec:
      containers:
      - name: api-docker
        image: //MY_IMAGE
        imagePullPolicy: Always
        envFrom:
          - configMapRef:
              name: api-dev-env
          - secretRef:
              name: api-dev-secret
        ports:
          - containerPort: 80
        resources:
          requests:
            cpu: "1"
            memory: "3.5Gi"
      nodeSelector:
        pool: api
Run Code Online (Sandbox Code Playgroud)

对于模式高级用例,您可以使用节点亲和力