Kubernetes 单容器节点架构
Kubernetes Single Container Node Architecture
我是 kubernetes 的半新手,据我了解围绕该主题挑选的很多东西,有些东西仍然很难组合在一起。
我有一个以下项目设置,需要有关设置我的 k8 集群的最佳方法的架构建议。
我现在有两个应用程序:API-APP和WORKER-APP,它们的资源消耗都很大,所以我需要为一个应用程序(pod)预留一个节点。
我总共创建了 6 个节点,这样 3 个 API-APP(使用 replicationcontroller 复制)和 3 个 WORKER-APP(使用 replicationcontroller 复制)都可以有自己的节点(它们使用大约 90%CPU/Memory).
目前 k8 只是将它们部署到任何一个节点,有时我有一个案例,我的所有 3 个 API-APP 都在 1 个节点上,我有 2 个节点什么都不做。
有什么方法可以指定我要为 1 个应用保留 1 个节点吗?
我考虑过指定 requests/limit,但要么什么都没发生,要么我做错了什么。
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 个内核,但没有任何反应。
我遇到了这个 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/,这让我找到了正确的方向。 Inter-Pod 亲和力和反亲和力正是我所寻找的。它允许我根据 yaml 文件中提供的标签 key/values 确保同一节点上没有 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
我是 kubernetes 的半新手,据我了解围绕该主题挑选的很多东西,有些东西仍然很难组合在一起。
我有一个以下项目设置,需要有关设置我的 k8 集群的最佳方法的架构建议。
我现在有两个应用程序:API-APP和WORKER-APP,它们的资源消耗都很大,所以我需要为一个应用程序(pod)预留一个节点。
我总共创建了 6 个节点,这样 3 个 API-APP(使用 replicationcontroller 复制)和 3 个 WORKER-APP(使用 replicationcontroller 复制)都可以有自己的节点(它们使用大约 90%CPU/Memory).
目前 k8 只是将它们部署到任何一个节点,有时我有一个案例,我的所有 3 个 API-APP 都在 1 个节点上,我有 2 个节点什么都不做。
有什么方法可以指定我要为 1 个应用保留 1 个节点吗?
我考虑过指定 requests/limit,但要么什么都没发生,要么我做错了什么。
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 个内核,但没有任何反应。
我遇到了这个 https://kubernetes.io/docs/concepts/configuration/assign-pod-node/,这让我找到了正确的方向。 Inter-Pod 亲和力和反亲和力正是我所寻找的。它允许我根据 yaml 文件中提供的标签 key/values 确保同一节点上没有 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