Kubernetes ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก: ื•ื•ืขื’ืŸ ื”ื™ื’ืข ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข

Kubernetes ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก: ื•ื•ืขื’ืŸ ื”ื™ื’ืข ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข

ืžื™ืจ ื–ืขื ืขืŸ ื™ื ืงืจื™ืกื™ื ื’ืœื™ ื’ืขืคืจืขื’ื˜ ื•ื•ืขื’ืŸ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก ืื™ืŸ Kubernetes. ื“ืขื•ื•ืขืœืึธืคึผืขืจืก, ืกืคึผืขืฆื™ืขืœ ื™ื ื˜ืขืจืคึผืจืึทื˜ืึทื“ ืฉืคึผืจืึทื›ืŸ, ื•ื•ื™ืœืŸ ืฆื• ื’ืขืฉื•ื•ื™ื ื“ ืจื™ื›ื˜ื™ืง ืงืึธื“ ืื™ืŸ ื–ื™ื™ืขืจ ื‘ืึทืœื™ื‘ืกื˜ืข IDE ืื•ืŸ ื–ืขืŸ ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜ ืึธืŸ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ื‘ื•ื™ืขืŸ / ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ - ืคืฉื•ื˜ ื“ืจื™ื ื’ืœืขืš F5. ืื•ืŸ ื•ื•ืขืŸ ืขืก ื’ืขืงื•ืžืขืŸ ืฆื• ืึท ืžืึทื ืึทืœื™ื˜ื™ืง ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ืœืึธื•ืงืึทืœื™ ื™ื ืกื˜ืึทืœื™ืจืŸ ืึท ื“ืึทื˜ืึทื‘ื™ื™ืก ืื•ืŸ ืึท ื•ื•ืขื‘ ืกืขืจื•ื•ืขืจ (ืื™ืŸ ื“ืึธืงืงืขืจ, ื•ื•ื™ืจื˜ื•ืึทืœื‘ืึธืงืก ...), ืื•ืŸ ื“ืขืžืึธืœื˜ ื’ืœื™ื™ืš ื”ื ืื” ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’. ืžื™ื˜ ื“ื™ ืงืึทื˜ื™ื ื’ ืคื•ืŸ ืžืึทื ืึทืœื™ื˜ืก ืื™ืŸ ืžื™ืงืจืึธืกืขืจื•ื•ื™ืกืขืก ืื•ืŸ ื“ื™ ืึธื ืงื•ืžืขืŸ ืคื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก, ืžื™ื˜ ื“ื™ ืื•ื™ืกื–ืขืŸ ืคื•ืŸ ื“ื™ืคึผืขื ื“ืึทื ืกื™ื– ืื•ื™ืฃ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ, โ€‹โ€‹ืึทืœืฅ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ื‘ื™ืกืœ ืžืขืจ ืฉื•ื•ืขืจ. ื“ื™ ืžืขืจ ืคื•ืŸ ื“ื™ ืžื™ืงืจืึธ ื‘ืึทื“ื™ื ื•ื ื’ืก, ื“ื™ ืžืขืจ ืคึผืจืึธื‘ืœืขืžืก. ืฆื• ื’ืขื ื™ืกืŸ ืคื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื•ื•ื™ื“ืขืจ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื›ืึทืคึผืŸ ืžืขืจ ื•ื•ื™ ืื™ื™ืŸ ืึธื“ืขืจ ืฆื•ื•ื™ื™ ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจื–, ืื•ืŸ ืžืืœ ืืคื™ืœื• ืžืขืจ ื•ื•ื™ ืึท ื˜ื•ืฅ ... ืื™ืŸ ืึทืœื’ืขืžื™ื™ืŸ, ื“ืึธืก ืึทืœืฅ ืงืขืŸ ื ืขืžืขืŸ ื’ืึทื ืฅ ืึท ืคึผืœืึทืฅ ืคื•ืŸ ืฆื™ื™ื˜, ื•ื•ื™ื™ึทืœ ืขืก ื“ืึทืจืฃ ืื•ื™ืš ื–ื™ื™ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜. .

ืื™ืŸ ืคืึทืจืฉื™ื“ืขื ืข ืฆื™ื™ื˜ ืžื™ืจ ื’ืขืคืจื•ื•ื•ื˜ ืคืึทืจืฉื™ื“ืขื ืข ืกืึทืœื•ืฉืึทื ื– ืฆื• ื“ืขื ืคึผืจืึธื‘ืœืขื. ืื•ืŸ ืื™ืš ื•ื•ืขืœ ืึธื ื”ื™ื™ื‘ืŸ ืžื™ื˜ ื“ื™ ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ื™ื“ ื•ื•ืึธืจืงืึทืจืึธื•ื ื“ืก ืึธื“ืขืจ ืคืฉื•ื˜ "ืงืจืึทื˜ืฉื™ื–".

