{"id":959,"date":"2019-03-19T15:10:57","date_gmt":"2019-03-19T12:10:57","guid":{"rendered":"https:\/\/artem.services\/?p=959"},"modified":"2019-03-20T15:43:18","modified_gmt":"2019-03-20T12:43:18","slug":"kubernetes-%d0%bf%d1%80%d0%b8%d0%bc%d0%b5%d1%80-%d0%bc%d0%b0%d0%bd%d0%b8%d1%84%d0%b5%d1%81%d1%82%d0%b0-%d0%bf%d0%be%d0%b4%d0%b0-%d1%81-%d0%b4%d0%b2%d1%83%d0%bc%d1%8f-%d0%ba%d0%be%d0%bd%d1%82%d0%b5","status":"publish","type":"post","link":"https:\/\/artem.services\/?p=959","title":{"rendered":"Kubernetes &#8212; \u041f\u0440\u0438\u043c\u0435\u0440 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u043f\u043e\u0434\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438"},"content":{"rendered":"<p><img loading=\"lazy\" class=\"size-full wp-image-149 aligncenter\" src=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/Kubernetes-Logo.png\" alt=\"\" width=\"844\" height=\"217\" srcset=\"https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/Kubernetes-Logo.png 844w, https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/Kubernetes-Logo-300x77.png 300w, https:\/\/artem.services\/wp-content\/uploads\/2018\/10\/Kubernetes-Logo-768x197.png 768w\" sizes=\"(max-width: 844px) 100vw, 844px\" \/><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0432\u0443\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0434\u0435, \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 &#8212; <strong>Nginx<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u0422\u0430\u043a \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0431\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e.<\/p>\n<h4>manifest.yml<\/h4>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\napiVersion: v1\r\nkind: ConfigMap\r\nmetadata:\r\n  name: example-config\r\n  namespace: staging\r\n  labels:\r\n    app: example-app\r\ndata:\r\n  POSTGRES_USER: &quot;pg_user&quot;\r\n  POSTGRES_DB: &quot;pg_db&quot;\r\n  POSTGRES_PASSWORD: &quot;password&quot;\r\n  POSTGRES_HOST: &quot;postgres-db-main&quot;\r\n  POSTGRES_PORT: &quot;5432&quot;\r\n\r\n---\r\n\r\napiVersion: apps\/v1\r\nkind: Deployment\r\nmetadata:\r\n  name: example-app\r\n  namespace: staging\r\n  labels:\r\n    app: example-app\r\nspec:\r\n  replicas: 1\r\n  selector:\r\n    matchLabels:\r\n      app: example-app\r\n  strategy:\r\n    type: RollingUpdate\r\n  progressDeadlineSeconds: 300\r\n  template:\r\n    metadata:\r\n      labels:\r\n        app: example-app\r\n    spec:\r\n      volumes:\r\n      - name: shared-data\r\n        emptyDir: {}\r\n      containers:\r\n      - image: XXXXXXXXXXXX.dkr.ecr.eu-west-1.amazonaws.com\/litslink:example-application\r\n        name: example\r\n        volumeMounts:\r\n        - name: shared-data\r\n          mountPath: \/usr\/src\/app\r\n        imagePullPolicy: &quot;IfNotPresent&quot;\r\n        ports:\r\n          - containerPort: 8080\r\n        envFrom:\r\n            - configMapRef:\r\n                name: example-config\r\n      - image: XXXXXXXXXXXX.dkr.ecr.eu-west-1.amazonaws.com\/base-image:example-nginx\r\n        name: example-nginx\r\n        volumeMounts:\r\n        - name: shared-data\r\n          mountPath: \/usr\/share\/nginx\/html\r\n        imagePullPolicy: &quot;IfNotPresent&quot;\r\n        ports:\r\n          - containerPort: 80\r\n      nodeSelector:\r\n        nodegroup: staging\r\n\r\n---\r\n\r\napiVersion: v1\r\nkind: Service\r\nmetadata:\r\n  name: example-svc\r\n  namespace: staging\r\nspec:\r\n  ports:\r\n  - port: 80\r\n  selector:\r\n    app: example-app\r\n\r\n---\r\n\r\napiVersion: extensions\/v1beta1\r\nkind: Ingress\r\nmetadata:\r\n  name: example-ing\r\n  namespace: staging\r\n  annotations:\r\n    kubernetes.io\/ingress.class: ingress-staging\r\n    certmanager.k8s.io\/cluster-issuer: letsencrypt-prod\r\n    certmanager.k8s.io\/acme-challenge-type: dns01\r\n    certmanager.k8s.io\/acme-dns01-provider: dns\r\n    nginx.ingress.kubernetes.io\/rewrite-target: \/\r\nspec:\r\n  tls:\r\n  - hosts:\r\n    - example.artem.services\r\n    secretName: example.artem.services-secret-tls\r\n  rules:\r\n  - host: example.artem.services\r\n    http:\r\n      paths:\r\n      - path: \/\r\n        backend:\r\n          serviceName: example-svc\r\n          servicePort: 80\r\n<\/pre>\n<p><!--more--><\/p>\n<h4>Nginx &#8212; app.conf<\/h4>\n<pre class=\"brush: bash; title: ; notranslate\" title=\"\">\r\nserver {\r\n    listen 80;\r\n    listen [::]:80;\r\n    location \/ {\r\n            proxy_pass http:\/\/localhost:8080\/;\r\n            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\r\n            proxy_set_header X-Forwarded-Proto $scheme;\r\n            proxy_set_header X-Forwarded-Port $server_port;\r\n    }\r\n    location ^~ \/storage\/ {\r\n        root \/usr\/src\/app;\r\n    }\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0432\u0443\u0445 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u0432 \u0432 \u043e\u0434\u043d\u043e\u043c \u043f\u043e\u0434\u0435, \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 &#8212; Nginx, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u0422\u0430\u043a \u0436\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043e\u0431\u0449\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e. manifest.yml<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[20],"tags":[655,18,17,10,657,23],"_links":{"self":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/959"}],"collection":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=959"}],"version-history":[{"count":6,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/959\/revisions"}],"predecessor-version":[{"id":972,"href":"https:\/\/artem.services\/index.php?rest_route=\/wp\/v2\/posts\/959\/revisions\/972"}],"wp:attachment":[{"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/artem.services\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}