2016-12-16 7 views
6

मुझे यकीन है कि मुझे कुछ स्पष्ट याद आ रही है। मैं ScheduledJobs/Kubernetes पर cronjobs के लिए प्रलेखन के माध्यम से देखा है, लेकिन मैं एक समय पर निम्न करने के लिए एक तरह से नहीं मिल सकता है: एक मौजूदा Pod कुबर्नेट्स में क्रॉन जॉब्स - मौजूदा पॉड से कनेक्ट करें, स्क्रिप्ट निष्पादित करें

  • को

    1. कनेक्ट एक स्क्रिप्ट
    2. डिस्कनेक्ट
    3. निष्पादित

    मेरे पास ऐसा करने के वैकल्पिक तरीके हैं, लेकिन वे सही महसूस नहीं करते हैं।

    1. अनुसूची एक क्रॉन कार्य के लिए: kubectl कार्यकारी $ -यह (फली --selector = कुछ-चयनकर्ता मिल kubectl | सिर -1)/path/to/स्क्रिप्ट

    2. एक तैनाती बनाएं जिसमें एक "क्रोन पॉड" जिसमें आवेदन भी होता है, और कई "गैर क्रॉन पॉड्स" जो केवल आवेदन होते हैं। क्रोन पॉड एक अलग छवि का उपयोग करेगा (एक क्रॉन कार्यों के साथ निर्धारित)।

    मैं क्योंकि यह मुझे यह कर के और अधिक उचित तरीके के रूप में हमलों यदि संभव हो तो एक बार और भी में एक ही नौकरी से अधिक बार चल रहा है को रोकने के लिए Kubernetes ScheduledJobs उपयोग करने के लिए पसंद करेंगे।

    क्या शेड्यूल्ड जॉब्स/क्रोन जॉब्स द्वारा ऐसा करने का कोई तरीका है?

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

  • +0

    आपको मौजूदा पॉड से कनेक्ट क्यों करना है? क्या आप अपनी स्क्रिप्ट को एक नए फली में निष्पादित नहीं कर सकते? एक अन्य संभावना आपके मुख्य फली (उदा। HTTP) पर एक सर्वर खोल रही है और निर्धारित नौकरी से इसे कॉल करें। – kichik

    +0

    यह एक सिम्फनी एप्लिकेशन है जिसे मैं कमांड पर कॉल करना चाहता हूं। सर्वर पर कई किरायेदार हैं और यह 'ls -s */| के लिए आसान होगा कट-एफ 1-डी '/' 'निर्देशिकाओं (इंस्टॉलेशन) की पुनरावर्तनीय सूची प्राप्त करने के लिए मैन्युअल रूप से प्रत्येक इंस्टॉलेशन के लिए क्रॉन एंट्री बनाना होगा। यह 'स्थापना = $ (ls -d */| cut -f1 -d'/') जैसे कुछ के साथ खत्म हो जाएगा; सीडी/पथ/$ स्थापना; php ऐप/कंसोल कुछ: कमांड ' नया पॉड प्रत्येक इंस्टॉलेशन के बारे में नहीं पता होगा और इंस्टॉलेशन चर तक पहुंच नहीं होगी और एप्लिकेशन को सेट अप किए बिना यह वास्तविक उदाहरण होगा। – Aeisor

    उत्तर

    0

    जहां तक ​​मुझे पता है कि वहाँ कोई "आधिकारिक" जिस तरह से इस तरह से आप चाहते हैं करने के लिए है हूँ, और है कि मैं डिजाइन द्वारा विश्वास करते हैं। Pods को क्षणिक और क्षैतिज स्केलेबल माना जाता है, और जॉब्स को बाहर निकलने के लिए डिज़ाइन किया गया है। मौजूदा पॉड में क्रॉन जॉब "संलग्न" होने से उस मॉड्यूल में फिट नहीं होता है। अगर काम पूरा हो गया तो शेड्यूलर को कोई जानकारी नहीं होगी।

    इसके बजाय, एक नौकरी नौकरी चलाने के लिए विशेष रूप से आपके आवेदन का एक उदाहरण ला सकती है और फिर नौकरी पूरी होने के बाद इसे नीचे ले जाती है। ऐसा करने के लिए आप अपनी तैनाती के लिए नौकरी के लिए एक ही छवि का उपयोग कर सकते हैं लेकिन command: सेट करके एक अलग "एंट्रीपॉइंट" का उपयोग कर सकते हैं।

    यदि उन्हें नौकरी के लिए आपके आवेदन द्वारा बनाए गए डेटा तक पहुंच की आवश्यकता है तो उस डेटा को एप्लिकेशन/पॉड के बाहर जारी रखने की आवश्यकता होगी, तो आप इसे कुछ तरीकों से कर सकते हैं लेकिन स्पष्ट तरीके डेटाबेस या लगातार मात्रा होगी। उदाहरण एक डेटाबेस का उपयोग कर कुछ इस तरह दिखेगा के लिए:

    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" 
    

    और एक नौकरी एक ही डाटाबेस से कनेक्ट होता है, लेकिन एक अलग "Entrypoint" के साथ:

    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" 
    

    या लगातार मात्रा दृष्टिकोण होगा कुछ इस तरह दिखाई:

    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 
    

    इस तरह एक नौकरी के साथ, एक ही मात्रा के लिए संलग्न:

    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 
    
    संबंधित मुद्दे