1. ืงืจืึทื˜ืฉื™ื–

ืจื•ื‘ึฟ IDEs ื”ืึธื‘ืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ืงืึธื“ ื’ืœื™ื™ึทืš ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ืขืจ ื ื™ืฆืŸ FTP / SFTP. ื“ืขืจ ื•ื•ืขื’ ืื™ื– ื–ื™ื™ืขืจ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ืื•ืŸ ืžื™ืจ ืžื™ื“ ื‘ืึทืฉืœืึธืกืŸ ืฆื• ื ื•ืฆืŸ ืขืก. ื–ื™ื™ึทืŸ ืขืกืึทื ืก ื‘ื•ื™ืœื– ืึทืจืึธืคึผ ืฆื• ื“ื™ ืคืืœื’ืขื ื“ืข:

  1. ืื™ืŸ ื“ื™ ืคึผืึธื“ ืคื•ืŸ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ (ื“ืขื•ื• / ืึธืคึผืฉืึทืฆื•ื ื’), ืึทืŸ ื ืึธืš ืงืึทื ื˜ื™ื™ื ืขืจ ืื™ื– ืœืึธื ื˜ืฉื˜ ืžื™ื˜ SSH ืึทืงืกืขืก ืื•ืŸ ืคืึธืจื•ื•ืขืจื“ื™ื ื’ ื“ื™ ืขืคื ื˜ืœืขืš SSH ืฉืœื™ืกืœ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื•ื•ืึธืก ื•ื•ืขื˜ ื˜ื•ืขืŸ / ืฆืขื•ื•ื™ืงืœืขืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.
  2. ืื™ืŸ ื“ืขืจ ืขืจืฉื˜ืขืจ ื‘ื™ื ืข (ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ prepare-app) ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืงืึธื“ ืฆื• emptyDirืฆื• ื”ืึธื‘ืŸ ืึทืงืกืขืก ืฆื• ื“ื™ ืงืึธื“ ืคึฟื•ืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ืŸ ื“ื™ SSH ืกืขืจื•ื•ืขืจ.

Kubernetes ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก: ื•ื•ืขื’ืŸ ื”ื™ื’ืข ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื•ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข

ืฆื• ื‘ืขืกืขืจ ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื“ื™ ื˜ืขื›ื ื™ืฉ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ืึทื–ืึท ืึท ืกื›ืขืžืข, ืื™ืš ื•ื•ืขืœ ืฆื•ืฉื˜ืขืœืŸ ืคืจืึทื’ืžืึทื ืฅ ืคื•ืŸ ื“ื™ ื™ื ื•ื•ืึทืœื•ื•ื“ YAML ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทื ื– ืื™ืŸ Kubernetes.

ืงืึธื ืคื™ื’ื•ืจืึทื˜ื™ืึธื ืก

1.1. ื•ื•ืึทืœื•ืขืก.ื™ืึทืžืœ

ssh_pub_key:
  vasya.pupkin: <ssh public key in base64> 

ื“ืึธ vasya.pupkin ืื™ื– ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ื‘ื™ื™ึทื˜ืขื•ื•ื“ื™ืง ${GITLAB_USER_LOGIN}.

1.2. deployment.yaml

...
{{ if eq .Values.global.debug "yes" }}
      volumes:
      - name: ssh-pub-key
        secret:
          defaultMode: 0600
          secretName: {{ .Chart.Name }}-ssh-pub-key
      - name: app-data
        emptyDir: {}
      initContainers:
      - name: prepare-app
{{ tuple "backend" . | include "werf_container_image" | indent 8 }}
        volumeMounts:
        - name: app-data
          mountPath: /app-data
        command: ["bash", "-c", "cp -ar /app/* /app-data/" ]
{{ end }}
      containers:
{{ if eq .Values.global.debug "yes" }}
      - name: ssh
        image: corbinu/ssh-server
        volumeMounts:
        - name: ssh-pub-key
          readOnly: true
          mountPath: /root/.ssh/authorized_keys
          subPath: authorized_keys
        - name: app-data
          mountPath: /app
        ports:
        - name: ssh
          containerPort: 22
          protocol: TCP
{{ end }}
      - name: backend
        volumeMounts:
{{ if eq .Values.global.debug "yes" }}
        - name: app-data
          mountPath: /app
{{ end }}
        command: ["/usr/sbin/php-fpm7.2", "--fpm-config", "/etc/php/7.2/php-fpm.conf", "-F"]
