{"id":536,"title":"\u5728k8s\u542f\u52a8docker\u5bb9\u5668\u540e\u5faa\u73af\u5728\u540e\u53f0\u8fd0\u884cshell\u811a\u672c","good":0,"bad":0,"hit":4479,"created_at":"2021-05-19 09:22:23","content":"

\u9700\u6c42\u662f\u8fd9\u6837\u7684\uff0c\u7528php\u7684laravel\u6846\u67b6\u5199\u4e86\u4e2a\u5c0f\u9879\u76ee\uff0c\u8981\u6c42\u5728\u540e\u9762\u6267\u884cphp artisan\u547d\u4ee4\uff0c\u540c\u65f6\u6709\u4e2aphp\u811a\u672c\u8981\u4e00\u76f4\u76d1\u542crabbitmq\u5904\u7406\u6d88\u606f\uff08\u7528\u7684swoole server),\u4f46\u7531\u4e8e\u516c\u53f8\u63d0\u4f9b\u7684\u955c\u50cf\u4e2d\u65e2\u6ca1\u6709crontab,\u4e5f\u6ca1\u6709\u5b89\u88c5supervisor\u7b49\u5de5\u5177\uff0c\u7531\u4e8e\u4e4b\u524d\u5f88\u5c11\u7528\u5230k8s\uff0c\u6478\u7d22\u4e86\u51e0\u5929\u540e\u7ec8\u4e8e\u89e3\u51b3\u4e86\uff1b<\/p>

\u539f\u521b\u4e0d\u6613\uff0c\u8f6c\u8f7d\u8bf7\u4fdd\u7559\uff1ahttp:\/\/www.hu-rong.com\/article\/536<\/a> <\/p>

<\/p>

\"image.png\"\/<\/p>

<\/p>

\u5728k8s\u7684Deployments\u7684\u914d\u7f6e\u4e2d\u52a0\u5165command:<\/p>

kind: Deployment<\/p>

apiVersion: apps\/v1<\/p>

