-1

我正在关注教程。我正处于使用命令进行部署的阶段:

kubectl apply -f azure-vote-all-in-one-redis.yaml

YAML 文件如下所示:

version: '3'
services:
  azure-vote-back:
    image: redis
    container_name: azure-vote-back
    ports:
        - "6379:6379"

  azure-vote-front:
    build: ./azure-vote
    image: azure-vote-front
    container_name: azure-vote-front
    environment:
      REDIS: azure-vote-back
    ports:
        - "8080:80"

但是,我收到了错误:

error validating data: [apiVersion not set, kind not set]; if you choose to ignore these errors, turn validation off with --validate=false

如果我添加一个 apiVersion 和一个 Kind,像这样:

apiVersion: v1
kind: Pod

然后我得到错误:

error validating data: ValidationError(Pod): unknown field "services" in io.k8s.api.core.v1.Pod

我在这里错过了什么吗?

4

3 回答 3

2

您似乎正在尝试将 Docker Swarm/Compose YAML 文件应用到您的 Kubernetes 集群。如果没有转换,这将无法直接工作。

使用 Kompose 之类的工具将 Docker YAML 转换为 k8s YAML 是从一个迁移到另一个的有用步骤。

有关更多信息,请参阅https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/

于 2019-02-05T19:09:18.783 回答
1

所以首先,每个 yaml 定义都应该遵循 AKMS 规范:apiVersion、种类、元数据、规范。此外,您应该避免使用 pod 并使用部署。因为部署自己处理 Pod。

这是一个示例 vote-back\front 定义:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: azure-vote-back
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: azure-vote-back
    spec:
      containers:
      - name: azure-vote-back
        image: redis
        ports:
        - containerPort: 6379
          name: redis
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-back
spec:
  ports:
  - port: 6379
  selector:
    app: azure-vote-back
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: azure-vote-front
spec:
  replicas: 3
  strategy:
    rollingUpdate:
      maxSurge: 60%
      maxUnavailable: 60% 
  template:
    metadata:
      labels:
        app: azure-vote-front
    spec:
      containers:
      - name: azure-vote-front
        image: aksrg.azurecr.io/azure-vote-front:voting-dev
        ports:
        - containerPort: 80
        env:
        - name: REDIS
          value: "azure-vote-back"
        - name: MY_POD_NAMESPACE
          valueFrom: {fieldRef: {fieldPath: metadata.namespace}}
      imagePullSecrets:
      - name: k8s
---
apiVersion: v1
kind: Service
metadata:
  name: azure-vote-front
spec:
  type: LoadBalancer
  ports:
  - port: 80
  selector:
    app: azure-vote-front
于 2019-02-05T18:12:59.043 回答
0

就我而言,我正在通过 Travis 在 GKE 上部署我的项目。在我的 travis 文件中,我调用了一个 shell 文件(deploy.sh)。

在 deploy.sh 文件中,我已经编写了创建 kubernetes 资源的所有步骤:

### Deploy

# Apply k8s config
kubectl apply -f .

所以在这里,我替换kubectl apply -f .为单个文件名,如下所示:

### Deploy

# Apply k8s config
kubectl apply -f namespace.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
kubectl apply -f ingress.yaml

然后,错误被修复!

于 2021-05-05T06:35:25.227 回答