...

1.3. ืกื•ื“.ื™ืึทืžืœ

{{ if eq .Values.global.debug "yes" }}
apiVersion: v1
kind: Secret
metadata:
  name: {{ .Chart.Name }}-ssh-pub-key
type: Opaque
data:
  authorized_keys: "{{ first (pluck .Values.global.username .Values.ssh_pub_key) }}"
{{ end }}

ืœืขืฆื˜ ืคืึทืจื‘ื™ื ื“ืŸ

ื ืึธืš ื•ื•ืึธืก ืึทืœืข ื•ื•ืึธืก ื‘ืœื™ื™ื‘ื˜ ืื™ื– ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืคืืจืœืื ื’ื˜ gitlab-ci.yml ื•ื•ืขืจื™ืึทื‘ืึทืœื–:

dev:
  stage: deploy
  script:
   - type multiwerf && source <(multiwerf use 1.0 beta)
   - type werf && source <(werf ci-env gitlab --tagging-strategy tag-or-branch --verbose)
   - werf deploy
     --namespace ${CI_PROJECT_NAME}-stage
     --set "global.env=stage"
     --set "global.git_rev=${CI_COMMIT_SHA}"
     --set "global.debug=yes"
     --set "global.username=${GITLAB_USER_LOGIN}"
 tags:
   - build

ื•ื•ืึธื™ืœืึท: ื“ืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื•ื•ืึธืก ืœืึธื ื˜ืฉื˜ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืงืขื ืขืŸ ืคืึทืจื‘ื™ื ื“ืŸ ื“ื•ืจืš ื“ื™ื ืกื˜ ื ืึธืžืขืŸ (ื•ื•ื™ ืฆื• ืกื™ืงื™ื•ืจืœื™ ื’ืขื‘ืŸ ืึทืงืกืขืก ืฆื• ื“ืขื ืงื ื•ื™ืœ, ืžื™ืจ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื’ืขื–ืึธื’ื˜) ืคึฟื•ืŸ ื“ื™ื™ืŸ ื“ืขืกืงื˜ืึทืคึผ ื“ื•ืจืš SFTP ืื•ืŸ ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ ืงืึธื“ ืึธืŸ ื•ื•ืืจื˜ืŸ ืคึฟืึทืจ ืขืก ืฆื• ื–ื™ื™ืŸ ืื™ื‘ืขืจื’ืขื’ืขื‘ืŸ ืฆื• ื“ื™ ืงื ื•ื™ืœ.

ื“ืึธืก ืื™ื– ืึท ื’ืึธืจ ืืจื‘ืขื˜ืŸ ืœื™ื™ื–ื•ื ื’, ืึธื‘ืขืจ ืคึฟื•ืŸ ืึท ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ื ื˜ ืคื•ืŸ ืžื™ื™ื ื•ื ื’ ืขืก ื”ืื˜ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ื“ื™ืกืึทื“ื•ื•ืึทื ื˜ื™ื“ื–ืฉื™ื–:

  • ื“ื™ ื ื•ื™ื˜ ืฆื• ืจืึทืคื™ื ื™ืจืŸ ื“ื™ ื”ืขืœื ื˜ืฉืึทืจื˜, ื•ื•ืึธืก ืžืื›ื˜ ืขืก ืฉื•ื•ืขืจ ืฆื• ืœื™ื™ืขื ืขืŸ ืื™ืŸ ื“ืขืจ ืฆื•ืงื•ื ืคึฟื˜;
  • ืงืขื ืขืŸ ื ืึธืจ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜ ื“ื•ืจืš ื“ืขืจ ืžืขื ื˜ืฉ ื•ื•ืืก ื“ื™ืคึผืœื•ื™ื“ ื“ื™ ื“ื™ื ืกื˜;
  • ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ื’ืขื“ืขื ืงืขืŸ ืฆื• ืกื™ื ื’ืงืจืึทื ื™ื™ื– ืขืก ืžื™ื˜ ื“ื™ ื”ื™ื’ืข ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ื“ื™ ืงืึธื“ ืื•ืŸ ื™ื‘ืขืจื’ืขื‘ืŸ ืขืก ืฆื• Git.

2. ื˜ืขืœืขืคึผืจืขืกืขื ืกืข