metadata:<\/p>

  name: taibao-api<\/p>

  namespace: autocall-test<\/p>

  selfLink: \/apis\/apps\/v1\/namespaces\/autocall-test\/deployments\/taibao-api<\/p>

  uid: a15d5385-e38c-4b79-93d2-7761904c5f06<\/p>

  resourceVersion: '7058731457'<\/p>

  generation: 19<\/p>

  creationTimestamp: '2021-05-19T07:48:31Z'<\/p>

  labels:<\/p>

    name: taibao-api<\/p>

  annotations:<\/p>

    deployment.kubernetes.io\/revision: '19'<\/p>

    kubectl.kubernetes.io\/last-applied-configuration: ><\/p>

      {"apiVersion":"apps\/v1","kind":"Deployment","metadata":{"annotations":{},"labels":{"name":"taibao-api"},"name":"taibao-api","namespace":"autocall-test"},"spec":{"minReadySeconds":10,"replicas":1,"revisionHistoryLimit":3,"selector":{"matchLabels":{"name":"taibao-api"}},"strategy":{"rollingUpdate":{"maxSurge":"25%","maxUnavailable":"25%"},"type":"RollingUpdate"},"template":{"metadata":{"creationTimestamp":null,"labels":{"name":"taibao-api"}},"spec":{"containers":[{"env":[{"name":"ARGS","value":null},{"name":"aliyun_logs_taibao-api","value":"stdout"},{"name":"logtail","value":"taibao-api"},{"name":"POD_NAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.name"}}},{"name":"POD_NAMESPACE","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.namespace"}}},{"name":"POD_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.podIP"}}},{"name":"HOST_IP","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"status.hostIP"}}}],"image":"registry-vpc.cn-beijing.aliyuncs.com\/icsoc\/taibao-api:taibao-api-2021_05_19-19_43_56","imagePullPolicy":"Always","name":"taibao-api","ports":[{"containerPort":80,"name":"web","protocol":"TCP"}],"resources":{"limits":{"cpu":"1024m","memory":"2048Mi"},"requests":{"cpu":"500m","memory":"1200Mi"}},"volumeMounts":[{"mountPath":"\/www\/.env","name":"taibao-api-cm","subPath":".env"}]}],"dnsPolicy":"ClusterFirst","imagePullSecrets":[{"name":"autocall-test"}],"restartPolicy":"Always","terminationGracePeriodSeconds":60,"volumes":[{"configMap":{"defaultMode":420,"name":"taibao-api-cm"},"name":"taibao-api-cm"}]}}}}<\/p>

spec:<\/p>

  replicas: 1<\/p>

  selector:<\/p>

    matchLabels:<\/p>

      name: taibao-api<\/p>

  template:<\/p>

    metadata:<\/p>

      creationTimestamp: null<\/p>

      labels:<\/p>

        name: taibao-api<\/p>

    spec:<\/p>

      volumes:<\/p>

        - name: taibao-api-cm<\/p>

          configMap:<\/p>

            name: taibao-api-cm<\/p>

            defaultMode: 420<\/p>

      containers:<\/p>

        - name: taibao-api<\/p>

          image: >-<\/p>

            registry-vpc.cn-beijing.aliyuncs.comxxxxxxxxxxxxxxxxxxxxxxxx<\/p>

          command:<\/strong><\/span><\/p>

            - \/bin\/sh<\/strong><\/span><\/p>

          args:<\/strong><\/span><\/p>

            - '-c'<\/strong><\/span><\/p>

            - sh \/data\/www\/crontab.sh<\/strong><\/span><\/p>

          ports:<\/p>

            - name: web<\/p>

              containerPort: 80<\/p>

              protocol: TCP<\/p>

          volumeMounts:<\/p>

            - name: taibao-api-cm<\/p>

              mountPath: \/www\/.env<\/p>

              subPath: .env<\/p>

            - name: taibao-api-cm<\/p>

              mountPath: \/data\/www\/.env<\/span><\/strong><\/p>

              subPath: .env<\/p>

<\/p>

\u5efa\u4e00\u4e2ashell\u811a\u672ccrontab.sh\u653e\u5230\u9879\u76ee\u6839\u76ee\u5f55\u4e2d\uff0c\u5bb9\u5668\u542f\u52a8\u540e\u5c06\u6302\u8f7d\u5230\/data\/www\/crontab.sh,\u811a\u672c\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>

#\/bin\/sh<\/span><\/p>

while(true)<\/span><\/p>

do<\/span><\/p>

    time=$(date "+%Y-%m-%d %H:%M:%S")<\/span><\/p>

    echo $time >> crontab.txt<\/span><\/p>

    \/usr\/local\/bin\/php \/data\/www\/artisan schedule:run  >> crontab.txt<\/span><\/p>

<\/span>echo artisan-end >> crontab.txt<\/span><\/p>

    sleep 1<\/span><\/p>

done<\/span><\/p>

<\/p>

<\/p>

\u5f53\u5bb9\u5668\u542f\u52a8\u540e\u5c06\u6bcf\u9694\u4e00\u79d2:<\/p>

\u8f93\u51fa\u5f53\u524d\u65f6\u95f4\u5230\u9879\u76ee\u6839\u76ee\u5f55\u4e0b\u7684crontab.txt\u4e2d\uff0c<\/p>

\u540c\u65f6\u6bcf\u9694\u4e00\u5206\u949f\u6267\u884cphp artisan\u547d\u4ee4\uff0c\u4e14\u6267\u884c\u4fe1\u606f\u4e5f\u4f1a\u5199\u5165\u5230crontab.txt\u4e2d\uff0c<\/p>

\u6700\u540e\u5199\u5165artisan-end\u5230crontab.txt\u4e2d<\/p>

<\/p>

\u8fd9\u6837\u5373\u4f7fswoole\u670d\u52a1\u6302\u4e86\uff0c\u4e00\u79d2\u540e\u4e5f\u4f1a\u91cd\u65b0\u542f\u52a8\uff1b<\/p>

<\/p>

<\/p>

\u8fd8\u6709\u4e00\u79cd\u7528api\u7684\u65b9\u5f0f\uff0c\u5199\u4e00\u4e2a\u63a5\u53e3\u6267\u884c\u4e00\u4e0bshell_exec,\u5b9a\u65f6\u53bb\u8bf7\u6c42\uff1a<\/p>

<\/p>

\/**\n * k8s api\u65b9\u5f0f\u5b9e\u73b0\u5b9a\u65f6php artisan\n *\/\npublic function artisan()\n{\n    $file = dirname(dirname(dirname(dirname(dirname(dirname(__FILE__)))))) . '\/k8s.txt';\n    $time = date('Y-m-d H:i:s', time()) . "\\n";\n    file_put_contents($file, $time, FILE_APPEND);\n    shell_exec("chmod -R 777 \/data\/www\/storage");\n    shell_exec("\/usr\/local\/bin\/php \/data\/www\/artisan schedule:run  >> " . $file);\n    file_put_contents($file, "k8s done\\n", FILE_APPEND);\n}<\/pre>

<\/p>"}