【问题标题】:Azure AKS Deploy using Github Actions使用 Github 操作部署 Azure AKS
【发布时间】:2020-12-03 18:16:16
【问题描述】:

我正在尝试将我的部署自动化到 Azure AKS,但试图弄清楚如何在我的清单文件中引用图像名称。目前我已经注释掉了清单文件中的图像名称,所以看看它是否有效但得到一个错误:

##[error]TypeError: 无法读取未定义的属性“修剪”

这是我的 Github 工作流文件:

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    
    - uses: Azure/docker-login@v1
      with:
        login-server: registry.azurecr.io
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}
    
    - run: |
        docker build . --file Dockerfile_nginx -t registry.azurecr.io/k8sdemo:${{ github.sha }}
        docker push registry.azurecr.io/k8sdemo:${{ github.sha }}
      
    - uses: Azure/k8s-set-context@v1
      with:
        kubeconfig: ${{ secrets.KUBE_CONFIG }}
      

    - uses: Azure/k8s-deploy@v1
      with:
        manifests: |
          k8s/mg-k8s/nginx.yaml
        images: |
          registry.azurecr.io/k8sdemo:${{ github.sha }}
        imagepullsecrets: |
          secret

这是我的清单文件:

apiVersion: v1
kind: Service
metadata:
  name: nginxstaticservice
  namespace: mg-staging
  labels:
    app: nginxstatic
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
  # selector:
  #   app: nginxstatic

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginxstatic-deployment
  namespace: mg-staging
  labels:
    app: nginxstatic
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginxstatic
  template:
    metadata:
      labels:
        app: nginxstatic
    spec:
      containers:
      - name: nginxstatic
        # image: 
        imagePullPolicy: "Always"
        ports:
        - containerPort: 80

        volumeMounts:
          - name: nginx-config
            mountPath: /etc/nginx/conf.d
      volumes:
        - name: nginx-config
          configMap:
            name: nginx-configmap
      imagePullSecrets:
      - name: secret

【问题讨论】:

    标签: kubernetes github-actions azure-aks


    【解决方案1】:

    更新:@Rutnet 找到了使用 Azure/k8s-deploy1@1 操作传递新标签的方法。来自docs

    (可选)要用于的图像的完全限定资源 URL 清单文件上的替换。这个多行输入接受 以换行符分隔的形式指定多个工件替换。 比如——

    images: |   
    contosodemo.azurecr.io/foo:test1  
    contosodemo.azurecr.io/bar:test2
    

    在本例中,所有对 contosodemo.azurecr.io/foocontosodemo.azurecr.io/bar 被搜索 在输入清单文件的图像字段中。对于比赛 找到了,标签 test1 和 test2 被替换。

    根据文档,清单文件需要引用带有默认标记的原始图像。该操作将用指定的标签替换标签。有问题的清单有 image 评论。应该是这样的:

        spec:
          containers:
          - name: nginxstatic
            image: registry.azurecr.io/k8sdemo:some_tag
    

    原回复:

    有几种方法可以实现这一点。您可以使用 HelmKustomize 等模板工具。在这种情况下,您可以在应用清单之前使用sed。在清单文件中添加一个占位符并将其替换为 sed inline。请参阅以下示例:

    ...
    - run: |
        sed -i.bak "/NGINX_IMAGE_URL/registry.azurecr.io\/k8sdemo:${{ github.sha }}" k8s/mg-k8s/nginx.yaml
    
    - uses: Azure/k8s-deploy@v1
          with:
            manifests: |
              k8s/mg-k8s/nginx.yaml
            images: |
              registry.azurecr.io/k8sdemo:${{ github.sha }}
            imagepullsecrets: |
              secret
    ...
    

    在清单文件中添加 NGINX_IMAGE_URL 占位符:

    ...
        spec:
          containers:
          - name: nginxstatic
            image: NGINX_IMAGE_URL
    ...
    

    HTH

    【讨论】:

    • 谢谢。我使用另一种方法解决了它,我只是将图像名称传递给清单。工作流文件自动使用标签。所以我只是将“registry.azurecr.io/k8sdemo”传递到清单文件中
    • 我也在答案中添加了您的发现。如果我遗漏了什么,请告诉我。
    猜你喜欢
    • 2021-04-13
    • 2020-12-20
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2020-09-25
    相关资源
    最近更新 更多