我正在设置一个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的课程,如果我用示例中的图像更改我的图像,那么就没有问题。
1条答案
按热度按时间ajsxfq5m1#
在操作不起作用之后,我决定尝试通过Cloud Shell直接在Azure中编写清单。清单按预期工作,从而了解问题与Deploy操作相关。最后在调试器激活的情况下运行操作,问题终于暴露出来了。映像未从早期作业接收版本。这导致图像显示为“ghcr.io/*****/****:“。