如何保护 kubernetes 集群免受配置错误的影响?
How to protect kubernetes cluster against configuration errors?
我在测试 kubernetes 集群 (1.2.5) 中尝试过,通过创建一对冲突的复制控制器(首先)和部署(之后),可以轻松地使集群过载,例如:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx2
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
对抗
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
因此,如果几个团队成员在同一个 kubernetes 集群上工作,很容易发生一个错误导致集群上所有服务崩溃的情况。
防止此类操作错误的工具或最佳做法是什么?
对此有一些讨论,但还没有很好的解决方案。
在 Kubernetes 之外,您可能必须编写脚本 describe
所有 ReplicationControllers/ReplicaSets/Deployments,并确保您要添加的新选择器在允许 kubectl create
呼唤。
在 Kubernetes 内部,还有一些其他可能的解决方案:
- kubectl 可以进行重叠选择器检查。
- Pods 可以由控制器 "owned",这样他们就不会被争夺。
您可以将您的想法添加到https://github.com/kubernetes/kubernetes/issues/2210
我在测试 kubernetes 集群 (1.2.5) 中尝试过,通过创建一对冲突的复制控制器(首先)和部署(之后),可以轻松地使集群过载,例如:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx2
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
对抗
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
因此,如果几个团队成员在同一个 kubernetes 集群上工作,很容易发生一个错误导致集群上所有服务崩溃的情况。
防止此类操作错误的工具或最佳做法是什么?
对此有一些讨论,但还没有很好的解决方案。
在 Kubernetes 之外,您可能必须编写脚本 describe
所有 ReplicationControllers/ReplicaSets/Deployments,并确保您要添加的新选择器在允许 kubectl create
呼唤。
在 Kubernetes 内部,还有一些其他可能的解决方案:
- kubectl 可以进行重叠选择器检查。
- Pods 可以由控制器 "owned",这样他们就不会被争夺。
您可以将您的想法添加到https://github.com/kubernetes/kubernetes/issues/2210