ืคึผืจื•ื™ืขืงื˜ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื‘ืืงืื ื˜ ืคึฟืึทืจ ืึท ืœืึทื ื’ ืฆื™ื™ึทื˜, ืึธื‘ืขืจ ืžื™ืจ, ื•ื•ื™ ื–ื™ื™ ื–ืึธื’ืŸ, "ื”ืื˜ ื ื™ืฉื˜ ื‘ืึทืงื•ืžืขืŸ ืึทืจื•ื ืฆื• ืขืžืขืก ื˜ืจื™ื™ื ื’ ืขืก ืื™ืŸ ืคื™ืจ." ืึธื‘ืขืจ, ื“ื™ ืคืึธื“ืขืจื•ื ื’ ื”ืื˜ ื’ืขื˜ืืŸ ื–ื™ื™ืŸ ืึทืจื‘ืขื˜ ืื•ืŸ ืื™ืฆื˜ ืžื™ืจ ื–ืขื ืขืŸ ืฆื•ืคืจื™ื“ืŸ ืฆื• ื˜ื™ื™ืœืŸ ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’, ื•ื•ืึธืก ืงืขืŸ ื–ื™ื™ืŸ ื ื•ืฆื™ืง ืคึฟืึทืจ ืœื™ื™ืขื ืขืจ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื‘ืœืึธื’ - ืกืคึผืขืฆื™ืขืœ ื–ื™ื ื˜ ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข ืžืึทื˜ืขืจื™ืึทืœืก ื•ื•ืขื’ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข ืื•ื™ืฃ ื“ื™ ื›ืึทื‘.

ืื™ืŸ ืงื•ืจืฅ, ืึทืœืฅ ืื™ื– ื’ืขื•ื•ืขืŸ ื ื™ื˜ ืึทื–ื•ื™ ืกืงืขืจื™. ืžื™ืจ ืฉื˜ืขืœืŸ ืึทืœืข ืึทืงืฉืึทื ื– ื•ื•ืึธืก ื“ืึทืจืคืŸ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืคื•ืŸ ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืื™ืŸ ืึท ื”ืขืœื ื˜ืฉืึทืจื˜ ื˜ืขืงืกื˜ ื˜ืขืงืข ื’ืขืจื•ืคืŸ NOTES.txt. ืื–ื•ื™, ื ืึธืš ื“ื™ืคึผืœื•ื™ื™ื ื’ ื“ื™ ืกืขืจื•ื•ื™ืก ืฆื• Kubernetes, ื“ืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ื–ืขื˜ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืคึฟืึทืจ ืงืึทื˜ืขืจ ื“ื™ ื”ื™ื’ืข ื“ืขื•ื• ืกื•ื•ื™ื•ื•ืข ืื™ืŸ ื“ื™ GitLab ืึทืจื‘ืขื˜ ืงืœืึธืฅ:

!!! ะ ะฐะทั€ะฐะฑะพั‚ะบะฐ ัะตั€ะฒะธัะฐ ะปะพะบะฐะปัŒะฝะพ, ะฒ ัะพัั‚ะฐะฒะต Kubernetes !!!

* ะะฐัั‚ั€ะพะนะบะฐ ะพะบั€ัƒะถะตะฝะธั
* * ะ”ะพะปะถะตะฝ ะฑั‹ั‚ัŒ ะดะพัั‚ัƒะฟ ะดะพ ะบะปะฐัั‚ะตั€ะฐ ั‡ะตั€ะตะท VPN
* * ะะฐ ะปะพะบะฐะปัŒะฝะพะผ ะŸะš ัƒัั‚ะฐะฝะพะฒะปะตะฝ kubectl ( https://kubernetes.io/docs/tasks/tools/install-kubectl/ )
* * ะŸะพะปัƒั‡ะธั‚ัŒ config-ั„ะฐะนะป ะดะปั kubectl (ัะบะพะฟะธั€ะพะฒะฐั‚ัŒ ะฒ ~/.kube/config)
* * ะะฐ ะปะพะบะฐะปัŒะฝะพะผ ะŸะš ัƒัั‚ะฐะฝะพะฒะปะตะฝ telepresence ( https://www.telepresence.io/reference/install )
* * ะ”ะพะปะถะตะฝ ะฑั‹ั‚ัŒ ัƒัั‚ะฐะฝะพะฒะปะตะฝ Docker
* * ะะตะพะฑั…ะพะดะธะผ ะดะพัั‚ัƒะฟ ัƒั€ะพะฒะฝั reporter ะธะปะธ ะฒั‹ัˆะต ะบ ั€ะตะฟะพะทะธั‚ะพั€ะธัŽ https://gitlab.site.com/group/app
* * ะะตะพะฑั…ะพะดะธะผะพ ะทะฐะปะพะณะธะฝะธั‚ัั ะฒ registry ั ะปะพะณะธะฝะพะผ/ะฟะฐั€ะพะปะตะผ ะพั‚ GitLab (ะดะตะปะฐะตั‚ัั ะพะดะธะฝ ั€ะฐะท):

#########################################################################
docker login registry.site.com
#########################################################################

* ะ—ะฐะฟัƒัะบ ะพะบั€ัƒะถะตะฝะธั

#########################################################################
telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name  }}:backend --mount=/tmp/app --docker-run -v `pwd`:/app -v /tmp/app/var/run/secrets:/var/run/secrets -ti registry.site.com/group/app/backend:v8
#########################################################################

