2016-12-16 17 views
6

yürütmek, mevcut Pod'a bağlanın. Ben Kubernetes üzerinde ScheduledJobs/Cronjobs belgelerine baktım, ama ben bir programa aşağıdakileri yapmak için bir yol bulamıyor: Bir komut dosyası Cron Jobs - Ben belirgin bir şey eksik eminim senaryoyu

  • ayırın
  • Yürütme varolan Pod
  • için

    1. Bağlan

    Bunu yapmanın alternatif yöntemler var, ama onlar doğru hissetmiyorum.

    1. Program bir cron görevi için: kubectl exec $ -Bu (bazı seçici = --selector bölmeleri olsun kubectl | kafa -1)// yol/komut

    2. olan bir dağıtım oluşturma bir de uygulamayı barındıran "Cron Pod" ve sadece uygulama birçok "Non Cron Kapsüller". Cron Pod, farklı bir resim kullanır (biri planlanan cron görevleri ile birlikte). bunu yapmanın daha uygun yol olarak beni çarptığı çünkü bir kez ve ayrıca birden çok kez çalıştıran aynı Job önlemek için mümkünse

    Ben Kubernetes ScheduledJobs kullanmayı tercih ediyorum.

    ScheduledJobs/Cronjobs bunu yapmanın bir yolu var mı?

    http://kubernetes.io/docs/user-guide/cron-jobs/

  • +0

    Neden varolan bir bölüme bağlanmak zorundasınız? Komut dosyanızı yeni bir bölmede yürütemez misiniz? Başka bir olasılık, ana bölmenizde (ör. HTTP) bir sunucu açmak ve programlanan işten bir çağrı yapmaktır. – kichik

    +0

    Bu, komutları çağırmak istediğim Symfony uygulamasıdır. Sunucuda birçok kiracı var ve daha kolay olurdu ls -s */| -f1 -d '/' 'yinelenen dizinleri (kurulumları) almak için, her kurulum için elle bir cron girişi oluşturulmasından daha fazla. Bu, 'installation = $ (ls -d */| cut -f1 -d'/') gibi bir şeyle sonuçlanacak; cd/yol/$ yükleme; php app/console bazı: command' Yeni pod, her kurulumdan haberi olmayacak ve aşağı çekmeden ve gerçek bir örnekmiş gibi uygulamayı kurmadan kurulum değişkenlerine erişemeyecek. – Aeisor

    cevap

    0

    Bildiğim kadarıyla istediğiniz bu şekilde yapmak için hiçbir "resmi" bir yolu vardır farkındayım olarak, ve ben tasarımdan inanmak. Podlar geçici ve yatay olarak ölçeklenebilir olmalı ve İşler çıkmak için tasarlanmıştır. Varolan bir pod için bir cron işi "ek" olması bu modüle uymuyor. İşin tamamlanıp sonuçlanmadığını Scheduler'ın hiçbir fikri olmazdı.

    Bunun yerine, bir iş özellikle İşi yayınlanmasına ilişkin uygulamasının örneğini getirmek için olabilir ve İş tamamlandıktan sonra sonra aşağı çekmek. Bunu yapmak için size Dağıtım gelince Job için aynı Resim kullanmak ancak command: ayarlayarak farklı "GirişNoktası" kullanabilirsiniz.

    İşiniz, uygulamanız tarafından oluşturulan verilere erişmeye ihtiyaç duyuyorsa, bu verilerin uygulama/Pod dışında kalıcı olması gerekir, bunun birkaç yolu olabilir, ancak açık yollar bir veritabanı veya kalıcı bir birim olabilir. böyle bir şey olmazdı bir veritabanı useing Örneğin:

    apiVersion: extensions/v1beta1 
    kind: Deployment 
    metadata: 
        name: APP 
    spec: 
        template: 
        metadata: 
         labels: 
         name: THIS 
         app: THAT 
        spec: 
         containers: 
         - image: APP:IMAGE 
          name: APP 
          command: 
          - app-start 
          env: 
          - name: DB_HOST 
           value: "127.0.0.1" 
          - name: DB_DATABASE 
           value: "app_db" 
    

    Ve aynı veritabanına bağlanan bir iş, ancak farklı bir "GirişNoktası" ile:

    apiVersion: batch/v1 
    kind: Job 
    metadata: 
        name: APP-JOB 
    spec: 
        template: 
        metadata: 
         name: APP-JOB 
         labels: 
         app: THAT 
        spec: 
         containers: 
         - image: APP:IMAGE 
         name: APP-JOB 
         command: 
         - app-job 
         env: 
          - name: DB_HOST 
          value: "127.0.0.1" 
          - name: DB_DATABASE 
          value: "app_db" 
    

    Veya kalıcı hacim yaklaşımı olur aynı hacimde takılarak, böyle bir iş ile

    apiVersion: extensions/v1beta1 
    kind: Deployment 
    metadata: 
        name: APP 
    spec: 
        template: 
        metadata: 
         labels: 
         name: THIS 
         app: THAT 
        spec: 
         containers: 
         - image: APP:IMAGE 
          name: APP 
          command: 
          - app-start 
          volumeMounts: 
          - mountPath: "/var/www/html" 
          name: APP-VOLUME 
         volumes: 
         - name: APP-VOLUME 
          persistentVolumeClaim: 
          claimName: APP-CLAIM 
    
    --- 
    
    apiVersion: v1 
    kind: PersistentVolume 
    metadata: 
        name: APP-VOLUME 
    spec: 
        capacity: 
        storage: 10Gi 
        accessModes: 
        - ReadWriteMany 
        persistentVolumeReclaimPolicy: Retain 
        nfs: 
        path: /app 
    
    --- 
    
    apiVersion: v1 
    kind: PersistentVolumeClaim 
    metadata: 
        name: APP-CLAIM 
    spec: 
        accessModes: 
        - ReadWriteMany 
        resources: 
        requests: 
         storage: 10Gi 
        selector: 
        matchLabels: 
         service: app 
    

    : şuna benzer

    apiVersion: batch/v1 
    kind: Job 
    metadata: 
        name: APP-JOB 
    spec: 
        template: 
        metadata: 
         name: APP-JOB 
         labels: 
         app: THAT 
        spec: 
         containers: 
         - image: APP:IMAGE 
         name: APP-JOB 
         command: 
         - app-job 
         volumeMounts: 
         - mountPath: "/var/www/html" 
          name: APP-VOLUME 
        volumes: 
         - name: APP-VOLUME 
         persistentVolumeClaim: 
          claimName: APP-CLAIM 
    
    İlgili konular