如何将所有 kubernetes 对象包含到一个文件中

How to include all kubernetes objects into one file

假设我有两个多容器 pods 和用于将 pods 暴露给集群的服务。我还有 Replication controller 用于随时维护 pods 的数量。

上面的集群是一个简单的例子。此时我有两个 pod 文件、两个服务文件和两个 RC 文件。这使得文件管理变得困难。

我知道所有文件都可以放在一个目录中,然后使用 kubectl create -f directory 在一个命令中执行整个过程。但是,我觉得文件管理是一项开销。有没有像 docker-compose.yml 这样的东西,我们可以在一个文件中包含所有 pods。

我想知道在生产中使用 kubernetes 的最佳实践。在生产中更改许多文件似乎不是一个好主意。

您可以使用三重破折号或列表资源,如以下示例所示:

示例:

列表

apiVersion: v1
kind: List
items:
- apiVersion: v1
  kind: Service
  metadata:
    name: list-service-test
  spec:
    ports:
    - protocol: TCP
      port: 80
    selector:
      app: list-deployment-test
- apiVersion: extensions/v1beta1
  kind: Deployment
  metadata:
    name: list-deployment-test
    labels:
      app: list-deployment-test
  spec:
    replicas: 1
    template:
      metadata:
        labels:
          app: list-deployment-test
      spec:
        containers:
          - name: nginx
            image: nginx

三连击:

---
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: redis
    redis-sentinel: "true"
    role: master
  name: redis-master
spec:
  containers:
    - name: master
      image: kubernetes/redis:v1
      env:
        - name: MASTER
          value: "true"
      ports:
        - containerPort: 6379
      resources:
        limits:
          cpu: "0.5"
      volumeMounts:
        - mountPath: /redis-master-data
          name: data
    - name: sentinel
      image: kubernetes/redis:v1
      env:
        - name: SENTINEL
          value: "true"
      ports:
        - containerPort: 26379
  volumes:
    - name: data
      emptyDir: {}
---
apiVersion: v1
kind: Pod
metadata:
  labels:
    name: redis-proxy
    role: proxy
  name: redis-proxy
spec:
  containers:
  - name: proxy
    image: kubernetes/redis-proxy:v1
    ports:
    - containerPort: 6379
      name: api