ืžื™ืจ ื•ื•ืขืœืŸ ื ื™ืฉื˜ ื•ื•ื•ื™ื ืขืŸ ืื™ืŸ ื“ืขื˜ืึทืœ ืื•ื™ืฃ ื“ื™ ืกื˜ืขืคึผืก ื“ื™ืกืงืจื™ื™ื‘ื“ ืื™ืŸ ื“ืขื ืœื™ืžืขื“ ... ืžื™ื˜ ืึท ื•ื™ืกื ืขื ืคื•ืŸ ื“ื™ ืœืขืฆื˜ืข. ื•ื•ืึธืก ื›ืึทืคึผืึทื ื– ื‘ืขืฉืึทืก ื“ื™ ืงืึทื˜ืขืจ ืคื•ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข?

ืึทืจื‘ืขื˜ ืžื™ื˜ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข

ื‘ื™ื™ ืกื˜ืึทืจื˜ืึทืคึผ (ื ื™ืฆืŸ ื“ื™ ืœืขืฆื˜ืข ื‘ืึทืคึฟืขืœ ืกืคึผืขืกื™ืคื™ืขื“ ืื™ืŸ ื“ื™ ื™ื ืกื˜ืจืึทืงืฉืึทื ื– ืื•ื™ื‘ืŸ), ืžื™ืจ ืฉื˜ืขืœืŸ:

  • ื ืึทืžืขืกืคึผืึทืกืข ืื™ืŸ ื•ื•ืึธืก ื“ื™ ืžื™ืงืจืึธืกืขืจื•ื•ื™ืก ืื™ื– ืคืœื™ืกื ื“ื™ืง;
  • ื ืขืžืขืŸ ืคื•ืŸ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ืงืึทื ื˜ื™ื™ื ืขืจ ื•ื•ืึธืก ืžื™ืจ ื•ื•ื™ืœืŸ ืฆื• ื“ื•ืจื›ื ืขืžืขืŸ.

ื“ื™ ืจื•ืขืŸ ื˜ืขื ื•ืช ื–ืขื ืขืŸ ืึทืคึผืฉืึทื ืึทืœ. ืื•ื™ื‘ ืื•ื ื“ื–ืขืจ ื“ื™ื ืกื˜ ื™ื ื˜ืขืจืึทืงืฅ ืžื™ื˜ ืื•ืŸ ืคึฟืึทืจ ื“ื™ Kubernetes API ืกืขืจื•ื•ื™ืก ืึทืงืึทื•ื ื˜ ื‘ืืฉืืคืŸ, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธื ืงืœืึทืคึผืŸ ืกืขืจื˜ื™ืคื™ืงืึทืฅ / ื˜ืึธืงืขื ืก ืื•ื™ืฃ ืื•ื ื“ื–ืขืจ ื“ืขืกืงื˜ืึทืคึผ. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ื ื•ืฆืŸ ื“ื™ ืึธืคึผืฆื™ืข --mount=true (ืึธื“ืขืจ --mount=/dst_path), ื•ื•ืึธืก ื•ื•ืขื˜ ืึธื ืงืœืึทืคึผืŸ ื“ื™ ื•ื•ืึธืจืฆืœ (/) ืคื•ืŸ ื“ื™ Kubernetes ืงืึทื ื˜ื™ื™ื ืขืจ ืฆื• ืื•ื ื“ื–ืขืจ ื“ืขืกืงื˜ืึทืคึผ. ื ืึธืš ื“ืขื, ืžื™ืจ ืงืขื ืขืŸ (ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ ืึทืก ืื•ืŸ ื•ื•ื™ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ืœืึธื ื˜ืฉื˜) ื ื•ืฆืŸ ื“ื™ "ืงื™ื–" ืคึฟื•ืŸ ื“ืขื ืงื ื•ื™ืœ.

