部署到Azure kubernetes时解析清单时出错

tzxcd3kk  于 2023-05-06  发布在  Kubernetes
关注(0)|答案(1)|浏览(96)

我正在设置一个GitHub操作以部署到Azure kubernetes。部署作业如下所示:

deploy:
    name: Deploy to kubernetes
    runs-on: ubuntu-latest
    needs: docker
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Setup kubectl
        uses: Azure/setup-kubectl@v3
      - name: Setup cluster context
        uses: Azure/k8s-set-context@v3
        with:
          method: kubeconfig
          kubeconfig: ${{ secrets.AZURE_K8_KUBECONFIG }}
      - name: Deploy to Azure
        uses: Azure/k8s-deploy@v4
        with:
          manifests: manifests/test/manifest.yml
          images: ghcr.io/${{ env.image_name }}:${{ needs.release-on-push.outputs.version }}
          pull-images: false
          annotate-namespace: false

当它进入部署阶段时,它会运行一个清单,看起来像这样:

apiVersion: v1
kind: Service
metadata:
  name: localizer
spec:
  selector:
    app: localizer
  ports:
    - name: std-api-ports
      port: 8080
      targetPort: http-in

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: localizer
  labels:
    app: localizer
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
    nginx.ingress.kubernetes.io/proxy-body-size: "300M"
spec:
  ingressClassName: nginx-default
  rules:
    - host: localizer.UUID.LOCATION.aksapp.io
      http:
        paths:
          - backend:
              service:
                name: localizer
                port:
                  name: std-api-ports
            path: /
            pathType: Prefix

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: localizer
  labels:
    app: localizer
    domain: frontend
spec:
  replicas: 2
  selector:
    matchLabels:
      app: localizer
  strategy:
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        app: localizer
    spec:
      containers:
        - name: localizer
          image: ghcr.io/urltorepo
          resources:
            requests:
              cpu: 0.5
              memory: 2G
            limits:
              memory: 2G
          ports:
            - name: http-in
              containerPort: 8080
          env:
            - name: NODE_ENV
              value: "test"
          imagePullPolicy: Always
          livenessProbe:
            httpGet:
              path: /ping
              port: http-in
            failureThreshold: 3
            periodSeconds: 30
          startupProbe:
            httpGet:
              path: /ping
              port: http-in
            failureThreshold: 12
            periodSeconds: 10

然后,工作流会因以下错误而失败:

Run Azure/k8s-deploy@v4
  with:
    manifests: manifests/test/manifest.yml
    images: ghcr.io/***/localizer:
    pull-images: false
    annotate-namespace: false
    namespace: default
    strategy: basic
    route-method: service
    version-switch-buffer: 0
    traffic-split-method: pod
    percentage: 0
    action: deploy
    force: false
    token: ***
    private-cluster: false
    skip-tls-verify: false
  env:
    image_name: ***/localizer
    AZURE_WEBAPP_NAME: localizer-app
    KUBECONFIG: /home/runner/work/_temp/kubeconfig_1682630327009
Deploying manifests
  /opt/hostedtoolcache/kubectl/1.27.1/x64/kubectl apply -f /tmp/manifest.yml --namespace default
  service/localizer unchanged
  ingress.networking.k8s.io/localizer configured
  error: error parsing /tmp/manifest.yml: error converting YAML to JSON: yaml: line 25: mapping values are not allowed in this context
  Error: Error: undefined

从控制台上看,服务似乎已经设置好了,入口也已经设置好了,这让我相信部署是有错误的。我已经通过YAML验证器运行了清单,它通过了。我试着从清单中注解掉值,因此控制台显示服务没有改变,Ingress是配置的而不是创建的。我现在似乎看不出错误在哪里。
更新:我现在尝试将清单文件拆分为三个文件(部署、入口和服务)。这使我能够弄清楚,这肯定是导致错误的部署清单。我还发现这个错误与“image”元素有关。我试着遵循微软关于Azure kubernetes的课程,如果我用示例中的图像更改我的图像,那么就没有问题。

ajsxfq5m

ajsxfq5m1#

在操作不起作用之后,我决定尝试通过Cloud Shell直接在Azure中编写清单。清单按预期工作,从而了解问题与Deploy操作相关。最后在调试器激活的情况下运行操作,问题终于暴露出来了。映像未从早期作业接收版本。这导致图像显示为“ghcr.io/*****/****:“。

相关问题