gpt4 book ai didi

Kubernetes 作业和部署

转载 作者:行者123 更新时间:2023-12-02 12:01:43 24 4
gpt4 key购买 nike

我可以在单个配置文件/操作中运行作业和部署吗
部署将在哪里等待作业完成并检查它是否成功以便继续部署?

最佳答案

根据您提供的信息,我相信您可以使用名为 InitContainer 的 Kubernetes 功能实现您的目标。 :

Init containers are exactly like regular containers, except:

  • Init containers always run to completion.
  • Each init container must complete successfully before the next one starts.

If a Pod’s init container fails, Kubernetes repeatedly restarts the Pod until the init container succeeds. However, if the Pod has a restartPolicy of Never, Kubernetes does not restart the Pod.


  • 我会创建一个 initContainerbusybox运行命令linux等待服务mydb在继续部署之前运行。

  • 重现步骤:
    - 使用 initContainer 创建部署这将运行在进行部署之前需要完成的作业:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
    labels:
    run: my-app
    name: my-app
    spec:
    replicas: 2
    selector:
    matchLabels:
    run: my-app
    template:
    metadata:
    labels:
    run: my-app
    spec:
    restartPolicy: Always
    containers:
    - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
    initContainers:
    - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', "until nslookup mydb.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local; do echo waiting for mydb; sleep 2; done"]

    在这个领域可以使用多种命令,你只需要选择一个包含你需要的二进制文件的 docker 镜像(包括你的 sequelize 作业)
  • 现在让我们应用它看看部署的状态:
  • $ kubectl apply -f my-app.yaml 
    deployment.apps/my-app created

    $ kubectl get pods
    NAME READY STATUS RESTARTS AGE
    my-app-6b4fb4958f-44ds7 0/1 Init:0/1 0 4s
    my-app-6b4fb4958f-s7wmr 0/1 Init:0/1 0 4s

    pod 被搁置 Init:0/1等待初始化容器完成的状态。
    - 现在让我们创建 initcontainer 在完成任务之前等待运行的服务:
    apiVersion: v1
    kind: Service
    metadata:
    name: mydb
    spec:
    ports:
    - protocol: TCP
    port: 80
    targetPort: 9377
  • 我们将应用它并监控 Pod 中的变化:
  • $ kubectl apply -f mydb-svc.yaml 
    service/mydb created

    $ kubectl get pods -w
    NAME READY STATUS RESTARTS AGE
    my-app-6b4fb4958f-44ds7 0/1 Init:0/1 0 91s
    my-app-6b4fb4958f-s7wmr 0/1 Init:0/1 0 91s
    my-app-6b4fb4958f-s7wmr 0/1 PodInitializing 0 93s
    my-app-6b4fb4958f-44ds7 0/1 PodInitializing 0 94s
    my-app-6b4fb4958f-s7wmr 1/1 Running 0 94s
    my-app-6b4fb4958f-44ds7 1/1 Running 0 95s
    ^C
    $ kubectl get all
    NAME READY STATUS RESTARTS AGE
    pod/my-app-6b4fb4958f-44ds7 1/1 Running 0 99s
    pod/my-app-6b4fb4958f-s7wmr 1/1 Running 0 99s

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    service/mydb ClusterIP 10.100.106.67 <none> 80/TCP 14s

    NAME READY UP-TO-DATE AVAILABLE AGE
    deployment.apps/my-app 2/2 2 2 99s

    NAME DESIRED CURRENT READY AGE
    replicaset.apps/my-app-6b4fb4958f 2 2 2 99s

    如果您需要帮助将其应用于您的环境,请告诉我。

    关于Kubernetes 作业和部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60738408/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com