ืขืจืฉื˜ืขืจ, ืœืึธืžื™ืจ ื–ืขืŸ ื“ื™ ืžืขืจืกื˜ ื•ื ื™ื•ื•ืขืจืกืึทืœ ืึธืคึผืฆื™ืข ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ - ืื™ืŸ ืึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ. ืฆื• ื˜ืึธืŸ ื“ืึธืก ืžื™ืจ ื•ื•ืขืœืŸ ื ื•ืฆืŸ ื“ื™ ืฉืœื™ืกืœ --docker-run ืื•ืŸ ืึธื ืงืœืึทืคึผืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ื“ื™ ืงืึธื“ ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ: -v `pwd`:/app

ื‘ื™ื˜ืข ื˜ืึธืŸ ืึทื– ื“ืึธืก ืึทืกื•ืžื– ืคืœื™ืกื ื“ื™ืง ืคึฟื•ืŸ ื“ื™ ืคึผืจื•ื™ืขืงื˜ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ. ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืงืึธื“ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืžืึธื•ื ื˜ืขื“ ืื™ืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ /app ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ.

ื•ื•ื™ื™ึทื˜ืขืจ: -v /tmp/app/var/run/secrets:/var/run/secrets - ืฆื• ืึธื ืงืœืึทืคึผืŸ ื“ื™ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ ืžื™ื˜ ื“ื™ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ / ืกื™ืžืขืŸ ืื™ืŸ ืึท ืงืึทื ื˜ื™ื™ื ืขืจ.

ื“ืขื ืึธืคึผืฆื™ืข ืื™ื– ืœืขืกืึธืฃ ื ืื›ื’ืขื’ืื ื’ืขืŸ ื“ื•ืจืš ื“ื™ ื‘ื™ืœื“ ืื™ืŸ ื•ื•ืึธืก ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื•ื•ืขื˜ ืœื•ื™ืคืŸ. NB: ื•ื•ืขืŸ ืื™ืจ ื‘ื•ื™ืขืŸ ืึท ื‘ื™ืœื“, ืื™ืจ ืžื•ื–ืŸ ืกืคึผืขืฆื™ืคื™ืฆื™ืจืŸ CMD ืึธื“ืขืจ ENTRYPOINT!

ื•ื•ืึธืก ืคึผื•ื ืงื˜ ื•ื•ืขื˜ ืคึผืึทืกื™ืจืŸ ื•ื•ื™ื™ึทื˜ืขืจ?

  • ืื™ืŸ Kubernetes, ืคึฟืึทืจ ื“ื™ ืกืคึผืขืกื™ืคื™ืขื“ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืจืขืคึผืœืึทืงืึทื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื‘ื™ื˜ืŸ ืฆื• 0. ืึทื ืฉื˜ืึธื˜, ืึท ื ื™ื™ึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืœืึธื ื˜ืฉื˜ - ืžื™ื˜ ืึท ืคืึทืจื˜ืจืขื˜ืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ. backend.
  • 2 ืงืึทื ื˜ื™ื™ื ืขืจื– ื•ื•ืขื˜ ืงืึทื˜ืขืจ ืื•ื™ืฃ ื“ื™ ื“ืขืกืงื˜ืึทืคึผ: ื“ืขืจ ืขืจืฉื˜ืขืจ ืžื™ื˜ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข (ืขืก ื•ื•ืขื˜ ืคึผืจืึทืงืกื™ ืจื™ืงื•ื•ืขืก ืคื•ืŸ / ืฆื• Kubernetes), ื“ื™ ืจื’ืข ืžื™ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื“ืขื•ื•ืขืœืึธืคึผืขื“.
  • ืื•ื™ื‘ ืžื™ืจ ืขืงืกืึทืงื™ืจืŸ ืื™ืŸ ื“ืขื ืงืึทื ื˜ื™ื™ื ืขืจ ืžื™ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ, ืึทืœืข ื“ื™ ENV ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื˜ืจืึทื ืกืคืขืจื“ ื“ื•ืจืš ื”ืขืœื ื‘ืขืฉืึทืก ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜ ืฆื• ืื•ื ื“ื–, ืื•ืŸ ืึทืœืข ืกืขืจื•ื•ื™ืกืขืก ื•ื•ืขืœืŸ ืื•ื™ืš ื–ื™ื™ืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜. ืึทืœืข ื•ื•ืึธืก ื‘ืœื™ื™ื‘ื˜ ืื™ื– ืฆื• ืจืขื“ืึทื’ื™ืจืŸ ื“ื™ ืงืึธื“ ืื™ืŸ ื“ื™ื™ืŸ ื‘ืึทืœื™ื‘ืกื˜ืข IDE ืื•ืŸ ื”ื ืื” ื“ื™ ืจืขื–ื•ืœื˜ืึทื˜.
  • ืื™ืŸ ื“ื™ ืกื•ืฃ ืคื•ืŸ ื“ื™ ืึทืจื‘ืขื˜, ืื™ืจ ื ืึธืจ ื“ืึทืจืคึฟืŸ ืฆื• ืคืึทืจืžืึทื›ืŸ ื“ืขื ื•ื•ืึธืงื–ืึทืœ ืื™ืŸ ื•ื•ืึธืก ื˜ืขืœืขืคึผืจืขืกืขื ืกืข ืื™ื– ืคืœื™ืกื ื“ื™ืง (ืขื ื“ื™ืงืŸ ื“ื™ ืกืขืกื™ืข ืžื™ื˜ ืงื˜ืจืœ + C) - ื“ืึธืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจื– ื•ื•ืขื˜ ื”ืึทืœื˜ืŸ ืื•ื™ืฃ ื“ื™ ื“ืขืกืงื˜ืึทืคึผ, ืื•ืŸ ืื™ืŸ Kubernetes ืึทืœืฅ ื•ื•ืขื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ื–ื™ื™ืŸ ืขืจืฉื˜ ืฉื˜ืึทื˜. ืึทืœืข ื•ื•ืึธืก ื‘ืœื™ื™ื‘ื˜ ืื™ื– ืฆื• ื™ื‘ืขืจื’ืขื‘ืŸ, ืึทืจื•ื™ืกื’ืขื‘ืŸ ื“ื™ ืžืจ ืื•ืŸ ืึทืจื™ื‘ืขืจืคื™ืจืŸ ืขืก ืฆื• ืึธืคึผืฉืึทืฆื•ื ื’ / ืฆื•ื ื•ื™ืคื’ื™ืกืŸ / ... (ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ื“ื™ื™ืŸ ื•ื•ืึธืจืงืคืœืึธื•ื–).

