我是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个内核但没有任何反应。
答案 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