如何保护 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