ืื•ื™ื‘ ืžื™ืจ ื˜ืึธืŸ ื ื™ืฉื˜ ื•ื•ืขืœืŸ ืฆื• ืœื•ื™ืคืŸ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ืŸ ืึท ื“ืึธืงืงืขืจ ืงืึทื ื˜ื™ื™ื ืขืจ - ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ืึทื ื˜ื•ื•ื™ืงืœืขืŸ ื ื™ืฉื˜ ืื™ืŸ PHP, ืึธื‘ืขืจ ืื™ืŸ Go, ืื•ืŸ ื ืึธืš ื‘ื•ื™ืขืŸ ืขืก ืœืึธื•ืงืึทืœื™ - ื“ื™ ืงืึทื˜ืขืจ ืคื•ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข ื•ื•ืขื˜ ื–ื™ื™ืŸ ืืคื™ืœื• ืกื™ืžืคึผืœืขืจ:

telepresence --namespace {{ .Values.global.env }} --swap-deployment {{ .Chart.Name  }}:backend --mount=true

ืื•ื™ื‘ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทืงืกืขืก ื“ื™ Kubernetes API, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืึธื ืงืœืึทืคึผืŸ ื“ื™ ืฉืœื™ืกืœ ื•ื•ืขื’ื•ื•ื™ื™ึทื–ืขืจ (https://www.telepresence.io/howto/volumes). ืขืก ืื™ื– ืึท ื ื•ืฆืŸ ืคึฟืึทืจ ืœื™ื ื•ืงืก ื•ื•ืึธืจืฆืœ:

proot -b $TELEPRESENCE_ROOT/var/run/secrets/:/var/run/secrets bash

ื ืึธืš ืœืึธื ื˜ืฉื™ื ื’ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข ืึธืŸ ื“ื™ ืึธืคึผืฆื™ืข --docker-run ืึทืœืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืขื ืึทืœ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื•ื•ืขื˜ ื–ื™ื™ืŸ ื‘ืืจืขื›ื˜ื™ื’ื˜ ืื™ืŸ ื“ืขื ืงืจืึทื ื˜ ื•ื•ืึธืงื–ืึทืœ, ืึทื–ื•ื™ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžื•ื–ืŸ ื–ื™ื™ืŸ ืœืึธื ื˜ืฉื˜ ืื™ืŸ ืขืก.

NB: ื•ื•ืขืŸ ืื™ืจ ื ื•ืฆืŸ, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, PHP, ืื™ืจ ืžื•ื–ืŸ ื’ืขื“ืขื ืงืขืŸ ืฆื• ื“ื™ืกื™ื™ื‘ืึทืœ ืคืึทืจืฉื™ื“ืŸ ืึธืคึผ_ืงืึทื˜ืฉืข, ืึทืคึผืง ืื•ืŸ ืื ื“ืขืจืข ืึทืงืกืขืœืขืจื™ื™ื˜ืขืจื– ืคึฟืึทืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ - ืึทื ื“ืขืจืฉ ืขื“ื™ื˜ื™ื ื’ ื“ื™ ืงืึธื“ ื•ื•ืขื˜ ื ื™ืฉื˜ ืคื™ืจืŸ ืฆื• ื“ืขืจ ื’ืขื•ื•ืืœื˜ ืจืขื–ื•ืœื˜ืึทื˜.

ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืคื•ืŸ

ืœืืงืืœืข ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืžื™ื˜ Kubernetes ืื™ื– ืึท ืคึผืจืึธื‘ืœืขื ื•ื•ืขืžืขื ืก ืœื™ื™ื–ื•ื ื’ ืื™ื– ื’ืจืึธื•ื™ื ื’ ืื™ืŸ ืคึผืจืึธืคึผืึธืจืฆื™ืข ืฆื• ื“ื™ ืคืึทืจืฉืคึผืจื™ื™ื˜ืŸ ืคื•ืŸ ื“ืขื ืคึผืœืึทื˜ืคืึธืจืžืข. ื‘ืืงื•ืžืขืŸ ื‘ืึทื˜ื™ื™ึทื˜ื™ืง ืจื™ืงื•ื•ืขืก ืคื•ืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก (ืคื•ืŸ ืื•ื ื“ื–ืขืจ ืงืœื™ื™ืึทื ืฅ), ืžื™ืจ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ืกืึธืœื•ื•ืข ื–ื™ื™ ืžื™ื˜ ื“ื™ ืขืจืฉื˜ืขืจ ื‘ื ื™ืžืฆื ืžื™ื˜ืœืขืŸ, ื•ื•ืึธืก, ืึธื‘ืขืจ, ื ื™ืฉื˜ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ื–ื™ืš ืื™ื‘ืขืจ ื“ื™ ืœืึทื ื’-ื˜ืขืจืžื™ืŸ. ืฆื•ืž ื’ืœื™ืง, ื“ืึธืก ืื™ื– ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ื ื™ื˜ ื ืึธืจ ืื™ืฆื˜ ืื•ืŸ ื ื™ื˜ ื ืึธืจ ืคึฟืึทืจ ืื•ื ื“ื–, ืึทื–ื•ื™ ืขืก ื–ืขื ืขืŸ ืฉื•ื™ืŸ ืžืขืจ ืคึผืึทืกื™ืง ืžื™ื˜ืœืขืŸ ืื™ืŸ ื“ืขืจ ื•ื•ืขืœื˜, ืื•ืŸ ื˜ืขืœืขืคึผืจืขืกืขื ืกืข ืื™ื– ื“ื™ ืžืขืจืกื˜ ื‘ืึทืจื™ืžื˜ ืคื•ืŸ ื–ื™ื™ (ืื’ื‘, ืขืก ืื™ื– ืื•ื™ืš skaffold ืคึฟื•ืŸ ื’ื•ื’ืœ). ืื•ื ื“ื–ืขืจ ื“ืขืจืคืึทืจื•ื ื’ ืคื•ืŸ ื ื™ืฆืŸ ืขืก ืื™ื– ื ืึธืš ื ื™ืฉื˜ ืึทื–ื•ื™ ื’ืจื•ื™ืก, ืึธื‘ืขืจ ืขืก ืฉื•ื™ืŸ ื’ื™ื˜ ืื•ื ื“ื– ืกื™ื‘ื” ืฆื• ืจืขืงืึธืžืขื ื“ื™ืจืŸ ืขืก ืฆื• ืื•ื ื“ื–ืขืจ "ื—ื‘ืจื™ื ืื™ืŸ ื“ื™ ืงืจืึธื" - ืคึผืจื•ื‘ื™ืจืŸ ืขืก!

ืคึผืก

ืื ื“ืขืจืข ืคื•ืŸ โ€‹โ€‹ื“ื™ K8s ืขืฆื•ืช ืื•ืŸ ื˜ืจื™ืงืก ืกืขืจื™ืข:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’