【问题标题】:error when creating "deployment.yaml": Deployment in version "v1" cannot be handled as a Deployment创建“deployment.yaml”时出错:版本“v1”中的部署不能作为部署处理
【发布时间】:2019-12-05 14:30:06
【问题描述】:

我是 DevOps 的新手。我为刚刚在 Digital Oceans 上创建的 Kubernetes 集群编写了一个 deployment.yaml 文件。创建部署时不断出现我现在无法解码的错误。这只是一个测试部署,为我公司的 web 应用程序迁移到 kubernetes 做准备。

我尝试编辑部署的内容,使其看起来像我找到的传统示例。我什至无法让这个简单的例子工作。您可以在下面找到 deployment.yaml 内容。

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: testit-01-deployment
spec:
  replicas: 4
  #number of replicas generated
  selector:
    #assigns labels to the pods for future selection
    matchLabels:
      app: testit
      version: v01
  template:
    metadata:
      Labels:
        app: testit
        version: v01
    spec:
      containers:
        -name: testit-container
        image: teejayfamo/testit
        ports:
          -containerPort: 80

我在文件夹容器中的 cmd 上运行了这一行:

kubectl apply -f deployment.yaml --validate=false

来自服务器的错误(BadRequest):创建“deployment.yaml”时出错: 版本“v1”中的部署不能作为部署处理: v1.Deployment.Spec: v1.DeploymentSpec.Template: v1.PodTemplateSpec.Spec:v1.PodSpec.Containers:[]v1.Container:解码 切片:期望 [ 或 n,但发现 {,在 #10 字节中发现错误 ...|tainers":{"-name":"t|..., 更大的上下文 ...|:"testit","version":"v01"}},"spec":{"containers":{"-name":"testit-container","image":"teejayfamo/tes|。 ..

我什至无法从搜索中获得任何有关此的信息。我不能只创建部署。请问,谁能理解并帮我解决?

【问题讨论】:

  • 请粘贴您收到的整个错误消息。

标签: docker deployment kubernetes


【解决方案1】:

由于这是搜索的最高结果,我想我应该在可能发生这种情况时添加另一个案例。就我而言,它即将到来是因为数字环境中没有双引号。变种日志确实提供了一个微妙的提示,但不是很有帮助。

日志

..., bigger context ...|c-server-service"},{"name":"SERVER_PORT","value":80}]

Env 变量 - SERVER_PORT 的值需要用双引号括起来。

env:
  - name: SERVER_HOST
    value: grpc-server-service
  - name: SERVER_PORT
    value: "80"

Kubernetes issue 仍处于打开状态。

【讨论】:

  • 好点!这对 Env 部分中的任何数值都有效。
  • 哇,这正是我的问题..
  • 我的问题也是... +1
【解决方案2】:

您的 yaml 文件中存在语法错误。

这应该可行。

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: testit-01-deployment
spec:
  replicas: 4
  #number of replicas generated
  selector:
    #assigns labels to the pods for future selection
    matchLabels:
      app: testit
      version: v01
  template:
    metadata:
      labels:
        app: testit
        version: v01
    spec:
      containers:
      - name: testit-container
        image: teejayfamo/testit
        ports:
        - containerPort: 80

问题是:

  • Labels 应该是 labels
  • - name:- containerPort 的语法在 spec.containers 部分中的格式不正确。

希望这会有所帮助。

【讨论】:

  • 非常感谢。确实重写了整个代码,加入了所有建议并锁定了更多。它最终确实运行了,并且部署上线了。谢谢。不过,我认为需要对来自 kubectl 的错误消息做更多的工作。这对调试有很大帮助。谢谢@mchawre。您的回复有所帮助。
  • 在我的例子中,一个环境变量没有用双引号括起来!
  • DITTO to @Klaus,在引用 yaml 树时,Helm values.yaml 中的环境变量需要双引号:{{- toYaml .Values.app.env | nindent 8 }}
猜你喜欢
  • 2020-02-14
  • 2022-01-12
  • 2021-09-15
  • 2021-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
相关资源
最近更新 更多