From abde92139926cfb22cecf06acca207c2b0f85f86 Mon Sep 17 00:00:00 2001 From: Takuya Tokuda Date: Wed, 28 Aug 2019 15:05:11 +0900 Subject: [PATCH] First Japanese l10n work for release-1.14 (#16115) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translate concepts/workloads/pods/pod/ in Japanese (#13671) * [ja] Copy en/docs/concepts/workloads/pods/pod.md into ja/ * [ja] Translate docs/concepts/workloads/pods/pod/ * [ja] Modify translation of docs/concepts/workloads/pods/pod/ Reflect review - add trailing 'ー' to some technical terms * [ja] Fix translation of 'Persistent Volumes' (#13848) s/永続化ボリューム/永続ボリューム/g * Translated cron-jobs.md in Japanese (#13937) * Translate cron-jobs.md in Japanese (#13392) * Update cron-jobs.md * Create automated-tasks-with-cron-jobs.md in Japanese directory * Fix translation (#13392) * Translate cron-jobs.md in Japanese (#13392) * Update cron-jobs.md * Create automated-tasks-with-cron-jobs.md in Japanese directory * Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory" This reverts commit 739b01489634d749279c38b6ed5b90534bf7d29d. * Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory" This reverts commit 739b01489634d749279c38b6ed5b90534bf7d29d. * Fix conflict (#13392) * Revert "Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory"" This reverts commit c5fc9d93d6d789a13a0a28ec4b85f9e7aeb81e38. * Revert "Revert "Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory""" This reverts commit 095e760c6deb620da548d06a851c8f7ade71a15d. * Fix that as it was pointed out (#13392) * Delete double same sesntence (#13392) * copy includes directory (#14020) * Translate docs/home/_index.md into Japanese (#14068) (#14074) * Translate concepts/overview/components.md into Japanese (#14067) * Translate glossaries used in concepts/overview/components.md into Japanese (#14044) * Translate concepts/overview/components.md into Japanese (#14044) * Translate tasks/run-application/run-single-instance-stateful-application/ in Japanese (#13668) * Translate tasks/run-application/run-single-instance-stateful-application/ in Japanese * Apply suggestions from code review Co-Authored-By: sotoiwa * Better translation from code review * Translate tasks/access-application-cluster/service-access-application-cluster/ in Japanese (#13701) * Update fluentd image (#13661) Signed-off-by: ialidzhikov * update zh kubelet-config-file doc (#13495) * update zh kubelet-config-file doc * change kubelet config types address * add space between en words and zh words * revert en version change * correct container hyperlinks in init container (#12387) * correct container hyperlinks in init container * correct zh trans and update anchor inside page * Incorrect details about startingDeadlineSeconds.. (#13530) On this page, the default value of startingDeadlineSeconds is mentioned as 100 seconds which is not true. So removing this statement. * Fix typos (#13376) * add Nokia case study (#13676) * Fix typo in API page (#13687) Associated with #13686 * fix typo in pod-lifecycle (#13689) Asscociated with #13688 * issue 13383 * modify the link part * Revert "modify the link part" This reverts commit 2ae91dca574b54a14d255320721df4313346de28. * Revert "Revert "modify the link part"" This reverts commit e5b80b6258ce2210fc9a4b46e08fb8c000fe6330. * Revert "Revert "Revert "modify the link part""" This reverts commit 427916e7c6c4d6423222ff76b5fd8c12dc913ce1. * Revert "Merge remote-tracking branch 'origin/master' into issue_13383" This reverts commit 98099d805c7377826cb4d84bd0fece0f6362cb40, reversing changes made to 969e7f3f5cf63622e24137a2e374b0ab9e272514. * modify the link part * Translate /concepts/overview/working-with-objects/kubernetes-objects/ into Japanese (#14025) * Translate /concepts/overview/working-with-objects/kubernetes-objects/ into Japanese (#13952) * Apply suggestions to /concepts/overview/working-with-objects/kubernetes-objects/ from code review Co-Authored-By: nasa9084 * Translate concepts/overview/working-with-objects/names.md into Japanese (#14066) * Translate content/ja/docs/concepts/overview/working-with-objects/names.md into Japanese * Translate docs/reference/glossary/name.md into Japanese * Translate docs/reference/glossary/uid.md into Japanese * Apply suggestions to concepts/overview/working-with-objects/names.md from review comments * Translate concepts/overview/kubernetes-api.md into Japanese (#14343) * Translate concepts/overview/kubernetes-api.md into Japanese * Update translations for concepts/overview/kubernetes-api.md * Translate overview/working-with-objects/labels.md in Japanese (#14183) (#14319) * Translate overview/working-with-objects/labels.md in Japanese (#14183) * Update translations for concepts/overview/working-with-objects/labels.md. * Translate concepts/workloads/pods/pod-overview/ in Japanese (#14426) (#14494) * Translate concepts/workloads/pods/pod-overview/ in Japanese (#14426) * Update translation for concepts/workloads/pods/pod-overview.md. * Translate overview/working-with-objects/field-selectors.md in Japanese (#14350) (#14535) * Translate overview/working-with-objects/field-selectors.md in Japanese (#14350) * Update translations for concepts/overview/working-with-objects/field-selectors.md. * Update translation for concepts/overview/working-with-objects/field-selectors.md * Translate overview/working-with-objects/common-labels/ in Japanese (#14397) (#14403) * Translate overview/working-with-objects/common-labels/ in Japanese (#14397) * Update translation for concepts/overview/working-with-objects/common-labels.md * Translate concepts/storage/volume-snapshot-classes/ in Japanese (#14846) (#14849) * ja-trans: tasks/run-application/run-stateless-application-deployment/ (#14955) * ja-trans: tasks/run-application/run-stateless-application-deployment/ * modify "exploring" translation * ja-trans: concepts/containers/container-environment-variables/ (#14116) * ja-trans: concepts/containers/container-environment-variables/ * removed redundant expressions * ja-trans: Translate tasks/debug-application-cluster/get-shell-running… (#14146) * ja-trans: Translate tasks/debug-application-cluster/get-shell-running-container/ #13381 * Update content/ja/docs/tasks/debug-application-cluster/get-shell-running-container.md Fix typo Co-Authored-By: nasa9084 * ja-trans: concepts/containers/container-lifecycle-hooks/ (#14169) * ja-trans: tasks/debug-application-cluster/debug-init-containers/ (#14488) * ja-trans: tasks/debug-application-cluster/debug-init-containers/ * modified traslation of should * Translate concepts/workloads/controllers/replicaset/ in Japanese (#14634) (#14641) * Translate concepts/workloads/controllers/replicaset.md in Japanese (#14634) * Improve japanese translation in concepts/workloads/controllers/replicaset.md (#14634) * Improve japanese translation in concepts/workloads/controllers/replicaset.md (#14634) * Translate concepts/overview/working-with-objects/annotations/ in Japanese (#13382) (#14396) * Translate overview/working-with-objects/annotations.md in Japanese (#13382) * Delete a empty line in concepts/overview/working-with-objects/annotations.md (#13382) * Update translation for concepts/overview/working-with-objects/anotations.md * ja-trans: tasks/run-application/scale-stateful-set/ (#15289) * [ja] Fix translation of 'Persistent Volumes' (#13848) s/永続化ボリューム/永続ボリューム/g * ja-trans: tasks/run-application/scale-stateful-set/ * Update content/ja/docs/tasks/run-application/scale-stateful-set.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/run-application/scale-stateful-set.md Co-Authored-By: nasa9084 * added postpositional particle * ja-trans: tasks/debug-application-cluster/debug-stateful-set/ (#15282) * [ja] Fix translation of 'Persistent Volumes' (#13848) s/永続化ボリューム/永続ボリューム/g * ja-trans: tasks/debug-application-cluster/debug-stateful-set/ * ja-trans: tasks/debug-application-cluster/determine-reason-pod-failure/ (#14939) * [ja] Fix translation of 'Persistent Volumes' (#13848) s/永続化ボリューム/永続ボリューム/g * ja-trans: tasks/debug-application-cluster/determine-reason-pod-failure/ * ja-trans: unify the ending of sentences * follow the master branch update * reflect a suggestion and modify translation of container * ja-trans: tasks/run-application/delete-stateful-set/ (#15293) * [ja] Fix translation of 'Persistent Volumes' (#13848) s/永続化ボリューム/永続ボリューム/g * ja-trans: tasks/run-application/delete-stateful-set/ * Update content/ja/docs/tasks/run-application/delete-stateful-set.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/run-application/delete-stateful-set.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/run-application/delete-stateful-set.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/run-application/delete-stateful-set.md Co-Authored-By: nasa9084 * modified traslation of backing * ja-trans: tasks/configure-pod-container/attach-handler-lifecycle-event/ (#14328) * Translate overview/working-with-objects/namespaces.md in Japanese (#14045) (#14161) * Translate overview/working-with-objects/namespaces.md in Japanese (#14045) * Update translations for concepts/overview/working-with-objects/namespaces.md * ja-trans: fix Japanese Translation in concepts/overview/working-with-objects/namespaces.md (#14045) * ja-trans: includes/default-storage-class-prereqs.md (#15376) * ja-trans: includes/default-storage-class-prereqs.md * Update content/ja/includes/default-storage-class-prereqs.md Co-Authored-By: nasa9084 * Translate tasks/run-application/run-replicated-stateful-application/ in Japanese (#15368) * Translate tasks/run-application/run-replicated-stateful-application/ in Japanese * add a base document in english * Update content/ja/docs/tasks/run-application/run-replicated-stateful-application.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/run-application/run-replicated-stateful-application.md Co-Authored-By: nasa9084 * Update content/ja/docs/tasks/run-application/run-replicated-stateful-application.md Co-Authored-By: Kohei Ota * small fixs 「複製」という言葉を使わず「レプリケーション」と「クローン」に使い分けるように変更。 「ステートフルなアプリケーション」を「ステートフルアプリケーション」に変更。 * small fix * Translate concepts/workloads/pods/init-containers.md in Japanese (#14543) (#14576) * Translate concepts/workloads/pods/init-containers.md in Japanese (#14543) * Improve japanese translation in concepts/workloads/pods/init-containers.md (#14543) * Add new line in ja/concepts/workloads/pods/init-containers.md (#14543) * Add new line in ja/concepts/workloads/pods/init-containers.md (#14543) * translate contribute/_index.md to japanese. (#15406) * translate contribute/_index.md to japanese. * trim spaces. * Add missing translation. * Translate concepts/workloads/controllers/daemonset/ in Japanese #14761 (#14767) * Translate concepts/workloads/controllers/daemonset/ in Japanese (#14761) * ja-trans: Improve Japanese translation in concepts/workloads/controllers/daemonset.md (#14767) * Translate concepts/workloads/controllers/garbage-collection/ in Japanese (#14718) (#14720) * Translate concepts/workloads/controllers/garbage-collection/ in Japanese (#14718) * ja-trans: Improve Japanese translation in concepts/workloads/controllers/garbage-collection.md (#14718) * Translate concepts/workloads/pods/podpreset/ in Japanese (#14544) (#14581) * Translate concepts/workloads/pods/podpreset.md in Japanese (#14544) * Update translation for concepts/workloads/pods/podpreset.md. * ja-trans: Improve Japanese translation in concepts/workloads/pods/podpreset (#14544) * ja-trans: Improve Japanese translation in concepts/workloads/pods/podpreset (#14544) * ja-trans: Delete translated sentence in concepts/workloads/pods/podpreset (#14544) * ja-trans: Delete duplicated sentence in concepts/workloads/pods/podpreset (#14544) * Translate concepts/containers/runtime-class/ in Japanese (#14670) (#14673) * Translate concepts/containers/runtime-class.md in Japanese (#14670) * ja-trans: Improve Japanese translation in concepts/containers/runtime-class.md (#14670) * Translate concepts/services-networking/dns-pod-service/ in Japanese #14777 (#14805) * Translate concepts/services-networking/dns-pod-service/ in Japanese (#14777) * ja-trans: Improve Japanese translation in concepts/services-networking/dns-pod-service.md (#14777) * Translate concepts/workloads/controllers/statefulset/ in Japanese #14679 (#14696) * Translate concepts/workloads/controllers/statefulset.md in Japanese (#14679) * ja-trans: Improve Japanese translation in concepts/workloads/controllers/statefulset.md (#14679) * ja-trans: Improve some Japanese translation in concepts/workloads/controllers/statefulset.md (#14679) * ja-trans: Improve some titles in concepts/workloads/controllers/statefulset.md (#14679) * ja-trans: Improve some Japanese translations in concepts/workloads/controllers/statefulset.md (#14679) * Translate concepts/workloads/controllers/ttlafterfinished/ in Japanese #14734 (#14735) * Translate concepts/workloads/controllers/ttlafterfinished/ in Japanese (#14734) * ja-trans: Improve Japanese translation in concepts/workloads/controllers/ttlafterfinished.md (#14734) * ja-trans: Delete some Japanese words in concepts/workloads/controllers/ttlafterfinished.md (#14734) * ja-trans: Fix typo in concepts/workloads/controllers/ttlafterfinished.md (#14734) * Translate concepts/storage/dynamic-provisioning/ in Japanese #14847 (#14916) * Translate concepts/storage/dynamic-provisioning/ in Japanese (#14847) * ja-trans: Improve Japanese translation in concepts/storage/dynamic-provisioning.md (#14847) * ja-trans: Improve some Japanese translation in concepts/storage/dynamic-provisioning.md (#14847) * ja-trans: Improve some Japanese translations in concepts/storage/dynamic-provisioning.md (#14847) --- content/ja/docs/concepts/containers/_index.md | 5 + .../container-environment-variables.md | 55 + .../containers/container-lifecycle-hooks.md | 104 ++ .../docs/concepts/containers/runtime-class.md | 142 ++ .../ja/docs/concepts/overview/components.md | 107 ++ .../docs/concepts/overview/kubernetes-api.md | 116 ++ .../overview/working-with-objects/_index.md | 5 + .../working-with-objects/annotations.md | 67 + .../working-with-objects/common-labels.md | 156 ++ .../working-with-objects/field-selectors.md | 64 + .../kubernetes-objects.md | 72 + .../overview/working-with-objects/labels.md | 219 +++ .../overview/working-with-objects/names.md | 30 + .../working-with-objects/namespaces.md | 100 + .../concepts/services-networking/_index.md | 5 + .../services-networking/dns-pod-service.md | 203 +++ content/ja/docs/concepts/storage/_index.md | 5 + .../concepts/storage/dynamic-provisioning.md | 90 + .../storage/volume-snapshot-classes.md | 48 + content/ja/docs/concepts/workloads/_index.md | 5 + .../concepts/workloads/controllers/_index.md | 5 + .../workloads/controllers/cron-jobs.md | 46 + .../workloads/controllers/daemonset.md | 180 ++ .../controllers/garbage-collection.md | 149 ++ .../workloads/controllers/replicaset.md | 315 ++++ .../workloads/controllers/statefulset.md | 202 +++ .../workloads/controllers/ttlafterfinished.md | 56 + .../ja/docs/concepts/workloads/pods/_index.md | 5 + .../workloads/pods/init-containers.md | 276 +++ .../concepts/workloads/pods/pod-overview.md | 121 ++ .../ja/docs/concepts/workloads/pods/pod.md | 190 ++ .../docs/concepts/workloads/pods/podpreset.md | 60 + content/ja/docs/contribute/_index.md | 59 + content/ja/docs/home/_index.md | 51 +- .../ja/docs/reference/glossary/controller.md | 19 + content/ja/docs/reference/glossary/etcd.md | 19 + .../docs/reference/glossary/kube-apiserver.md | 19 + .../glossary/kube-controller-manager.md | 19 + .../docs/reference/glossary/kube-scheduler.md | 18 + content/ja/docs/reference/glossary/kubelet.md | 19 + content/ja/docs/reference/glossary/name.md | 18 + .../ja/docs/reference/glossary/statefulset.md | 24 + content/ja/docs/reference/glossary/uid.md | 18 + content/ja/docs/setup/minikube.md | 2 +- .../service-access-application-cluster.md | 142 ++ .../attach-handler-lifecycle-event.md | 90 + .../debug-init-containers.md | 117 ++ .../debug-stateful-set.md | 40 + .../determine-reason-pod-failure.md | 96 + .../get-shell-running-container.md | 142 ++ .../run-application/delete-stateful-set.md | 85 + .../run-replicated-stateful-application.md | 490 +++++ ...un-single-instance-stateful-application.md | 181 ++ .../run-stateless-application-deployment.md | 150 ++ .../run-application/scale-stateful-set.md | 80 + content/ja/docs/tutorials/_index.md | 2 +- content/ja/examples/pods/pod-rs.yaml | 23 + .../includes/default-storage-class-prereqs.md | 2 + .../federated-task-tutorial-prereqs.md | 5 + .../federation-deprecation-warning-note.md | 3 + content/ja/includes/index.md | 3 + content/ja/includes/partner-script.js | 1609 +++++++++++++++++ content/ja/includes/partner-style.css | 202 +++ content/ja/includes/task-tutorial-prereqs.md | 6 + .../ja/includes/user-guide-content-moved.md | 3 + .../includes/user-guide-migration-notice.md | 12 + 66 files changed, 6944 insertions(+), 27 deletions(-) create mode 100755 content/ja/docs/concepts/containers/_index.md create mode 100644 content/ja/docs/concepts/containers/container-environment-variables.md create mode 100644 content/ja/docs/concepts/containers/container-lifecycle-hooks.md create mode 100644 content/ja/docs/concepts/containers/runtime-class.md create mode 100644 content/ja/docs/concepts/overview/components.md create mode 100644 content/ja/docs/concepts/overview/kubernetes-api.md create mode 100755 content/ja/docs/concepts/overview/working-with-objects/_index.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/annotations.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/common-labels.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/field-selectors.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/kubernetes-objects.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/labels.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/names.md create mode 100644 content/ja/docs/concepts/overview/working-with-objects/namespaces.md create mode 100755 content/ja/docs/concepts/services-networking/_index.md create mode 100644 content/ja/docs/concepts/services-networking/dns-pod-service.md create mode 100755 content/ja/docs/concepts/storage/_index.md create mode 100644 content/ja/docs/concepts/storage/dynamic-provisioning.md create mode 100644 content/ja/docs/concepts/storage/volume-snapshot-classes.md create mode 100644 content/ja/docs/concepts/workloads/_index.md create mode 100644 content/ja/docs/concepts/workloads/controllers/_index.md create mode 100644 content/ja/docs/concepts/workloads/controllers/cron-jobs.md create mode 100644 content/ja/docs/concepts/workloads/controllers/daemonset.md create mode 100644 content/ja/docs/concepts/workloads/controllers/garbage-collection.md create mode 100644 content/ja/docs/concepts/workloads/controllers/replicaset.md create mode 100644 content/ja/docs/concepts/workloads/controllers/statefulset.md create mode 100644 content/ja/docs/concepts/workloads/controllers/ttlafterfinished.md create mode 100755 content/ja/docs/concepts/workloads/pods/_index.md create mode 100644 content/ja/docs/concepts/workloads/pods/init-containers.md create mode 100644 content/ja/docs/concepts/workloads/pods/pod-overview.md create mode 100644 content/ja/docs/concepts/workloads/pods/pod.md create mode 100644 content/ja/docs/concepts/workloads/pods/podpreset.md create mode 100644 content/ja/docs/contribute/_index.md create mode 100755 content/ja/docs/reference/glossary/controller.md create mode 100755 content/ja/docs/reference/glossary/etcd.md create mode 100755 content/ja/docs/reference/glossary/kube-apiserver.md create mode 100755 content/ja/docs/reference/glossary/kube-controller-manager.md create mode 100755 content/ja/docs/reference/glossary/kube-scheduler.md create mode 100755 content/ja/docs/reference/glossary/kubelet.md create mode 100755 content/ja/docs/reference/glossary/name.md create mode 100755 content/ja/docs/reference/glossary/statefulset.md create mode 100755 content/ja/docs/reference/glossary/uid.md create mode 100644 content/ja/docs/tasks/access-application-cluster/service-access-application-cluster.md create mode 100644 content/ja/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md create mode 100644 content/ja/docs/tasks/debug-application-cluster/debug-init-containers.md create mode 100644 content/ja/docs/tasks/debug-application-cluster/debug-stateful-set.md create mode 100644 content/ja/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md create mode 100644 content/ja/docs/tasks/debug-application-cluster/get-shell-running-container.md create mode 100644 content/ja/docs/tasks/run-application/delete-stateful-set.md create mode 100644 content/ja/docs/tasks/run-application/run-replicated-stateful-application.md create mode 100644 content/ja/docs/tasks/run-application/run-single-instance-stateful-application.md create mode 100644 content/ja/docs/tasks/run-application/run-stateless-application-deployment.md create mode 100644 content/ja/docs/tasks/run-application/scale-stateful-set.md create mode 100644 content/ja/examples/pods/pod-rs.yaml create mode 100644 content/ja/includes/default-storage-class-prereqs.md create mode 100644 content/ja/includes/federated-task-tutorial-prereqs.md create mode 100644 content/ja/includes/federation-deprecation-warning-note.md create mode 100644 content/ja/includes/index.md create mode 100644 content/ja/includes/partner-script.js create mode 100644 content/ja/includes/partner-style.css create mode 100644 content/ja/includes/task-tutorial-prereqs.md create mode 100644 content/ja/includes/user-guide-content-moved.md create mode 100644 content/ja/includes/user-guide-migration-notice.md diff --git a/content/ja/docs/concepts/containers/_index.md b/content/ja/docs/concepts/containers/_index.md new file mode 100755 index 0000000000000..ad442f3ab36e4 --- /dev/null +++ b/content/ja/docs/concepts/containers/_index.md @@ -0,0 +1,5 @@ +--- +title: "Containers" +weight: 40 +--- + diff --git a/content/ja/docs/concepts/containers/container-environment-variables.md b/content/ja/docs/concepts/containers/container-environment-variables.md new file mode 100644 index 0000000000000..1057cc0518323 --- /dev/null +++ b/content/ja/docs/concepts/containers/container-environment-variables.md @@ -0,0 +1,55 @@ +--- +title: コンテナ環境変数 +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +このページでは、コンテナ環境で利用可能なリソースについて説明します。 + +{{% /capture %}} + + +{{% capture body %}} + +## コンテナ環境 + +Kubernetesはコンテナにいくつかの重要なリソースを提供します。 + +* イメージと1つ以上のボリュームの組み合わせのファイルシステム +* コンテナ自体に関する情報 +* クラスター内の他のオブジェクトに関する情報 + +### コンテナ情報 + +コンテナの *ホスト名* は、コンテナが実行されているPodの名前です。 +ホスト名は`hostname`コマンドまたはlibcの[`gethostname`](http://man7.org/linux/man-pages/man2/gethostname.2.html)関数呼び出しにより利用可能です。 + +Podの名前と名前空間は[downward API](/docs/tasks/inject-data-application/downward-api-volume-expose-pod-information/)を通じて環境変数として利用可能です。 + +Pod定義からのユーザー定義の環境変数もコンテナで利用できます。 +Dockerイメージで静的に指定されている環境変数も同様です。 + +### クラスター情報 + +コンテナの作成時に実行されていたすべてのサービスのリストは、環境変数として使用できます。 +これらの環境変数はDockerリンクの構文と一致します。 + +*bar* という名前のコンテナに対応する *foo* という名前のサービスの場合、以下の変数が定義されています。 + +```shell +FOO_SERVICE_HOST=<サービスが実行されているホスト> +FOO_SERVICE_PORT=<サービスが実行されているポート> +``` + +サービスは専用のIPアドレスを持ち、[DNSアドオン](http://releases.k8s.io/{{< param "githubbranch" >}}/cluster/addons/dns/)が有効の場合、DNSを介してコンテナで利用可能です。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [コンテナライフサイクルフック](/docs/concepts/containers/container-lifecycle-hooks/)の詳細 +* [コンテナライフサイクルイベントへのハンドラー紐付け](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/)のハンズオン + +{{% /capture %}} diff --git a/content/ja/docs/concepts/containers/container-lifecycle-hooks.md b/content/ja/docs/concepts/containers/container-lifecycle-hooks.md new file mode 100644 index 0000000000000..4eb737ff159c9 --- /dev/null +++ b/content/ja/docs/concepts/containers/container-lifecycle-hooks.md @@ -0,0 +1,104 @@ +--- +title: コンテナライフサイクルフック +content_template: templates/concept +weight: 30 +--- + +{{% capture overview %}} + +このページでは、kubeletにより管理されるコンテナがコンテナライフサイクルフックフレームワークを使用して、管理ライフサイクル中にイベントによって引き起こされたコードを実行する方法について説明します。 + +{{% /capture %}} + + +{{% capture body %}} + +## 概要 + +Angularなどのコンポーネントライフサイクルフックを持つ多くのプログラミング言語フレームワークと同様に、Kubernetesはコンテナにライフサイクルフックを提供します。 +フックにより、コンテナは管理ライフサイクル内のイベントを認識し、対応するライフサイクルフックが実行されたときにハンドラーに実装されたコードを実行できます。 + +## コンテナフック + +コンテナに公開されている2つのフックがあります。 + +`PostStart` + +このフックはコンテナが作成された直後に実行されます。 +しかし、フックがコンテナのENTRYPOINTの前に実行されるという保証はありません。 +ハンドラーにパラメーターは渡されません。 + +`PreStop` + +このフックは、liveness probeの失敗、プリエンプション、リソース競合などのAPI要求または管理イベントが原因でコンテナが終了する直前に呼び出されます。コンテナが既に終了状態または完了状態にある場合、preStopフックの呼び出しは失敗します。 +これはブロッキング、つまり同期的であるため、コンテナを削除するための呼び出しを送信する前に完了する必要があります。 +ハンドラーにパラメーターは渡されません。 + +終了動作の詳細な説明は、[Termination of Pods](/docs/concepts/workloads/pods/pod/#termination-of-pods)にあります。 + +### フックハンドラーの実装 + +コンテナは、フックのハンドラーを実装して登録することでそのフックにアクセスできます。 +コンテナに実装できるフックハンドラーは2種類あります。 + +* Exec - コンテナのcgroupsと名前空間の中で、 `pre-stop.sh`のような特定のコマンドを実行します。 +コマンドによって消費されたリソースはコンテナに対してカウントされます。 +* HTTP - コンテナ上の特定のエンドポイントに対してHTTP要求を実行します。 + +### フックハンドラーの実行 + +コンテナライフサイクル管理フックが呼び出されると、Kubernetes管理システムはそのフック用に登録されたコンテナ内のハンドラーを実行します。 + +フックハンドラーの呼び出しは、コンテナを含むPodのコンテキスト内で同期しています。 +これは、`PostStart`フックの場合、コンテナのENTRYPOINTとフックは非同期に起動することを意味します。 +しかし、フックの実行に時間がかかりすぎたりハングしたりすると、コンテナは`running`状態になることができません。 + +その振る舞いは `PreStop`フックに似ています。 +実行中にフックがハングした場合、Podフェーズは`Terminating`状態に留まり、Podの`terminationGracePeriodSeconds`が終了した後に終了します。 +`PostStart`または`PreStop`フックが失敗した場合、コンテナを強制終了します。 + +ユーザーはフックハンドラーをできるだけ軽量にするべきです。 +ただし、コンテナを停止する前に状態を保存する場合など、長時間実行されるコマンドが意味をなす場合があります。 + +### フック配送保証 + +フックの配送は *少なくとも1回* を意図しています。これはフックが`PostStart`や`PreStop`のような任意のイベントに対して複数回呼ばれることがあることを意味します。 +これを正しく処理するのはフックの実装次第です。 + +通常、単一の配送のみが行われます。 +たとえば、HTTPフックレシーバーがダウンしていてトラフィックを受け取れない場合、再送信は試みられません。 +ただし、まれに二重配送が発生することがあります。 +たとえば、フックの送信中にkubeletが再起動した場合、kubeletが起動した後にフックが再送信される可能性があります。 + +### フックハンドラーのデバッグ + +フックハンドラーのログは、Podのイベントには表示されません。 +ハンドラーが何らかの理由で失敗した場合は、イベントをブロードキャストします。 +`PostStart`の場合、これは`FailedPostStartHook`イベントで、`PreStop`の場合、これは`FailedPreStopHook`イベントです。 +これらのイベントは `kubectl describe pod `を実行することで見ることができます。 +このコマンドの実行によるイベントの出力例をいくつか示します。 + +``` +Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 1m 1m 1 {default-scheduler } Normal Scheduled Successfully assigned test-1730497541-cq1d2 to gke-test-cluster-default-pool-a07e5d30-siqd + 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulling pulling image "test:1.0" + 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Created Created container with docker id 5c6a256a2567; Security:[seccomp=unconfined] + 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Pulled Successfully pulled image "test:1.0" + 1m 1m 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Started Started container with docker id 5c6a256a2567 + 38s 38s 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Killing Killing container with docker id 5c6a256a2567: PostStart handler: Error executing in Docker Container: 1 + 37s 37s 1 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Normal Killing Killing container with docker id 8df9fdfd7054: PostStart handler: Error executing in Docker Container: 1 + 38s 37s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "main" with RunContainerError: "PostStart handler: Error executing in Docker Container: 1" + 1m 22s 2 {kubelet gke-test-cluster-default-pool-a07e5d30-siqd} spec.containers{main} Warning FailedPostStartHook +``` + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [コンテナ環境](/docs/concepts/containers/container-environment-variables/)の詳細 +* [コンテナライフサイクルイベントへのハンドラー紐付け](/docs/tasks/configure-pod-container/attach-handler-lifecycle-event/)のハンズオン + + +{{% /capture %}} diff --git a/content/ja/docs/concepts/containers/runtime-class.md b/content/ja/docs/concepts/containers/runtime-class.md new file mode 100644 index 0000000000000..8d9c72aca235c --- /dev/null +++ b/content/ja/docs/concepts/containers/runtime-class.md @@ -0,0 +1,142 @@ +--- +reviewers: +title: ランタイムクラス(Runtime Class) +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +{{< feature-state for_k8s_version="v1.14" state="beta" >}} + +このページではRuntimeClassリソースと、runtimeセクションのメカニズムについて説明します。 + +{{< warning >}} +RuntimeClassはKubernetes1.14のβ版アップグレードにおいて*破壊的な* 変更を含んでいます。もしユーザーがKubernetes1.14以前のバージョンを使っていた場合、[RuntimeClassのα版からβ版へのアップグレード](#upgrading-runtimeclass-from-alpha-to-beta)を参照してください。 +{{< /warning >}} + +{{% /capture %}} + + +{{% capture body %}} + +## RuntimeClassについて + +RuntimeClassはコンテナランタイムの設定を選択するための機能です。そのコンテナランタイム設定はPodのコンテナを稼働させるために使われます。 + +### セットアップ + +RuntimeClass機能のFeature Gateが有効になっていることを確認してください(デフォルトで有効です)。Feature Gateを有効にする方法については、[Feature +Gates](/docs/reference/command-line-tools-reference/feature-gates/)を参照してください。 +その`RuntimeClass`のFeature GateはApiServerとkubeletのどちらも有効になっていなければなりません。 + +1. ノード上でCRI実装を設定する。(ランタイムに依存) +2. 対応するRuntimeClassリソースを作成する。 + +#### 1. ノード上でCRI実装を設定する。 + +RuntimeClassを通じて利用可能な設定はContainer Runtime Interface (CRI)の実装依存となります。 +ユーザーの環境のCRI実装の設定方法は、対応するドキュメント([下記](#cri-configuration))を参照ください。 + +{{< note >}} +RuntimeClassは現時点において、クラスター全体で同じ種類のNode設定であることを仮定しています。(これは全てのNodeがコンテナランタイムに関して同じ方法で構成されていることを意味します)。 +設定が異なるNodeに関しては、スケジューリング機能を通じてRuntimeClassとは独立して管理されなくてはなりません。([PodをNodeに割り当てる方法](/docs/concepts/configuration/assign-pod-node/)を参照して下さい)。 +{{< /note >}} + +RuntimeClassの設定は、RuntimeClassによって参照される`ハンドラー`名を持ちます。そのハンドラーは正式なDNS-1123に準拠する形式のラベルでなくてはなりません(英数字 + `-`の文字で構成されます)。 + +#### 2. 対応するRuntimeClassリソースを作成する + +ステップ1にて設定する各項目は、関連する`ハンドラー` 名を持ちます。それはどの設定かを指定するものです。各ハンドラーにおいて、対応するRuntimeClassオブジェクトが作成されます。 + +そのRuntimeClassリソースは現時点で2つの重要なフィールドを持ちます。それはRuntimeClassの名前(`metadata.name`)とハンドラー(`handler`)です。そのオブジェクトの定義は下記のようになります。 + +```yaml +apiVersion: node.k8s.io/v1beta1 # RuntimeClassはnode.k8s.ioというAPIグループで定義されます。 +kind: RuntimeClass +metadata: + name: myclass # RuntimeClass名 + # RuntimeClassはネームスペースなしのリソースです。 +handler: myconfiguration # 対応するCRI設定 +``` + +{{< note >}} +RuntimeClassの書き込み操作(create/update/patch/delete)はクラスター管理者のみに制限されることを推奨します。 +これはたいていデフォルトで有効となっています。さらなる詳細に関しては[Authorization +Overview](/docs/reference/access-authn-authz/authorization/)を参照してください。 +{{< /note >}} + +### 使用例 + +一度RuntimeClassがクラスターに対して設定されると、それを使用するのは非常に簡単です。PodSpecの`runtimeClassName`を指定してください。 +例えば + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: mypod +spec: + runtimeClassName: myclass + # ... +``` + +これは、Kubeletに対してPodを稼働させるためのRuntimeClassを使うように指示します。もし設定されたRuntimeClassが存在しない場合や、CRIが対応するハンドラーを実行できない場合、そのPodは`Failed`という[フェーズ](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)になります。 +エラーメッセージに関しては対応する[イベント](/docs/tasks/debug-application-cluster/debug-application-introspection/)を参照して下さい。 + +もし`runtimeClassName`が指定されていない場合、デフォルトのRuntimeHandlerが使用され、これはRuntimeClassの機能が無効であるときのふるまいと同じものとなります。 + +### CRIの設定 + +CRIランタイムのセットアップに関するさらなる詳細は、[CRIのインストール](/docs/setup/cri/)を参照してください。 + +#### dockershim + +Kubernetesのビルトインのdockershim CRIは、ランタイムハンドラーをサポートしていません。 + +#### [containerd](https://containerd.io/) + +ランタイムハンドラーは、`/etc/containerd/config.toml`にあるcontainerdの設定ファイルにより設定されます。 +正しいハンドラーは、その`runtime`セクションで設定されます。 + +``` +[plugins.cri.containerd.runtimes.${HANDLER_NAME}] +``` + +containerdの設定に関する詳細なドキュメントは下記を参照してください。 +https://github.com/containerd/cri/blob/master/docs/config.md + +#### [cri-o](https://cri-o.io/) + +ランタイムハンドラーは、`/etc/crio/crio.conf`にあるcri-oの設定ファイルにより設定されます。 +正しいハンドラーは[crio.runtime +table](https://github.com/kubernetes-sigs/cri-o/blob/master/docs/crio.conf.5.md#crioruntime-table)で設定されます。 + +``` +[crio.runtime.runtimes.${HANDLER_NAME}] + runtime_path = "${PATH_TO_BINARY}" +``` + +cri-oの設定に関する詳細なドキュメントは下記を参照してください。 +https://github.com/kubernetes-sigs/cri-o/blob/master/cmd/crio/config.go + + +### RutimeClassをα版からβ版にアップグレードする + +RuntimeClassのβ版の機能は、下記の変更点を含みます。 + +- `node.k8s.io`APIグループと`runtimeclasses.node.k8s.io`リソースはCustomResourceDefinitionからビルトインAPIへとマイグレーションされました。 +- `spec`はRuntimeClassの定義内にインライン化されました(RuntimeClassSpecはすでにありません)。 +- `runtimeHandler`フィールドは`handler`にリネームされました。 +- `handler`フィールドは、全てのAPIバージョンにおいて必須となりました。これはα版のAPIでの`runtimeHandler`フィールドもまた必須であることを意味します。 +- `handler`フィールドは正しいDNSラベルの形式である必要があり([RFC 1123](https://tools.ietf.org/html/rfc1123))、これは`.`文字はもはや含むことができないことを意味します(全てのバージョンにおいて)。有効なハンドラー名は、次の正規表現に従います。`^[a-z0-9]([-a-z0-9]*[a-z0-9])?$` + +**Action Required:** 次のアクションはRuntimeClassのα版からβ版へのアップグレードにおいて対応が必須です。 + +- RuntimeClassリソースはKubernetes v1.14にアップグレードされた*後に* 再作成されなくてはなりません。そして`runtimeclasses.node.k8s.io`というCRDは手動で削除されるべきです。 + ``` + kubectl delete customresourcedefinitions.apiextensions.k8s.io runtimeclasses.node.k8s.io + ``` +- `runtimeHandler`の指定がないか、もしくは空文字の場合や、ハンドラー名に`.`文字列が使われている場合はα版のRuntimeClassにおいてもはや有効ではありません。正しい形式のハンドラー設定に変更しなくてはなりません(先ほど記載した内容を確認ください)。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/overview/components.md b/content/ja/docs/concepts/overview/components.md new file mode 100644 index 0000000000000..3aa001d294334 --- /dev/null +++ b/content/ja/docs/concepts/overview/components.md @@ -0,0 +1,107 @@ +--- +reviewers: +title: Kubernetesコンポーネント +content_template: templates/concept +weight: 20 +card: + name: concepts + weight: 20 +--- + +{{% capture overview %}} + +このページでは、Kubernetesクラスターの機能を提供するために必要になる様々なコンポーネントを説明します。(実行ファイル形式で提供される) + +{{% /capture %}} + +{{% capture body %}} + +## マスターコンポーネント + +マスターコンポーネントは、クラスターのコントロールプレーンです。マスターコンポーネントはクラスターに関する全体的な決定を行い(例えばスケジューリングなど)、クラスターのイベントを検知し、それらに応答します(例えば、レプリケーションコントローラーの'replicas'フィールドが充足されていない場合、新しいPodを立ち上げます)。 + +マスターコンポーネントは、クラスター内のどのマシン上でも動かすことが出来ます。しかし、話を簡単にするために、環境構築を行うスクリプトは通常、全てのマスターコンポーネントを同じマシン上で稼働させ、ユーザーのコンテナはそのマシンでは稼働させません。複数マスターマシン構成の構築例は、[高可用性クラスターを構築する](/docs/admin/high-availability/)を確認してください。 + +### kube-apiserver + +{{< glossary_definition term_id="kube-apiserver" length="all" >}} + +### etcd + +{{< glossary_definition term_id="etcd" length="all" >}} + +### kube-scheduler + +{{< glossary_definition term_id="kube-scheduler" length="all" >}} + +### kube-controller-manager + +{{< glossary_definition term_id="kube-controller-manager" length="all" >}} + +コントローラーには下記のものがあります: + + * ノードコントローラー: ノードがダウンした場合に、通知と応答を行います。 + * レプリケーションコントローラー: それぞれのレプリケーションコントローラーオブジェクト内に、正しい数のポッドが存在しているかを管理します。 + * エンドポイントコントローラー: エンドポイントを設定します。(これは、サービスとPodを結合するということです) + * サービスアカウント & トークンコントローラー: 新しい名前空間にデフォルトアカウントとAPIアクセストークンを作成します。 + +### クラウドコントローラーマネージャー(cloud-controller-manager) + +[クラウドコントローラーマネージャー](/docs/tasks/administer-cluster/running-cloud-controller/)は、基盤となるクラウドサービスと連携するコントローラーを動かします。クラウドコントローラーマネージャーはKubernetes 1.6でリリースされたアルファの機能です。 + +クラウドコントローラーマネージャーは、クラウドサービス固有の制御ループのみを動かします。これらの制御ループは kube-controller-manager から無効にしなければなりません。無効にするには、kube-controller-managerの起動時に、`--cloud-provider`フラグに`external`を指定します。 + +クラウドコントローラーマネージャーは、クラウドベンダー固有のコードと、Kubernetes本体のコードを独立して開発することを可能にします。以前のリリースでは、Kubernetes本体のコードがクラウドサービス固有のコードに機能的に依存していました。将来のリリースでは、クラウドベンダー固有のコードはクラウドベンダー自身が保持し、Kubernetesが稼働している時にクラウドコントローラーマネージャーに紐付けられるようになっていきます。 + +以下のコントローラーがクラウドサービスとの依存関係を持っています: + + * ノードコントローラー: クラウドから応答が無くなった後、ノードが削除されていないかを確認します。 + * ルートコントローラー: クラウド基盤にルーティング情報を設定します。 + * サービスコントローラー: クラウドサービス上のロードバランサーを作成、更新、削除します。 + * ボリュームコントローラー: ボリュームを作成、アタッチ、マウント、またクラウドサービスと連携し、ボリュームを編成します。 + +## ノードコンポーネント + +ノードコンポーネントは全てのノード上で稼働し、稼働中Podの管理、Kubernetes実行環境を提供します。 + +### kubelet + +{{< glossary_definition term_id="kubelet" length="all" >}} + +### kube-proxy + +[kube-proxy](/docs/admin/kube-proxy/)は、ホスト上のネットワークルールを管理し、コネクションの転送を行うことで、Kubernetesサービスの抽象化を可能にします。 + +### コンテナランタイム + +コンテナランタイムは、コンテナを稼働させる責務を持つソフトウェアです。 +Kubernetesはいくつかのランタイムをサポートしています: [Docker](http://www.docker.com)、[containerd](https://containerd.io)、[cri-o](https://cri-o.io/)、[rktlet](https://github.com/kubernetes-incubator/rktlet)、また[Kubernetes CRI (コンテナランタイムインターフェース)](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-node/container-runtime-interface.md)の実装があります。 + +## アドオン + +アドオンは、クラスターの機能群を実装したPodとサービスです。そのPodは、Deployment、レプリケーションコントローラーなどによって管理されるでしょう。名前空間に属するアドオンオブジェクトは、`kube-system`名前空間に作られます。 + +一部のアドオンを下記に示します。その他の利用可能なアドオンのリストは、[アドオン](/docs/concepts/cluster-administration/addons/)を確認してください。 + +### DNS + +厳密には他のアドオンは必須ではありませんが、多数の実例が依存しているため、全てのKubernetesクラスターは[クラスターDNS](/docs/concepts/services-networking/dns-pod-service/)を持つべきです。 + +クラスターDNSはDNSサーバーで、あなたの環境で動いている他のDNSサーバーに加え、Kubernetesサービスで利用するDNSレコードも扱います。 + +Kubernetesから起動されたコンテナは、DNSの検索対象として、自動的にこのDNSサーバーを含めます。 + +### Web UI (ダッシュボード) + +[ダッシュボード](/docs/tasks/access-application-cluster/web-ui-dashboard/)は、汎用のKubernetesのクラスターを管理するためのWebベースのUIです。ユーザーはこれを用いて、クラスター上で稼働しているアプリケーション、またクラスターそのものの管理、トラブルシュートが可能です。 + +### コンテナリソース監視 + +[コンテナリソース監視](/docs/tasks/debug-application-cluster/resource-usage-monitoring/)は、コンテナに関する一般的な時系列のメトリクスをセントラルなデータベースに記録し、そのデータを閲覧するUIを提供します。 + +### クラスターレベルロギング + +[クラスターレベルロギング](/docs/concepts/cluster-administration/logging/)機構は、コンテナのログを、検索、閲覧のインターフェースを持ったセントラルなログ保管場所に保存します。 + +{{% /capture %}} + diff --git a/content/ja/docs/concepts/overview/kubernetes-api.md b/content/ja/docs/concepts/overview/kubernetes-api.md new file mode 100644 index 0000000000000..43fe3feb9dad4 --- /dev/null +++ b/content/ja/docs/concepts/overview/kubernetes-api.md @@ -0,0 +1,116 @@ +--- +reviewers: +title: Kubernetes API +content_template: templates/concept +weight: 30 +card: + name: concepts + weight: 30 +--- + +{{% capture overview %}} + +全般的なAPIの規則は、[API規則ドキュメント](https://git.k8s.io/community/contributors/devel/api-conventions.md)に記載されています。 + +APIエンドポイント、リソースタイプ、そしてサンプルは[APIリファレンス](/docs/reference)に記載されています。 + +APIへの外部からのアクセスは、[APIアクセス制御ドキュメント](/docs/reference/access-authn-authz/controlling-access/)に記載されています。 + +Kubernetes APIは、システムの宣言的設定スキーマの基礎としても機能します。[kubectl](/docs/reference/kubectl/overview/)コマンドラインツールから、APIオブジェクトを作成、更新、削除、取得することが出来ます。 + +また、Kubernetesは、シリアライズされた状態を(現在は[etcd](https://coreos.com/docs/distributed-configuration/getting-started-with-etcd/)に)APIリソースの単位で保存しています。 + +Kubernetesそれ自身は複数のコンポーネントから構成されており、APIを介して連携しています。 + +{{% /capture %}} + +{{% capture body %}} + +## APIの変更 + +我々の経験上、成功を収めているどのようなシステムも、新しいユースケースへの対応、既存の変更に合わせ、成長し変わっていく必要があります。したがって、Kubernetesにも継続的に変化、成長することを期待しています。一方で、長期間にわたり、既存のクライアントとの互換性を損なわないようにする予定です。一般的に、新しいAPIリソースとリソースフィールドは頻繁に追加されることが予想されます。リソース、フィールドの削除は、[API廃止ポリシー](/docs/reference/using-api/deprecation-policy/)への準拠を必要とします。 + +何が互換性のある変更を意味するか、またAPIをどのように変更するかは、[API変更ドキュメント](https://git.k8s.io/community/contributors/devel/api_changes.md)に詳解されています。 + +## OpenAPIとSwaggerの定義 + +完全なAPIの詳細は、[OpenAPI](https://www.openapis.org/)に記載されています。 + +Kubernetes 1.10から、KubernetesAPIサーバーは`/openapi/v2`のエンドポイントを通じて、OpenAPI仕様を提供しています。 +リクエストフォーマットは、HTTPヘッダーを下記のように設定することで指定されます: + +ヘッダ | 設定可能な値 +------ | --------------- +Accept | `application/json`, `application/com.github.proto-openapi.spec.v2@v1.0+protobuf` (デフォルトのcontent-typeは、`*/*`に対して`application/json`か、もしくはこのヘッダーを送信しません) +Accept-Encoding | `gzip` (このヘッダーを送信しないことも許容されています) + +1.14より前のバージョンでは、フォーマット分離エンドポイント(`/swagger.json`, `/swagger-2.0.0.json`, `/swagger-2.0.0.pb-v1`, `/swagger-2.0.0.pb-v1.gz`)が、OpenAPI仕様を違うフォーマットで提供しています。これらのエンドポイントは非推奨となっており、Kubernetes1.14で削除される予定です。 + +**OpenAPI仕様の取得サンプル**: + +1.10より前 | Kubernetes1.10以降 +----------- | ----------------------------- +GET /swagger.json | GET /openapi/v2 **Accept**: application/json +GET /swagger-2.0.0.pb-v1 | GET /openapi/v2 **Accept**: application/com.github.proto-openapi.spec.v2@v1.0+protobuf +GET /swagger-2.0.0.pb-v1.gz | GET /openapi/v2 **Accept**: application/com.github.proto-openapi.spec.v2@v1.0+protobuf **Accept-Encoding**: gzip + +Kubernetesは、他の手段として主にクラスター間の連携用途向けのAPIに、Protocol buffersをベースにしたシリアライズフォーマットを実装しており、そのフォーマットの概要は[デザイン提案](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/protobuf.md)に記載されています。また各スキーマのIDFファイルは、APIオブジェクトを定義しているGoパッケージ内に配置されています。 + +また、1.14より前のバージョンのKubernetesAPIサーバーでは、[Swagger v1.2](http://swagger.io/)をベースにしたKubernetes仕様を、`/swaggerapi`で公開しています。 +このエンドポイントは非推奨となっており、Kubernetes1.14で削除される予定です。 + +## APIバージョニング + +フィールドの削除やリソース表現の再構成を簡単に行えるようにするため、Kubernetesは複数のAPIバージョンをサポートしており、`/api/v1`や`/apis/extensions/v1beta1`のように、それぞれ異なるAPIのパスが割り当てられています。 + +APIが、システムリソースと動作について明確かつ一貫したビューを提供し、サポート終了、実験的なAPIへのアクセス制御を有効にするために、リソースまたはフィールドレベルではなく、APIレベルでバージョンを付けることを選択しました。JSONとProtocol Buffersのシリアライズスキーマも、スキーマ変更に関して同じガイドラインに従います。ここから以下の説明は、双方のフォーマットをカバーしています。 + +APIとソフトウエアのバージョニングは、間接的にしか関連していないことに注意してください。[APIとリリースバージョニング提案](https://git.k8s.io/community/contributors/design-proposals/release/versioning.md)で、APIとソフトウェアのバージョニングの関連について記載しています。 + +異なるバージョンのAPIは、異なるレベル(版)の安定性とサポートを持っています。それぞれのレベル(版)の基準は、[API変更ドキュメント](https://git.k8s.io/community/contributors/devel/api_changes.md#alpha-beta-and-stable-versions)に詳細が記載されています。下記に簡潔にまとめます: + +- アルファレベル(版): + - バージョン名に`alpha`を含みます(例、`v1alpha1`)。 + - バグが多いかもしれません。アルファ機能の有効化がバグを顕在化させるかもしれません。デフォルトでは無効となっています。 + - アルファ機能のサポートは、いつでも通知無しに取りやめられる可能性があります。 + - ソフトウェアリリース後、APIが通知無しに互換性が無い形で変更される可能性があります。 + - バグが増えるリスク、また長期サポートが無いことから、短期間のテスト用クラスターでの利用を推奨します。 +- ベータレベル(版): + - バージョン名に`beta`を含みます(例、`v2beta3`)。 + - コードは十分にテストされています。ベータ機能の有効化は安全だと考えられます。デフォルトで有効化されています。 + - 全体的な機能のサポートは取りやめられませんが、詳細は変更される可能性があります。 + - オブジェクトのスキーマ、意味はその後のベータ、安定版リリースで互換性が無い形で変更される可能性があります。その場合、次のバージョンへアップデートするための手順を提供します。その手順ではAPIオブジェクトの削除、修正、再作成が必要になるかもしれません。修正のプロセスは多少の検討が必要になるかもしれません。これは、この機能を利用しているアプリケーションでダウンタイムが必要になる可能性があるためです。 + - 今後のリリースで、互換性の無い変更が行われる可能性があるため、ビジネスクリティカルな場面以外での利用を推奨します。もし複数のクラスターを持っており、それぞれ個別にアップグレードが可能な場合、この制限の影響を緩和できるかもしれません。 + - **是非ベータ機能を試して、フィードバックをください!ベータから安定版になってしまうと、より多くの変更を加えることが難しくなってしまいます。** +- 安定版: + - バージョン名は`vX`のようになっており、`X`は整数です。 + - 安定版の機能は、今後のリリースバージョンにも適用されます。 + +## APIグループ + +KubernetesAPIの拡張を簡易に行えるようにするため、[*APIグループ*](https://git.k8s.io/community/contributors/design-proposals/api-machinery/api-group.md)を実装しました。 +APIグループは、RESTのパスとシリアライズされたオブジェクトの`apiVersion`フィールドで指定されます。 + +現在、いくつかのAPIグループが利用されています: + +1. *core* グループ(度々、*legacy group* と呼ばれます)は、`/api/v1`というRESTのパスで、`apiVersion: v1`を使います。 + +1. 名前付きのグループは、`/apis/$GROUP_NAME/$VERSION`というRESTのパスで、`apiVersion: $GROUP_NAME/$VERSION`(例、`apiVersion: batch/v1`)を使います。サポートされているAPIグループの全リストは、[Kubernetes APIリファレンス](/docs/reference/)を参照してください。 + +[カスタムリソース](/docs/concepts/api-extension/custom-resources/)でAPIを拡張するために、2つの方法がサポートされています: + +1. [カスタムリソース定義](/docs/tasks/access-kubernetes-api/extend-api-custom-resource-definitions/)は、とても基本的なCRUDが必要なユーザー向けです。 +1. 独自のAPIサーバーを実装可能な、フルセットのKubernetes APIが必要なユーザーは、[アグリゲーター](/docs/tasks/access-kubernetes-api/configure-aggregation-layer/)を使い、クライアントにシームレスな形で拡張を行います。 + +## APIグループの有効化 + +いくつかのリソースとAPIグループはデフォルトで有効になっています。それらは、APIサーバーの`--runtime-config`設定で、有効化、無効化できます。`--runtime-config`は、カンマ区切りの複数の値を設定可能です。例えば、batch/v1を無効化する場合、`--runtime-config=batch/v1=false`をセットし、batch/v2alpha1を有効化する場合、`--runtime-config=batch/v2alpha1`をセットします。このフラグは、APIサーバーのランタイム設定を表すkey=valueのペアを、カンマ区切りで指定したセットを指定可能です。 + +重要: APIグループ、リソースの有効化、無効化は、`--runtime-config`の変更を反映するため、APIサーバーとコントローラーマネージャーの再起動が必要です。 + +## APIグループのリソースの有効化 + +DaemonSets、Deployments、HorizontalPodAutoscalers、Ingresses、JobsReplicaSets、そしてReplicaSetsはデフォルトで有効です。 +その他の拡張リソースは、APIサーバーの`--runtime-config`を設定することで有効化できます。`--runtime-config`はカンマ区切りの複数の値を設定可能です。例えば、deploymentsとingressを無効化する場合、`--runtime-config=extensions/v1beta1/deployments=false,extensions/v1beta1/ingresses=false`と設定します。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/overview/working-with-objects/_index.md b/content/ja/docs/concepts/overview/working-with-objects/_index.md new file mode 100755 index 0000000000000..8661349a3fbc4 --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/_index.md @@ -0,0 +1,5 @@ +--- +title: "Working with Kubernetes Objects" +weight: 40 +--- + diff --git a/content/ja/docs/concepts/overview/working-with-objects/annotations.md b/content/ja/docs/concepts/overview/working-with-objects/annotations.md new file mode 100644 index 0000000000000..a169bdee03ff3 --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/annotations.md @@ -0,0 +1,67 @@ +--- +title: アノテーション(Annotations) +content_template: templates/concept +weight: 50 +--- + +{{% capture overview %}} +ユーザーは、識別用途でない任意のメタデータをオブジェクトに割り当てるためにアノテーションを使用できます。ツールやライブラリなどのクライアントは、このメタデータを取得できます。 +{{% /capture %}} + +{{% capture body %}} +## オブジェクトにメタデータを割り当てる + +ユーザーは、Kubernetesオブジェクトに対してラベルやアノテーションの両方またはどちらか一方を割り当てることができます。 +ラベルはオブジェクトの選択や、特定の条件を満たしたオブジェクトの集合を探すことに使うことができます。 +それと対照的に、アノテーションはオブジェクトを識別、または選択するために使用されません。 +アノテーション内のメタデータは大小様々で、構造化されているものや、そうでないものも設定でき、ラベルでは許可されていない文字も含むことができます。 + +アノテーションは、ラベルと同様に、キーとバリューのマップとなります。 + +```json +"metadata": { + "annotations": { + "key1" : "value1", + "key2" : "value2" + } +} +``` + +下記は、アノテーション内で記録できる情報の例です。 + +* 宣言的設定レイヤによって管理されているフィールド。これらのフィールドをアノテーションとして割り当てることで、クライアントもしくはサーバによってセットされたデフォルト値、オートサイジングやオートスケーリングシステムによってセットされたフィールドや、自動生成のフィールドなどと区別することができます。 + +* ビルド、リリースやタイムスタンプのようなイメージの情報、リリースID、gitのブランチ、PR番号、イメージハッシュ、レジストリアドレスなど + +* ロギング、監視、分析用のポインタ、もしくは監査用リポジトリ + +* デバッグ目的で使用されるためのクライアントライブラリやツールの情報。例えば、名前、バージョン、ビルド情報など。 + +* 他のエコシステムのコンポーネントからの関連オブジェクトのURLなど、ユーザーやツール、システムの出所情報。 + +* 軽量ロールアウトツールのメタデータ。 例えば設定やチェックポイントなど。 + +* 情報をどこで確認できるかを示すためのもの。例えばチームのウェブサイト、責任者の電話番号や、ページャー番号やディレクトリエンティティなど。 + +* システムのふるまいの変更や、標準ではない機能を利用可能にするために、エンドユーザーがシステムに対して指定する値 + +アノテーションを使用するかわりに、ユーザーはこのようなタイプの情報を外部のデータベースやディレクトリに保存することもできます。しかし、それによりデプロイ、管理、イントロスペクションを行うためのクライアンライブラリやツールの生成が非常に難しくなります。 + +## 構文と文字セット + +_アノテーション_ はキーとバリューのペアです。有効なアノテーションのキーの形式は2つのセグメントがあります。 +プレフィックス(オプション)と名前で、それらはスラッシュ`/`で区切られます。 +名前セグメントは必須で、63文字以下である必要があり、文字列の最初と最後は英数字(`[a-z0-9A-Z]`)と、文字列の間にダッシュ(`-`)、アンダースコア(`_`)、ドット(`.`)を使うことができます。 +プレフィックスはオプションです。もしプレフィックスが指定されていた場合、プレフィックスはDNSサブドメイン形式である必要があり、それはドット(`.`)で区切られたDNSラベルのセットで、253文字以下である必要があり、最後にスラッシュ(`/`)が続きます。 + +もしプレフィックスが除外された場合、アノテーションキーはそのユーザーに対してプライベートであると推定されます。 +エンドユーザーのオブジェクトにアノテーションを追加するような自動化されたシステムコンポーネント(例: `kube-scheduler` `kube-controller-manager` `kube-apiserver` `kubectl`やその他のサードパーティツール)は、プレフィックスを指定しなくてはなりません。 + +`kubernetes.io/`と`k8s.io/`プレフィックスは、Kubernetesコアコンポーネントのために予約されています。 + +{{% /capture %}} + +{{% capture whatsnext %}} +[ラベルとセレクター](/docs/concepts/overview/working-with-objects/labels/)について学習してください。 +{{% /capture %}} + diff --git a/content/ja/docs/concepts/overview/working-with-objects/common-labels.md b/content/ja/docs/concepts/overview/working-with-objects/common-labels.md new file mode 100644 index 0000000000000..9a6c4508dfe86 --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/common-labels.md @@ -0,0 +1,156 @@ +--- +title: 推奨ラベル(Recommended Labels) +content_template: templates/concept +--- + +{{% capture overview %}} +ユーザーはkubectlやダッシュボード以外に、多くのツールでKubernetesオブジェクトの管理と可視化ができます。共通のラベルセットにより、全てのツールにおいて解釈可能な共通のマナーに沿ってオブジェクトを表現することで、ツールの相互運用を可能にします。 + +ツール化に対するサポートに加えて、推奨ラベルはクエリ可能な方法でアプリケーションを表現します。 +{{% /capture %}} + +{{% capture body %}} +メタデータは、_アプリケーション_ のコンセプトを中心に構成されています。KubernetesはPaaS(Platform as a Service)でなく、アプリケーションの公式な概念を持たず、またそれを強制することはありません。 +そのかわり、アプリケーションは、非公式で、メタデータによって表現されています。単一のアプリケーションが有する項目に対する定義は厳密に決められていません。 + +{{< note >}} +ラベルには推奨ラベルというものがあります。それらのラベルはアプリケーションの管理を容易にします。しかしコア機能のツール化において必須のものではありません。 +{{< /note >}} + +共有されたラベルとアノテーションは、`app.kubernetes.io`という共通のプレフィックスを持ちます。プレフィックスの無いラベルはユーザーに対してプライベートなものになります。その共有されたプレフィックスは、共有ラベルがユーザーのカスタムラベルに干渉しないことを保証します。 + +## ラベル + +これらの推奨ラベルの利点を最大限得るためには、全てのリソースオブジェクトに対して推奨ラベルが適用されるべきです。 + +| キー | 説明 | 例 | 型 | +| ----------------------------------- | --------------------- | -------- | ---- | +| `app.kubernetes.io/name` | アプリケーション名 | `mysql` | 文字列 | +| `app.kubernetes.io/instance` | アプリケーションのインスタンスを特定するための固有名 | `wordpress-abcxzy` | 文字列 | +| `app.kubernetes.io/version` | アプリケーションの現在のバージョン (例: セマンティックバージョン、リビジョンのハッシュなど) | `5.7.21` | 文字列 | +| `app.kubernetes.io/component` | アーキテクチャ内のコンポーネント | `database` | 文字列 | +| `app.kubernetes.io/part-of` | このアプリケーションによって構成される上位レベルのアプリケーション | `wordpress` | 文字列 | +| `app.kubernetes.io/managed-by` | このアプリケーションの操作を管理するために使われているツール | `helm` | 文字列 | + +これらのラベルが実際にどう使われているかを表すために、下記のStatefulSetのオブジェクトを考えましょう。 + +```yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app.kubernetes.io/name: mysql + app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/version: "5.7.21" + app.kubernetes.io/component: database + app.kubernetes.io/part-of: wordpress + app.kubernetes.io/managed-by: helm +``` + +## アプリケーションとアプリケーションのインスタンス + +単一のアプリケーションは、Kubernetesクラスタ内で、いくつかのケースでは同一の名前空間に対して1回または複数回インストールされることがあります。 +例えば、WordPressは複数のウェブサイトがあれば、それぞれ別のWordPressが複数回インストールされることがあります。 + +アプリケーション名と、アプリケーションのインスタンス名はそれぞれ別に記録されます。 +例えば、WordPressは`app.kubernetes.io/name`に`wordpress`と記述され、インスタンス名に関しては`app.kubernetes.io/instance`に`wordpress-abcxzy`と記述されます。この仕組みはアプリケーションと、アプリケーションのインスタンスを特定可能にします。全てのアプリケーションインスタンスは固有の名前を持たなければなりません。 + +## ラベルの使用例 +ここでは、ラベルの異なる使用例を示します。これらの例はそれぞれシステムの複雑さが異なります。 + +### シンプルなステートレスサービス + +`Deployment`と`Service`オブジェクトを使って、シンプルなステートレスサービスをデプロイするケースを考えます。下記の2つのスニペットはラベルが最もシンプルな形式においてどのように使われるかをあらわします。 + +下記の`Deployment`は、アプリケーションを稼働させるポッドを管理するのに使われます。 +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: myservice + app.kubernetes.io/instance: myservice-abcxzy +... +``` + +下記の`Service`は、アプリケーションを公開するために使われます。 +```yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: myservice + app.kubernetes.io/instance: myservice-abcxzy +... +``` + +### データベースを使ったウェブアプリケーション + +次にもう少し複雑なアプリケーションについて考えます。データベース(MySQL)を使ったウェブアプリケーション(WordPress)で、Helmを使ってインストールします。 +下記のスニペットは、このアプリケーションをデプロイするために使うオブジェクト設定の出だし部分です。 + +はじめに下記の`Deployment`は、WordPressのために使われます。 + +```yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: wordpress + app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/version: "4.9.4" + app.kubernetes.io/managed-by: helm + app.kubernetes.io/component: server + app.kubernetes.io/part-of: wordpress +... +``` + +下記の`Service`は、WordPressを公開するために使われます。 + +```yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: wordpress + app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/version: "4.9.4" + app.kubernetes.io/managed-by: helm + app.kubernetes.io/component: server + app.kubernetes.io/part-of: wordpress +... +``` +MySQLは`StatefulSet`として公開され、MySQL自身と、MySQLが属する親アプリケーションのメタデータを持ちます。 + +```yaml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + labels: + app.kubernetes.io/name: mysql + app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/managed-by: helm + app.kubernetes.io/component: database + app.kubernetes.io/part-of: wordpress + app.kubernetes.io/version: "5.7.21" +... +``` + +この`Service`はMySQLをWordPressアプリケーションの一部として公開します。 +```yaml +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: mysql + app.kubernetes.io/instance: wordpress-abcxzy + app.kubernetes.io/managed-by: helm + app.kubernetes.io/component: database + app.kubernetes.io/part-of: wordpress + app.kubernetes.io/version: "5.7.21" +... +``` + +MySQLの`StatefulSet`と`Service`により、MySQLとWordPressに関するより広範な情報が含まれていることに気づくでしょう。 + +{{% /capture %}} \ No newline at end of file diff --git a/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md b/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md new file mode 100644 index 0000000000000..98d03bfec67dd --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/field-selectors.md @@ -0,0 +1,64 @@ +--- +title: フィールドセレクター(Field Selectors) +weight: 60 +--- + +_フィールドセレクター(Field Selectors)_ は、1つかそれ以上のリソースフィールドの値を元に[Kubernetesリソースを選択](/docs/concepts/overview/working-with-objects/kubernetes-objects)するためのものです。 +フィールドセレクタークエリの例は以下の通りです。 + +* `metadata.name=my-service` +* `metadata.namespace!=default` +* `status.phase=Pending` + +下記の`kubectl`コマンドは、[`status.phase`](/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase)フィールドの値が`Running`である全てのPodを選択します。 + +```shell +kubectl get pods --field-selector status.phase=Running +``` + +{{< note >}} +フィールドセレクターは本質的にリソースの*フィルター*となります。デフォルトでは、セレクター/フィルターが指定されていない場合は、全てのタイプのリソースが取得されます。これは、下記の2つの`kubectl`クエリが同じであることを意味します。 + +```shell +kubectl get pods +kubectl get pods --field-selector "" +``` +{{< /note >}} + +## サポートされているフィールド +サポートされているフィールドセレクターはKubernetesリソースタイプによって異なります。全てのリソースタイプは`metadata.name`と`metadata.namespace`フィールドをサポートしています。サポートされていないフィールドセレクターの使用をするとエラーとなります。 +例えば以下の通りです。 + +```shell +kubectl get ingress --field-selector foo.bar=baz +``` + +``` +Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace" +``` + +## サポートされているオペレーター + +ユーザーは、`=`、`==`や`!=`といったオペレーターをフィールドセレクターと組み合わせて使用できます。(`=`と`==`は同義) +例として、下記の`kubectl`コマンドは`default`ネームスペースに属していない全てのKubernetes Serviceを選択します。 + +```shell +kubectl get services --field-selector metadata.namespace!=default +``` + +## 連結されたセレクター +[ラベル](/docs/concepts/overview/working-with-objects/labels)や他のセレクターと同様に、フィールドセレクターはコンマ区切りのリストとして連結することができます。 +下記の`kubectl`コマンドは、`status.phase`が`Runnning`でなく、かつ`spec.restartPolicy`フィールドが`Always`に等しいような全てのPodを選択します。 + +```shell +kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always +``` + +## 複数のリソースタイプ + +ユーザーは複数のリソースタイプにまたがったフィールドセレクターを利用できます。 +下記の`kubectl`コマンドは、`default`ネームスペースに属していない全てのStatefulSetとServiceを選択します。 + +```shell +kubectl get statefulsets,services --field-selector metadata.namespace!=default +``` \ No newline at end of file diff --git a/content/ja/docs/concepts/overview/working-with-objects/kubernetes-objects.md b/content/ja/docs/concepts/overview/working-with-objects/kubernetes-objects.md new file mode 100644 index 0000000000000..336d4af7ce0f9 --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/kubernetes-objects.md @@ -0,0 +1,72 @@ +--- +title: Kubernetesオブジェクトを理解する +content_template: templates/concept +weight: 10 +card: + name: concepts + weight: 40 +--- + +{{% capture overview %}} +このページでは、KubernetesオブジェクトがKubernetes APIでどのように表現されているか、またそれらを`.yaml`フォーマットでどのように表現するかを説明します。 +{{% /capture %}} + +{{% capture body %}} +## Kubernetesオブジェクトを理解する + +*Kubernetesオブジェクト* は、Kubernetes上で永続的なエンティティです。Kubernetesはこれらのエンティティを使い、クラスターの状態を表現します。具体的に言うと、下記のような内容が表現出来ます: + +* どのようなコンテナ化されたアプリケーションが稼働しているか(またそれらはどのノード上で動いているか) +* それらのアプリケーションから利用可能なリソース +* アプリケーションがどのように振る舞うかのポリシー、例えば再起動、アップグレード、耐障害性ポリシーなど + +Kubernetesオブジェクトは"意図の記録"です。一度オブジェクトを作成すると、Kubernetesは常にそのオブジェクトが存在し続けるように動きます。オブジェクトを作成することで、Kubernetesに対し効果的にあなたのクラスターのワークロードがこのようになっていて欲しいと伝えているのです。これが、あなたのクラスターの**望ましい状態**です。 + +Kubernetesオブジェクトを操作するには、作成、変更、または削除に関わらず[Kubernetes API](/docs/concepts/overview/kubernetes-api/)を使う必要があるでしょう。例えば`kubectl`コマンドラインインターフェースを使った場合、このCLIが処理に必要なKubernetes API命令を、あなたに代わり発行します。あなたのプログラムから[クライアントライブラリ](/docs/reference/using-api/client-libraries/)を利用し、直接Kubernetes APIを利用することも可能です。 + +### オブジェクトのspec(仕様)とstatus(状態) + +全てのKubernetesオブジェクトは、オブジェクトの設定を管理する2つの入れ子になったオブジェクトのフィールドを持っています。それは *spec* オブジェクトと *status* オブジェクトです。*spec* オブジェクトはあなたが指定しなければならない項目で、オブジェクトの *望ましい状態* を記述し、オブジェクトに持たせたい特徴を表現します。*status* オブジェクトはオブジェクトの *現在の状態* を示し、その情報はKubernetesから与えられ、更新されます。常に、Kubernetesコントロールプレーンは、あなたから指定された望ましい状態と現在の状態が一致するよう積極的に管理をします。 + +例えば、KubernetesのDeploymentはクラスター上で稼働するアプリケーションを表現するオブジェクトです。Deploymentを作成するとき、アプリケーションの複製を3つ稼働させるようDeploymentのspecで指定するかもしれません。KubernetesはDeploymentのspecを読み取り、指定されたアプリケーションを3つ起動し、現在の状態がspecに一致するようにします。もしこれらのインスタンスでどれかが落ちた場合(statusが変わる)、Kubernetesはspecと、statusの違いに反応し、修正しようとします。この場合は、落ちたインスタンスの代わりのインスタンスを立ち上げます。 + +spec、status、metadataに関するさらなる情報は、[Kubernetes API Conventions](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md)をご確認ください。 + +### Kubernetesオブジェクトを記述する + +Kubernetesでオブジェクトを作成する場合、オブジェクトの基本的な情報(例えば名前)と共に、望ましい状態を記述したオブジェクトのspecを渡さなければいけません。KubernetesAPIを利用しオブジェクトを作成する場合(直接APIを呼ぶか、`kubectl`を利用するかに関わらず)、APIリクエストはそれらの情報をJSON形式でリクエストのBody部に含んでいなければなりません。 + +ここで、KubernetesのDeploymentに必要なフィールドとオブジェクトのspecを記載した`.yaml`ファイルの例を示します: + +{{< codenew file="application/deployment.yaml" >}} + +上に示した`.yaml`ファイルを利用してDeploymentを作成するには、`kubectl`コマンドラインインターフェースに含まれている[`kubectl apply`](/docs/reference/generated/kubectl/kubectl-commands#apply)コマンドに`.yaml`ファイルを引数に指定し、実行します。ここで例を示します: + +```shell +kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record +``` + +出力結果は、下記に似た形になります: + +```shell +deployment.apps/nginx-deployment created +``` + +### 必須フィールド + +Kubernetesオブジェクトを`.yaml`ファイルに記載して作成する場合、下記に示すフィールドに値をセットしておく必要があります: + +* `apiVersion` - どのバージョンのKubernetesAPIを利用してオブジェクトを作成するか +* `kind` - どの種類のオブジェクトを作成するか +* `metadata` - オブジェクトを一意に特定するための情報、`name`、string、UID、また任意の`namespace`が該当する + +またオブジェクトの`spec`の値も指定する必要があります。`spec`の正確なフォーマットは、Kubernetesオブジェクトごとに異なり、オブジェクトごとに特有な入れ子のフィールドを持っています。[Kubernetes API リファレンス](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/)が、Kubernetesで作成出来る全てのオブジェクトに関するspecのフォーマットを探すのに役立ちます。 +例えば、`Pod`オブジェクトに関する`spec`のフォーマットは[こちら](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core)を、また`Deployment`オブジェクトに関する`spec`のフォーマットは[こちら](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#deploymentspec-v1-apps)をご確認ください。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +* 最も重要、かつ基本的なKubernetesオブジェクト群を学びましょう、例えば、[Pod](/docs/concepts/workloads/pods/pod-overview/)です。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/overview/working-with-objects/labels.md b/content/ja/docs/concepts/overview/working-with-objects/labels.md new file mode 100644 index 0000000000000..7451cf35c252e --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/labels.md @@ -0,0 +1,219 @@ +--- +title: ラベル(Labels)とセレクター(Selectors) +content_template: templates/concept +weight: 40 +--- + +{{% capture overview %}} + +_ラベル(Labels)_ はPodなどのオブジェクトに割り当てられたキーとバリューのペアです。 +ラベルはユーザーに関連した意味のあるオブジェクトの属性を指定するために使われることを目的としています。しかしKubernetesのコアシステムに対して直接的にその意味を暗示するものではありません。 +ラベルはオブジェクトのサブセットを選択し、グルーピングするために使うことができます。また、ラベルはオブジェクトの作成時に割り当てられ、その後いつでも追加、修正ができます。 +各オブジェクトはキーとバリューのラベルのセットを定義できます。各キーは、単一のオブジェクトに対してはユニークである必要があります。 +```json +"metadata": { + "labels": { + "key1" : "value1", + "key2" : "value2" + } +} +``` + +ラベルは効率的な検索・閲覧を可能にし、UIやCLI上での利用に最適です。 +識別用途でない情報は、[アノテーション](/docs/concepts/overview/working-with-objects/annotations/)を用いて記録されるべきです。 + +{{% /capture %}} + + +{{% capture body %}} + +## ラベルを使う動機 + +ラベルは、クライアントにそのマッピング情報を保存することを要求することなく、ユーザー独自の組織構造をシステムオブジェクト上で疎結合にマッピングできます。 + +サービスデプロイメントとバッチ処理のパイプラインは多くの場合、多次元のエンティティとなります(例: 複数のパーティション、Deployment、リリーストラック、ティアー、ティアー毎のマイクロサービスなど) +管理は分野横断的な操作が必要になることが多く、それによって厳密な階層表現、特にユーザーによるものでなく、インフラストラクチャーによって定義された厳格な階層のカプセル化が破られます。 + +ラベルの例: + + * `"release" : "stable"`, `"release" : "canary"` + * `"environment" : "dev"`, `"environment" : "qa"`, `"environment" : "production"` + * `"tier" : "frontend"`, `"tier" : "backend"`, `"tier" : "cache"` + * `"partition" : "customerA"`, `"partition" : "customerB"` + * `"track" : "daily"`, `"track" : "weekly"` + +これらは単によく使われるラベルの例です。ユーザーは自由に規約を決めることができます。 +ラベルのキーは、ある1つのオブジェクトに対してユニークである必要があることは覚えておかなくてはなりません。 + +## 構文と文字セット + +ラベルは、キーとバリューのベアです。正しいラベルキーは2つのセグメントを持ちます。 +それは`/`によって分割されたオプショナルなプレフィックスと名前です。 +名前セグメントは必須で、63文字以下である必要があり、文字列の最初と最後は英数字(`[a-z0-9A-Z]`)で、文字列の間ではこれに加えてダッシュ(`-`)、アンダースコア(`_`)、ドット(`.`)を使うことができます。 +プレフィックスはオプションです。もしプレフィックスが指定されていた場合、プレフィックスはDNSサブドメイン形式である必要があり、それはドット(`.`)で区切られたDNSラベルのセットで、253文字以下である必要があり、最後にスラッシュ(`/`)が続きます。 + +もしプレフィックスが省略された場合、ラベルキーはそのユーザーに対してプライベートであると推定されます。 +エンドユーザーのオブジェクトにラベルを追加するような自動化されたシステムコンポーネント(例: `kube-scheduler` `kube-controller-manager` `kube-apiserver` `kubectl`やその他のサードパーティツール)は、プレフィックスを指定しなくてはなりません。 + +`kubernetes.io/`と`k8s.io/`プレフィックスは、Kubernetesコアコンポーネントのために予約されています。 + +正しいラベル値は63文字以下の長さで、空文字か、もしくは開始と終了が英数字(`[a-z0-9A-Z]`)で、文字列の間がダッシュ(`-`)、アンダースコア(`_`)、ドット(`.`)と英数字である文字列を使うことができます。 + +## ラベルセレクター + +[名前とUID](/docs/user-guide/identifiers)とは異なり、ラベルはユニーク性を提供しません。通常、多くのオブジェクトが同じラベルを保持することを想定します。 + +*ラベルセレクター* を介して、クライアントとユーザーはオブジェクトのセットを指定できます。ラベルセレクターはKubernetesにおいてコアなグルーピング機能となります。 + +Kubernetes APIは現在2タイプのセレクターをサポートしています。 +それは*等価ベース(equality-based)* と*集合ベース(set-based)* です。 +単一のラベルセレクターは、コンマ区切りの複数の*要件(requirements)* で構成されています。 +複数の要件がある場合、コンマセパレーターは論理積 _AND_(`&&`)オペレーターと同様にふるまい、全ての要件を満たす必要があります。 + +空文字の場合や、指定なしのセレクターに関するセマンティクスは、コンテキストに依存します。 +そしてセレクターを使うAPIタイプは、それらのセレクターの妥当性とそれらが示す意味をドキュメントに記載するべきです。 + +{{< note >}} +ReplicaSetなど、いくつかのAPIタイプにおいて、2つのインスタンスのラベルセレクターは単一の名前空間において重複してはいけません。重複していると、コントローラがそれらのラベルセレクターがコンフリクトした操作とみなし、どれだけの数のレプリカを稼働させるべきか決めることができなくなります。 +{{< /note >}} + +### *等価ベース(Equality-based)* の要件(requirement) + +*等価ベース(Equality-based)* もしくは*不等ベース(Inequality-based)* の要件は、ラベルキーとラベル値によるフィルタリングを可能にします。 +要件に一致したオブジェクトは、指定されたラベルの全てを満たさなくてはいけませんが、それらのオブジェクトはさらに追加のラベルも持つことができます。 +そして等価ベースの要件においては、3つの種類のオペレーターの利用が許可されています。`=`、`==`、`!=`となります。 +最初の2つのオペレーター(`=`、`==`)は*等価(Equality)* を表現し(この2つは単なる同義語)、最後の1つ(`!=`)は*不等(Inequality)* を意味します。 +例えば + +``` +environment = production +tier != frontend +``` + +最初の例は、キーが`environment`で、値が`production`である全てのリソースを対象にします。 +次の例は、キーが`tier`で、値が`frontend`とは異なるリソースと、`tier`という名前のキーを持たない全てのリソースを対象にします。 +コンマセパレーター`,`を使って、`production`の中から、`frontend`のものを除外するようにフィルターすることもできます。 +`environment=production,tier!=frontend` + +等価ベースのラベル要件の1つの使用シナリオとして、PodにおけるNodeの選択要件を指定するケースがあります。 +例えば、下記のサンプルPodは、ラベル`accelerator=nvidia-tesla-p100`をもったNodeを選択します。 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: cuda-test +spec: + containers: + - name: cuda-test + image: "k8s.gcr.io/cuda-vector-add:v0.1" + resources: + limits: + nvidia.com/gpu: 1 + nodeSelector: + accelerator: nvidia-tesla-p100 +``` + +### *集合ベース(Set-based)* の要件(requirement) + +*集合ベース(Set-based)* のラベルの要件は値のセットによってキーをフィルタリングします。 +`in`、`notin`、`exists`の3つのオペレーターをサポートしています(キーを特定するのみ)。 + +例えば: +``` +environment in (production, qa) +tier notin (frontend, backend) +partition +!partition +``` + +最初の例では、キーが`environment`で、値が`production`か`qa`に等しいリソースを全て選択します。 +第2の例では、キーが`tier`で、値が`frontend`と`backend`以外のもの、そして`tier`キーを持たないリソースを全て選択します。 +第3の例では、`partition`というキーをもつラベルを全て選択し、値はチェックしません。 +第4の例では、`partition`というキーを持たないラベルを全て選択し、値はチェックしません。 +同様に、コンマセパレーターは、_AND_ オペレーターと同様にふるまいます。そのため、`partition`と`environment`キーの値がともに`qa`でないラベルを選択するには、`partition,environment notin (qa)`と記述することで可能です。 +*集合ベース* のラベルセレクターは、`environment=production`という記述が`environment in (production)`と等しいため、一般的な等価形式となります。 `!=`と`notin`も同様に等価となります。 + +*集合ベース* の要件は、*等価ベース* の要件と混在できます。 +例えば: +`partition in (customerA, customerB),environment!=qa`. + +## API + +### LISTとWATCHによるフィルタリング + +LISTとWATCHオペレーションは、単一のクエリパラメータを使うことによって返されるオブジェクトのセットをフィルターするためのラベルセレクターを指定できます。 +*集合ベース* と*等価ベース* のどちらの要件も許可されています(ここでは、URLクエリストリング内で出現します)。 + + * *等価ベース* での要件: `?labelSelector=environment%3Dproduction,tier%3Dfrontend` + * *集合ベース* での要件: `?labelSelector=environment+in+%28production%2Cqa%29%2Ctier+in+%28frontend%29` + +上記の2つの形式のラベルセレクターはRESTクライアントを介してリストにしたり、もしくは確認するために使われます。 +例えば、`kubectl`によって`apiserver`をターゲットにし、*等価ベース* の要件でフィルターすると以下のように書けます。 + +```shell +kubectl get pods -l environment=production,tier=frontend +``` + +もしくは、*集合ベース* の要件を指定すると以下のようになります。 +```shell +kubectl get pods -l 'environment in (production),tier in (frontend)' +``` + +すでに言及したように、*集合ベース* の要件は、*等価ベース* の要件より表現力があります。 +例えば、値に対する_OR_ オペレーターを実装して以下のように書けます。 + +```shell +kubectl get pods -l 'environment in (production, qa)' +``` + +もしくは、_exists_ オペレーターを介して、否定マッチングによる制限もできます。 + +```shell +kubectl get pods -l 'environment,environment notin (frontend)' +``` + +### APIオブジェクトに参照を設定する +[`Service`](/docs/user-guide/services) と [`ReplicationController`](/docs/user-guide/replication-controller)のような、いくつかのKubernetesオブジェクトでは、ラベルセレクターを[Pod](/docs/user-guide/pods)のような他のリソースのセットを指定するのにも使われます。 + +#### ServiceとReplicationController +`Service`が対象とするPodの集合は、ラベルセレクターによって定義されます。 +同様に、`ReplicationController`が管理するべきPod数についてもラベルセレクターを使って定義されます。 + +それぞれのオブジェクトに対するラベルセレクターはマップを使って`json`もしくは`yaml`形式のファイルで定義され、*等価ベース* のセレクターのみサポートされています。 + +```json +"selector": { + "component" : "redis", +} +``` +もしくは + +```yaml +selector: + component: redis +``` + +このセレクター(それぞれ`json`または`yaml`形式)は、`component=redis`または`component in (redis)`と等価です。 + +#### *集合ベース* の要件指定をサポートするリソース + +[`Job`](/docs/concepts/jobs/run-to-completion-finite-workloads/)や[`Deployment`](/docs/concepts/workloads/controllers/deployment/)、[`ReplicaSet`](/docs/concepts/workloads/controllers/replicaset/)や[`DaemonSet`](/docs/concepts/workloads/controllers/daemonset/)などの比較的新しいリソースは、*集合ベース* での要件指定もサポートしています。 +```yaml +selector: + matchLabels: + component: redis + matchExpressions: + - {key: tier, operator: In, values: [cache]} + - {key: environment, operator: NotIn, values: [dev]} +``` + +`matchLabels`は、`{key,value}`ペアのマップです。`matchLabels`内の単一の`{key,value}`は、`matchExpressions`の要素と等しく、それは、`key`フィールドがキー名で、`operator`が"In"で、`values`配列は単に"値"を保持します。 +`matchExpressions`はPodセレクター要件のリストです。対応しているオペレーターは`In`、`NotIn`、`Exists`と`DoesNotExist`です。`values`のセットは、`In`と`NotIn`オペレーターにおいては空文字を許容しません。 +`matchLabels`と`matchExpressions`の両方によって指定された全ての要件指定はANDで判定されます。つまり要件にマッチするには指定された全ての要件を満たす必要があります。 + +#### Nodeのセットを選択する +ラベルを選択するための1つのユースケースはPodがスケジュールできるNodeのセットを制限することです。 +さらなる情報に関しては、[Node選定](/docs/concepts/configuration/assign-pod-node/) のドキュメントを参照してください。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/overview/working-with-objects/names.md b/content/ja/docs/concepts/overview/working-with-objects/names.md new file mode 100644 index 0000000000000..b8762cb33c9b5 --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/names.md @@ -0,0 +1,30 @@ +--- +reviewers: +title: 名前 +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +KubernetesのREST API内の全てのオブジェクトは、名前とUIDで明確に識別されます。 + +ユーザーが付与する一意ではない属性については、Kubernetesが[ラベル](/docs/user-guide/labels)と[アノテーション](/docs/concepts/overview/working-with-objects/annotations/)を付与します。 + +名前とUIDに関する正確な構文については、[識別子デザインドキュメント](https://git.k8s.io/community/contributors/design-proposals/architecture/identifiers.md)を参照してください。 + +{{% /capture %}} + +{{% capture body %}} + +## 名前 + +{{< glossary_definition term_id="name" length="all" >}} + +慣例的に、Kubernetesリソースの名前は最長253文字で、かつ英小文字、数字、また`-`、`.`から構成します。しかし、特定のリソースはより具体的な制限があります。 + +## UID + +{{< glossary_definition term_id="uid" length="all" >}} + +{{% /capture %}} diff --git a/content/ja/docs/concepts/overview/working-with-objects/namespaces.md b/content/ja/docs/concepts/overview/working-with-objects/namespaces.md new file mode 100644 index 0000000000000..8e21224587f0e --- /dev/null +++ b/content/ja/docs/concepts/overview/working-with-objects/namespaces.md @@ -0,0 +1,100 @@ +--- +title: Namespace(名前空間) +content_template: templates/concept +weight: 30 +--- + +{{% capture overview %}} + +Kubernetesは、同一の物理クラスター上で複数の仮想クラスターの動作をサポートします。 +この仮想クラスターをNamespaceと呼びます。 + +{{% /capture %}} + + +{{% capture body %}} + +## 複数のNamespaceを使う時 + +Namespaceは、複数のチーム・プロジェクトにまたがる多くのユーザーがいる環境での使用を目的としています。 +数人から数十人しかユーザーのいないクラスターに対して、あなたはNamespaceを作成したり、考える必要は全くありません。 +Kubernetesが提供するNamespaceの機能が必要となった時に、Namespaceの使用を始めてください。 + +Namespaceは名前空間のスコープを提供します。リソース名は単一のNamespace内ではユニークである必要がありますが、Namespace全体ではその必要はありません。 + +Namespaceは、複数のユーザーの間でクラスターリソースを分割する方法です。(これは[リソースクォータ](/docs/concepts/policy/resource-quotas/)を介して分割します。) + +Kubernetesの将来的なバージョンにおいて、同一のNamespace内のオブジェクトは、デフォルトで同一のアクセスコントロールポリシーが適用されます。 + +同じアプリケーションの異なるバージョンなど、少し違うリソースをただ分割するだけに、複数のNamespaceを使う必要はありません。 +同一のNamespace内でリソースを区別するためには[ラベル](/docs/user-guide/labels)を使用してください。 + +## Namespaceを利用する + +Namespaceの作成と削除方法は[Namespaceの管理ガイドドキュメント](/docs/admin/namespaces)に記載されています。 + +### Namespaceの表示 + +ユーザーは、以下の方法で単一クラスター内の現在のNamespaceの一覧を表示できます。 + +```shell +kubectl get namespaces +``` +``` +NAME STATUS AGE +default Active 1d +kube-system Active 1d +kube-public Active 1d +``` + +Kubernetesの起動時には3つの初期Namespaceが作成されています。 + + * `default` 他にNamespaceを持っていないオブジェクトのためのデフォルトNamespace + * `kube-system` Kubernetesシステムによって作成されたオブジェクトのためのNamespace + * `kube-public` このNamespaceは自動的に作成され、全てのユーザーから読み取り可能です。(認証されていないユーザーも含みます。) + このNamespaceは、リソースをクラスター全体を通じてパブリックに表示・読み取り可能にするため、ほとんどクラスターによって使用される用途で予約されます。 このNamespaceのパブリックな側面は単なる慣例であり、要件ではありません。 + +### Namespaceの設定 + +一時的な要求のためにNamespaceを設定したい場合、`--namespace`フラグを使用します。 +例: + +```shell +kubectl --namespace= run nginx --image=nginx +kubectl --namespace= get pods +``` + +### Namespace設定の永続化 + +ユーザーはあるコンテキストのその後のコマンドで使うために、コンテキスト内で永続的にNamespaceを保存できます。 + +```shell +kubectl config set-context $(kubectl config current-context) --namespace= +# Validate it +kubectl config view | grep namespace: +``` + +## NamespaceとDNS + +ユーザーが[Service](/docs/user-guide/services)を作成するとき、Serviceは対応する[DNSエントリ](/docs/concepts/services-networking/dns-pod-service/)を作成します。 +このエントリは`..svc.cluster.local`という形式になり,これはもしあるコンテナがただ``を指定していた場合、Namespace内のローカルのServiceに対して名前解決されます。 +これはデベロップメント、ステージング、プロダクションといって複数のNamespaceをまたいで同じ設定を使う時に効果的です。 +もしユーザーがNamespaceをまたいでアクセスしたい時、 完全修飾ドメイン名(FQDN)を指定する必要があります。 + +## すべてのオブジェクトはNamespaceに属しているとは限らない + +ほとんどのKubernetesリソース(例えば、Pod、Service、ReplicationControllerなど)はいくつかのNamespaceにあります。 +しかしNamespaceのリソースそれ自体は単一のNamespace内にありません。 +そして[Node](/docs/admin/node)やPersistentVolumeのような低レベルのリソースはどのNamespaceにも属していません。 + +どのKubernetesリソースがNamespaceに属しているか、属していないかを見るためには、以下のコマンドで確認できます。 + +```shell +# Namespaceに属しているもの +kubectl api-resources --namespaced=true + +# Namespaceに属していないもの +kubectl api-resources --namespaced=false +``` + +{{% /capture %}} diff --git a/content/ja/docs/concepts/services-networking/_index.md b/content/ja/docs/concepts/services-networking/_index.md new file mode 100755 index 0000000000000..eea2c65b33e01 --- /dev/null +++ b/content/ja/docs/concepts/services-networking/_index.md @@ -0,0 +1,5 @@ +--- +title: "Services, Load Balancing, and Networking" +weight: 60 +--- + diff --git a/content/ja/docs/concepts/services-networking/dns-pod-service.md b/content/ja/docs/concepts/services-networking/dns-pod-service.md new file mode 100644 index 0000000000000..558f1d7b033ec --- /dev/null +++ b/content/ja/docs/concepts/services-networking/dns-pod-service.md @@ -0,0 +1,203 @@ +--- +reviewers: +title: ServiceとPodに対するDNS +content_template: templates/concept +weight: 20 +--- +{{% capture overview %}} +このページではKubernetesによるDNSサポートについて概観します。 +{{% /capture %}} + +{{% capture body %}} + +## イントロダクション + +KubernetesのDNSはクラスター上でDNS PodとServiceをスケジュールし、DNSの名前解決をするために各コンテナに対してDNS ServiceのIPを使うようにKubeletを設定します。 + +### 何がDNS名を取得するか + +クラスター内(DNSサーバーそれ自体も含む)で定義された全てのServiceはDNS名を割り当てられます。デフォルトでは、クライアントPodのDNSサーチリストはPod自身のネームスペースと、クラスターのデフォルトドメインを含みます。 +下記の例でこの仕組みを説明します。 + +Kubernetesの`bar`というネームスペース内で`foo`という名前のServiceがあると仮定します。`bar`ネームスペース内で稼働しているPodは、`foo`に対してDNSクエリを実行するだけでこのServiceを探すことができます。`bar`とは別の`quux`ネームスペース内で稼働しているPodは、`foo.bar`に対してDNSクエリを実行するだけでこのServiceを探すことができます。 + +下記のセクションでは、サポートされているレコードタイプとレイアウトについて詳しくまとめています。 +うまく機能する他のレイアウト、名前、またはクエリーは、実装の詳細を考慮し、警告なしに変更されることがあります。 +最新の仕様に関する詳細は、[KubernetesにおけるDNSベースのServiceディスカバリ](https://github.com/kubernetes/dns/blob/master/docs/specification.md)を参照ください。 + +## Service + +### Aレコード + +"通常の"(Headlessでない)Serviceは、`my-svc.my-namespace.svc.cluster.local`という形式のDNS Aレコードを割り当てられます。このAレコードはそのServiceのClusterIPへと名前解決されます。 + +"Headless"(ClusterIPなしの)Serviceもまた`my-svc.my-namespace.svc.cluster.local`という形式のDNS Aレコードを割り当てられます。通常のServiceとは異なり、このAレコードはServiceによって選択されたPodのIPの一覧へと名前解決されます。クライアントはこの一覧のIPを使うか、その一覧から標準のラウンドロビン方式によって選択されたIPを使います… + +### SRVレコード + +SRVレコードは、通常のServiceもしくは[Headless +Services](/docs/concepts/services-networking/service/#headless-services)の一部である名前付きポート向けに作成されます。それぞれの名前付きポートに対して、そのSRVレコードは`_my-port-name._my-port-protocol.my-svc.my-namespace.svc.cluster.local`という形式となります。 +通常のServiceに対しては、このSRVレコードは`my-svc.my-namespace.svc.cluster.local`という形式のドメイン名とポート番号へ名前解決します。 +Headless Serviceに対しては、このSRVレコードは複数の結果を返します。それはServiceの背後にある各Podの1つを返すのと、`auto-generated-name.my-svc.my-namespace.svc.cluster.local`という形式のPodのドメイン名とポート番号を含んだ結果を返します。 + +## Pod + +### Aレコード + +DNSが有効なとき、Podは"`pod-ip-address.my-namespace.pod.cluster.local`"という形式のAレコードを割り当てられます。 + +例えば、`default`ネームスペース内で`cluster.local`というDNS名を持ち、`1.2.3.4`というIPを持ったPodは次の形式のエントリーを持ちます。: `1-2-3-4.default.pod.cluster.local`。 + +### Podのhostnameとsubdomainフィールド + +現在、Podが作成されたとき、そのPodのホスト名はPodの`metadata.name`フィールドの値となります。 + +Pod Specは、オプションである`hostname`フィールドを持ち、Podのホスト名を指定するために使うことができます。`hostname`が指定されたとき、`hostname`はそのPodの名前よりも優先されます。例えば、`hostname`フィールドが"`my-host`"にセットされたPodを考えると、Podはそのhostnameが"`my-host`"に設定されます。 + +Pod Specはまた、オプションである`subdomain`フィールドも持ち、Podのサブドメイン名を指定するために使うことができます。例えば、"`my-namespace`"というネームスペース内で`hostname`が`foo`とセットされていて、`subdomain`が`bar`とセットされているPodの場合、そのPodは"`foo.bar.my-namespace.svc.cluster.local`"という名前の完全修飾ドメイン名(FQDN)を持つことになります。 + +例: + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: default-subdomain +spec: + selector: + name: busybox + clusterIP: None + ports: + - name: foo # 実際は、portは必要ありません。 + port: 1234 + targetPort: 1234 +--- +apiVersion: v1 +kind: Pod +metadata: + name: busybox1 + labels: + name: busybox +spec: + hostname: busybox-1 + subdomain: default-subdomain + containers: + - image: busybox:1.28 + command: + - sleep + - "3600" + name: busybox +--- +apiVersion: v1 +kind: Pod +metadata: + name: busybox2 + labels: + name: busybox +spec: + hostname: busybox-2 + subdomain: default-subdomain + containers: + - image: busybox:1.28 + command: + - sleep + - "3600" + name: busybox +``` + +もしそのPodと同じネームスペース内で、同じサブドメインを持ったHeadless Serviceが存在していた場合、クラスターのKubeDNSサーバーもまた、そのPodの完全修飾ドメイン名(FQDN)に対するAレコードを返します。 +例えば、"`busybox-1`"というホスト名で、"`default-subdomain`"というサブドメインを持ったPodと、そのPodと同じネームスペース内にある"`default-subdomain`"という名前のHeadless Serviceがあると考えると、そのPodは自身の完全修飾ドメイン名(FQDN)を"`busybox-1.default-subdomain.my-namespace.svc.cluster.local`"として扱います。DNSはそのPodのIPを指し示すAレコードを返します。"`busybox1`"と"`busybox2`"の両方のPodはそれぞれ独立したAレコードを持ちます。 + +そのエンドポイントオブジェクトはそのIPに加えて`hostname`を任意のエンドポイントアドレスに対して指定できます。 + +{{< note >}} +AレコードはPodの名前に対して作成されないため、`hostname`はPodのAレコードが作成されるために必須となります。`hostname`を持たないが`subdomain`を持つようなPodは、そのPodのIPアドレスを指し示すHeadless Service(`default-subdomain.my-namespace.svc.cluster.local`)に対するAレコードのみ作成します。 +{{< /note >}} + +### PodのDNSポリシー + +DNSポリシーはPod毎に設定できます。現在のKubernetesでは次のようなPod固有のDNSポリシーをサポートしています。これらのポリシーはPod Specの`dnsPolicy`フィールドで指定されます。 + +- "`Default`": そのPodはPodが稼働しているNodeから名前解決の設定を継承します。詳細に関しては、[関連する議論](/docs/tasks/administer-cluster/dns-custom-nameservers/#inheriting-dns-from-the-node)を参照してください。 +- "`ClusterFirst`": "`www.kubernetes.io`"のようなクラスタードメインのサフィックスにマッチしないようなDNSクエリーは、Nodeから継承された上流のネームサーバーにフォワーディングされます。クラスター管理者は、追加のstubドメインと上流のDNSサーバーを設定できます。 +- "`ClusterFirstWithHostNet`": hostNetworkによって稼働しているPodに対しては、ユーザーは明示的にDNSポリシーを"`ClusterFirstWithHostNet`"とセットするべきです。 +- "`None`": この設定では、Kubernetesの環境からDNS設定を無視することができます。全てのDNS設定は、Pod Spec内の`dnsConfig`フィールドを指定して提供することになっています。下記のセクションの[Pod's DNS config](#pod-s-dns-config)を参照ください。 + +{{< note >}} +"Default"は、デフォルトのDNSポリシーではありません。もし`dnsPolicy`が明示的に指定されていない場合、"ClusterFirst"が使用されます。 +{{< /note >}} + +下記の例では、`hostNetwork`フィールドが`true`にセットされているため、`dnsPolicy`が"`ClusterFirstWithHostNet`"とセットされているPodを示します。 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: busybox + namespace: default +spec: + containers: + - image: busybox:1.28 + command: + - sleep + - "3600" + imagePullPolicy: IfNotPresent + name: busybox + restartPolicy: Always + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet +``` + +### PodのDNS設定 + +PodのDNS設定は、ユーザーがPodに対してそのDNS設定上でさらに制御するための手段を提供します。 + +`dnsConfig`フィールドはオプションで、どのような設定の`dnsPolicy`でも共に機能することができます。しかし、Podの`dnsPolicy`が"`None`"にセットされていたとき、`dnsConfig`フィールドは必ず指定されなくてはなりません。 + +下記の項目は、ユーザーが`dnsConfig`フィールドに指定可能なプロパティーとなります。 + +- `nameservers`: そのPodに対するDNSサーバーとして使われるIPアドレスのリストです。これは最大で3つのIPアドレスを指定することができます。Podの`dnsPolicy`が"`None`"に指定されていたとき、そのリストは最低1つのIPアドレスを指定しなければならず、もし指定されていなければ、それ以外の`dnsPolicy`の値の場合は、このプロパティーはオプションとなります。 +- `searches`: Pod内のホスト名のルックアップのためのDNSサーチドメインのリストです。このプロパティーはオプションです。指定されていたとき、このリストは選択されたDNSポリシーから生成されたサーチドメイン名のベースとなるリストにマージされます。重複されているドメイン名は削除されます。Kubernetesでは最大6つのサーチドメインの設定を許可しています。 +- `options`: `name`プロパティー(必須)と`value`プロパティー(オプション)を持つような各オプジェクトのリストで、これはオプションです。このプロパティー内の内容は指定されたDNSポリシーから生成されたオプションにマージされます。重複されたエントリーは削除されます。 + +下記のファイルはカスタムDNS設定を持ったPodの例です。 + +{{< codenew file="service/networking/custom-dns.yaml" >}} + +上記のPodが作成されたとき、`test`コンテナは、コンテナ内の`/etc/resolv.conf`ファイル内にある下記の内容を取得します。 + +``` +nameserver 1.2.3.4 +search ns1.svc.cluster.local my.dns.search.suffix +options ndots:2 edns0 +``` + +IPv6用のセットアップのためには、サーチパスとname serverは下記のようにセットアップするべきです。 + +``` +$ kubectl exec -it dns-example -- cat /etc/resolv.conf +nameserver fd00:79:30::a +search default.svc.cluster.local svc.cluster.local cluster.local +options ndots:5 +``` + +### DNS機能を利用可用なバージョン + +PodのDNS設定と"`None`"というDNSポリシーの利用可能なバージョンに関しては下記の通りです。 + +| k8s version | Feature support | +| :---------: |:-----------:| +| 1.14 | ステーブル | +| 1.10 | β版 (デフォルトで有効)| +| 1.9 | α版 | + +{{% /capture %}} + +{{% capture whatsnext %}} + +DNS設定の管理方法に関しては、[DNS Serviceの設定](/docs/tasks/administer-cluster/dns-custom-nameservers/) +を確認してください。 + +{{% /capture %}} + + diff --git a/content/ja/docs/concepts/storage/_index.md b/content/ja/docs/concepts/storage/_index.md new file mode 100755 index 0000000000000..7e0dd19b1251a --- /dev/null +++ b/content/ja/docs/concepts/storage/_index.md @@ -0,0 +1,5 @@ +--- +title: "Storage" +weight: 70 +--- + diff --git a/content/ja/docs/concepts/storage/dynamic-provisioning.md b/content/ja/docs/concepts/storage/dynamic-provisioning.md new file mode 100644 index 0000000000000..e2361e5e831a7 --- /dev/null +++ b/content/ja/docs/concepts/storage/dynamic-provisioning.md @@ -0,0 +1,90 @@ +--- +reviewers: +title: ボリュームの動的プロビジョニング(Dynamic Volume Provisioning) +content_template: templates/concept +weight: 40 +--- + +{{% capture overview %}} + +ボリュームの動的プロビジョニングにより、ストレージ用のボリュームをオンデマンドに作成することができます。 +動的プロビジョニングなしでは、クラスター管理者はクラウドプロバイダーまたはストレージプロバイダーに対して新規のストレージ用のボリュームと[`PersistentVolume`オブジェクト](/docs/concepts/storage/persistent-volumes/)を作成するように手動で指示しなければなりません。動的プロビジョニングの機能によって、クラスター管理者がストレージを事前にプロビジョンする必要がなくなります。その代わりに、ユーザーによってリクエストされたときに自動でストレージをプロビジョンします。 + +{{% /capture %}} + + +{{% capture body %}} + +## バックグラウンド + +ボリュームの動的プロビジョニングの実装は`storage.k8s.io`というAPIグループ内の`StorageClass`というAPIオブジェクトに基づいています。クラスター管理者は`StorageClass`オブジェクトを必要に応じていくつでも定義でき、各オブジェクトはボリュームをプロビジョンする*Volumeプラグイン* (別名*プロビジョナー*)と、プロビジョンされるときにプロビジョナーに渡されるパラメータを指定します。 +クラスター管理者はクラスター内で複数の種類のストレージ(同一または異なるストレージシステム)を定義し、さらには公開でき、それらのストレージはパラメータのカスタムセットを持ちます。この仕組みにおいて、エンドユーザーはストレージがどのようにプロビジョンされるか心配する必要がなく、それでいて複数のストレージオプションから選択できることを保証します。 + +StorageClassに関するさらなる情報は[Storage Class](/docs/concepts/storage/persistent-volumes/#storageclasses)を参照ください。 + +## 動的プロビジョニングを有効にする + +動的プロビジョニングを有効にするために、クラスター管理者はユーザーのために1つまたはそれ以上のStorageClassを事前に作成する必要があります。StorageClassオブジェクトは、動的プロビジョニングが実行されるときに、どのプロビジョナーが使用されるべきか、またどのようなパラメーターをプロビジョナーに渡すべきか定義します。 +下記のマニフェストでは標準的な永続化ディスクをプロビジョンする"slow"というStorageClassを作成します。 + +```yaml +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: slow +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-standard +``` + +下記のマニフェストではSSDを使った永続化ディスクをプロビジョンする"fast"というStorageClassを作成します。 + +```yaml +apiVersion: storage.k8s.io/v1 +kind: StorageClass +metadata: + name: fast +provisioner: kubernetes.io/gce-pd +parameters: + type: pd-ssd +``` + +## 動的プロビジョニングの使用 + +ユーザーは`PersistentVolumeClaim`リソース内でStorageClassを含むことで、動的にプロビジョンされたStorageをリクエストできます。Kubernetes v1.6以前では、この機能は`volume.beta.kubernetes.io/storage-class`アノテーションを介して使うことができました。しかしこのアノテーションではv1.6から廃止になりました。その代わりユーザーは現在では`PersistentVolumeClaim`オブジェクトの`storageClassName`を使う必要があります。このフィールドの値は、管理者によって設定された`StorageClass`の名前と一致しなければなりません([下記](#enabling-dynamic-provisioning)のセクションも参照ください)。 + +"fast"というStorageClassを選択するために、例としてユーザーは下記の`PersistentVolumeClaim`を作成します。 + +```yaml +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: claim1 +spec: + accessModes: + - ReadWriteOnce + storageClassName: fast + resources: + requests: + storage: 30Gi +``` + +このリソースによってSSDのような永続化ディスクが自動的にプロビジョンされます。このリソースが削除された時、そのボリュームは削除されます。 + +## デフォルトの挙動 + +動的プロビジョニングは、もしStorageClassが1つも指定されていないときに全てのPersistentVolumeClaimが動的にプロビジョンされるようにクラスター上で有効にできます。クラスター管理者は、下記を行うことによりこのふるまいを有効にできます。 + +- 1つの`StorageClass`オブジェクトを*default* としてマーキングする +- API Server上で[`DefaultStorageClass`管理コントローラー](/docs/reference/access-authn-authz/admission-controllers/#defaultstorageclass)を有効にする。 + +管理者は`StorageClass`に対して`storageclass.kubernetes.io/is-default-class`アノテーションをつけることで、デフォルトのStorageClassとしてマーキングできます。 +デフォルトの`StorageClass`がクラスター内で存在し、かつユーザーが`PersistentVolumeClaim`リソースで`storageClassName`を指定しなかった場合、`DefaultStorageClass`という管理コントローラーは`storageClassName`フィールドの値をデフォルトのStorageClassを指し示すように自動で追加します。 + +注意点として、クラスター上では最大1つしか*デフォルト* のStorageClassが指定できず、`storageClassName`を明示的に指定しない`PersistentVolumeClaim`は作成することもできません。 + +## トポロジーに関する注意 + +[マルチゾーン](/docs/setup/multiple-zones)クラスター内では、Podは単一のリージョン内のゾーンをまたいでしか稼働できません。シングルゾーンのStorageバックエンドはPodがスケジュールされるゾーン内でプロビジョンされる必要があります。これは[Volume割り当てモード](/docs/concepts/storage/storage-classes/#volume-binding-mode)を設定することにより可能となります。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/storage/volume-snapshot-classes.md b/content/ja/docs/concepts/storage/volume-snapshot-classes.md new file mode 100644 index 0000000000000..829bde8a2eff6 --- /dev/null +++ b/content/ja/docs/concepts/storage/volume-snapshot-classes.md @@ -0,0 +1,48 @@ +--- +reviewers: +title: VolumeSnapshotClass +content_template: templates/concept +weight: 30 +--- + +{{% capture overview %}} + +このドキュメントでは、Kubernetesにおける`VolumeSnapshotClass`のコンセプトについて説明します。 +関連する項目として、[Volumeのスナップショット](/docs/concepts/storage/volume-snapshots/)と[ストレージクラス](/docs/concepts/storage/storage-classes)も参照してください。 + +{{% /capture %}} + + +{{% capture body %}} + +## イントロダクション + +`StorageClass`はVolumeをプロビジョンするときに、ストレージの"クラス"に関する情報を記述する方法を提供します。それと同様に、`VolumeSnapshotClass`ではVolumeSnapshotをプロビジョンするときに、ストレージの"クラス"に関する情報を記述する方法を提供します。 + +## VolumeSnapshotClass リソース + +各`VolumeSnapshotClass`は`snapshotter`と`parameters`フィールドを含み、それらは、そのクラスに属する`VolumeSnapshot`が動的にプロビジョンされるときに使われます。 + +`VolumeSnapshotClass`オブジェクトの名前は重要であり、それはユーザーがどのように特定のクラスをリクエストできるかを示したものです。管理者は初めて`VolumeSnapshotClass`オブジェクトを作成するときに、その名前と他のパラメーターをセットし、そのオブジェクトは一度作成されるとそのあと更新することができません。 + +管理者は、バインド対象のクラスを1つもリクエストしないようなVolumeSnapshotのために、デフォルトの`VolumeSnapshotClass`を指定することができます。 + +```yaml +apiVersion: snapshot.storage.k8s.io/v1alpha1 +kind: VolumeSnapshotClass +metadata: + name: csi-hostpath-snapclass +snapshotter: csi-hostpath +parameters: +``` + +### Snapshotter + +VolumeSnapshotClassは、VolumeSnapshotをプロビジョンするときに何のCSIボリュームプラグインを使うか決定するための`snapshotter`フィールドを持っています。このフィールドは必須となります。 + +## Parameters + +VolumeSnapshotClassは、そのクラスに属するVolumeSnapshotを指定するパラメータを持っています。 +`snapshotter`に応じて様々なパラメータを使用できます。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/_index.md b/content/ja/docs/concepts/workloads/_index.md new file mode 100644 index 0000000000000..ca394ebd0029d --- /dev/null +++ b/content/ja/docs/concepts/workloads/_index.md @@ -0,0 +1,5 @@ +--- +title: "Workloads" +weight: 50 +--- + diff --git a/content/ja/docs/concepts/workloads/controllers/_index.md b/content/ja/docs/concepts/workloads/controllers/_index.md new file mode 100644 index 0000000000000..6aaa7405b532c --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/_index.md @@ -0,0 +1,5 @@ +--- +title: "Controllers" +weight: 20 +--- + diff --git a/content/ja/docs/concepts/workloads/controllers/cron-jobs.md b/content/ja/docs/concepts/workloads/controllers/cron-jobs.md new file mode 100644 index 0000000000000..2d896a96101f3 --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/cron-jobs.md @@ -0,0 +1,46 @@ +--- +title: CronJob +content_template: templates/concept +weight: 80 +--- + +{{% capture overview %}} + +_CronJob_ は時刻ベースのスケジュールによって[Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/)を作成します。 + +_CronJob_ オブジェクトとは _crontab_ (cron table)ファイルでみられる一行のようなものです。 +[Cron](https://ja.wikipedia.org/wiki/Cron)形式で記述された指定のスケジュールの基づき、定期的にジョブが実行されます。 + +{{< note >}} +すべての**CronJob**`スケジュール`: 時刻はジョブが開始されたマスタータイムゾーンに基づいています。 +{{< /note >}} + +cronジョブを作成し、実行するインストラクション、または、cronジョブ仕様ファイルのサンプルについては、[Running automated tasks with cron jobs](/docs/tasks/job/automated-tasks-with-cron-jobs)をご覧ください。 + +{{% /capture %}} + +{{% capture body %}} + +## CronJobの制限 + +cronジョブは一度のスケジュール実行につき、 _おおよそ_ 1つのジョブオブジェクトを作成します。ここで _おおよそ_ と言っているのは、ある状況下では2つのジョブが作成される、もしくは1つも作成されない場合があるためです。通常、このようなことが起こらないようになっていますが、完全に防ぐことはできません。したがって、ジョブは _冪等_ であるべきです。 + +`startingDeadlineSeconds`が大きな値、もしくは設定されていない(デフォルト)、そして、`concurrencyPolicy`を`Allow`に設定している場合には、少なくとも一度、ジョブが実行されることを保証します。 + +最後にスケジュールされた時刻から現在までの間に、CronJobコントローラーはどれだけスケジュールが間に合わなかったのかをCronJobごとにチェックします。もし、100回以上スケジュールが失敗していると、ジョブは開始されずに、ログにエラーが記録されます。 + +```` +Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew. +```` + +`startingDeadlineSeconds`フィールドが設定されると(`nil`ではない)、最後に実行された時刻から現在までではなく、`startingDeadlineSeconds`の値から現在までで、どれだけジョブを逃したのかをコントローラーが数えます。 `startingDeadlineSeconds`が`200`の場合、過去200秒間にジョブが失敗した回数を記録します。 + +スケジュールされた時間にCronJobが作成できないと、失敗したとみなされます。たとえば、`concurrencyPolicy`が`Forbid`に設定されている場合、前回のスケジュールがまだ実行中にCronJobをスケジュールしようとすると、CronJobは作成されません。 + +例として、CronJobが`08:30:00`を開始時刻として1分ごとに新しいJobをスケジュールするように設定され、`startingDeadlineSeconds`フィールドが設定されていない場合を想定します。`startingDeadlineSeconds`のデフォルト値は`100`秒です。CronJobコントローラーが`08:29:00` から`10:21:00`の間にダウンしていた場合、スケジューリングを逃したジョブの数が100を超えているため、ジョブは開始されません。 + +このコンセプトを更に掘り下げるために、CronJobが`08:30:00`から1分ごとに新しいJobを作成し、`startingDeadlineSeconds`が200秒に設定されている場合を想定します。CronJobコントローラーが前回の例と同じ期間(`08:29:00` から`10:21:00`まで)にダウンしている場合でも、10:22:00時点でJobはまだ動作しています。このようなことは、過去200秒間(言い換えると、3回の失敗)に何回スケジュールが間に合わなかったをコントローラーが確認するときに発生します。これは最後にスケジュールされた時間から今までのものではありません。 + +CronJobはスケジュールに一致するJobの作成にのみ関与するのに対して、JobはJobが示すPod管理を担います。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/controllers/daemonset.md b/content/ja/docs/concepts/workloads/controllers/daemonset.md new file mode 100644 index 0000000000000..4f10338dacefd --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/daemonset.md @@ -0,0 +1,180 @@ +--- +reviewers: +title: DaemonSet +content_template: templates/concept +weight: 50 +--- + +{{% capture overview %}} + +_DaemonSet_ は全て(またはいくつか)のNodeが単一のPodのコピーを稼働させることを保証します。Nodeがクラスターに追加されるとき、PodがNode上に追加されます。Nodeがクラスターから削除されたとき、それらのPodはガーベージコレクターにより除去されます。DaemonSetの削除により、DaemonSetが作成したPodもクリーンアップします。 + +DaemonSetのいくつかの典型的な使用例は以下の通りです。 + +- `glusterd`や`ceph`のようなクラスターのストレージデーモンを各Node上で稼働させる。 +- `fluentd`や`logstash`のようなログ集計デーモンを各Node上で稼働させる。 +- [Prometheus Node Exporter]( + https://github.com/prometheus/node_exporter)や`collectd`、[Dynatrace OneAgent](https://www.dynatrace.com/technologies/kubernetes-monitoring/)、 [AppDynamics Agent](https://docs.appdynamics.com/display/CLOUD/Container+Visibility+with+Kubernetes)、 [Datadog agent](https://docs.datadoghq.com/agent/kubernetes/daemonset_setup/)、 [New Relic agent](https://docs.newrelic.com/docs/integrations/kubernetes-integration/installation/kubernetes-installation-configuration)、Gangliaの`gmond`やInstana agentなどのようなNodeのモニタリングデーモンを各Node上で稼働させる。 + +シンプルなケースとして、各タイプのデーモンにおいて、全てのNodeをカバーする1つのDaemonSetが使用されるケースがあります。 +さらに複雑な設定では、単一のタイプのデーモン用ですが、異なるフラグや、異なるハードウェアタイプに対するメモリー、CPUリクエストを要求する複数のDaemonSetを使用するケースもあります。 + +{{% /capture %}} + + +{{% capture body %}} + +## DaemonSet Specの記述 + +### DaemonSetの作成 + +ユーザーはYAMLファイル内でDaemonSetの設定を記述することができます。 +例えば、下記の`daemonset.yaml`ファイルでは`fluentd-elasticsearch`というDockerイメージを稼働させるDaemonSetの設定を記述します。 + +{{< codenew file="controllers/daemonset.yaml" >}} + +* YAMLファイルに基づいてDaemonSetを作成します。 +``` +kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml +``` + +### 必須のフィールド + +他の全てのKubernetesの設定と同様に、DaemonSetは`apiVersion`、`kind`と`metadata`フィールドが必須となります。 +設定ファイルの活用法に関する一般的な情報は、[アプリケーションのデプロイ](/docs/user-guide/deploying-applications/)、[コンテナの設定](/docs/tasks/)、[kuberctlを用いたオブジェクトの管理](/docs/concepts/overview/object-management-kubectl/overview/)といったドキュメントを参照ください。 + +また、DaemonSetにおいて[`.spec`](https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status)セクションも必須となります。 + +### Podテンプレート + +`.spec.template`は`.spec`内での必須のフィールドの1つです。 + +`.spec.template`は[Podテンプレート](/docs/concepts/workloads/pods/pod-overview/#pod-templates)となります。これはフィールドがネストされていて、`apiVersion`や`kind`をもたないことを除いては、[Pod](/docs/concepts/workloads/pods/pod/)のテンプレートと同じスキーマとなります。 + +Podに対する必須のフィールドに加えて、DaemonSet内のPodテンプレートは適切なラベルを指定しなくてはなりません([Podセレクター](#pod-selector)の項目を参照ください)。 + +DaemonSet内のPodテンプレートでは、[`RestartPolicy`](/docs/user-guide/pod-states)フィールドを指定せずにデフォルトの`Always`を使用するか、明示的に`Always`を設定するかのどちらかである必要があります。 + +### Podセレクター + +`.spec.selector`フィールドはPodセレクターとなります。これは[Job](/docs/concepts/jobs/run-to-completion-finite-workloads/)の`.spec.selector`と同じものです。 + +Kubernetes1.8のように、ユーザーは`.spec.template`のラベルにマッチするPodセレクターを指定しなくてはいけません。Podセレクターは、値を空のままにしてもデフォルト設定にならなくなりました。セレクターのデフォルト化は`kubectl apply`と互換性はありません。また、一度DaemonSetが作成されると、その`.spec.selector`は変更不可能になります。Podセレクターの変更は、意図しないPodの孤立を引き起こし、ユーザーにとってやっかいなものとなります。 + +`.spec.selector`は2つのフィールドからなるオブジェクトです。 + +* `matchLabels` - [ReplicationController](/docs/concepts/workloads/controllers/replicationcontroller/)の`.spec.selector`と同じように機能します。 +* `matchExpressions` - キーと、値のリストとさらにはそれらのキーとバリューに関連したオペレーターを指定することにより、より洗練された形式のセレクターを構成できます。 + +上記の2つが指定された場合は、2つの条件をANDでどちらも満たすものを結果として返します。 + +もし`spec.selector`が指定されたとき、`.spec.template.metadata.labels`とマッチしなければなりません。この2つの値がマッチしない設定をした場合、APIによってリジェクトされます。 + +また、ユーザーは通常、DaemonSetやReplicaSetのような他のコントローラーを使用するか直接かによらず、このセレクターとマッチするラベルを持つPodを作成すべきではありません。 +さもないと、DaemonSetコントローラーが、それらのPodがDaemonSetによって作成されたものと扱われてしまいます。Kubernetesはユーザーがこれを行うことを止めることはありません。ユーザーがこれを行いたい1つのケースとしては、テストのためにNode上に異なる値をもったPodを手動で作成するような場合があります。 + +### 特定のいくつかのNode上のみにPodを稼働させる + +もしユーザーが`.spec.template.spec.nodeSelector`を指定したとき、DaemonSetコントローラーは、その[node +selector](/docs/concepts/configuration/assign-pod-node/)にマッチするPodをNode上に作成します。 +同様に、もし`.spec.template.spec.affinity`を指定したとき、DaemonSetコントローラーは[node affinity](/docs/concepts/configuration/assign-pod-node/)マッチするPodをNode上に作成します。 +もしユーザーがどちらも指定しないとき、DaemonSetコントローラーは全てのNode上にPodを作成します。 + +## Daemon Podがどのようにスケジューリングされるか + +### DaemonSetコントローラーによってスケジューリングされる場合(Kubernetes1.12からデフォルトで無効) + +通常、Podが稼働するマシンはKubernetesスケジューラーによって選択されます。 +しかし、DaemonSetコントローラーによって作成されたPodは既に選択されたマシンを持っています(`.spec.nodeName`はPodの作成時に指定され、Kubernetesスケジューラーによって無視されます)。 +従って: + + - Nodeの[`unschedulable`](/docs/admin/node/#manual-node-administration)フィールドはDaemonSetコントローラーによって尊重されません。 + - DaemonSetコントローラーは、スケジューラーが起動していないときでも稼働でき、これはクラスターの自力での起動を助けます。 + +### デフォルトスケジューラーによってスケジューリングされる場合(Kubernetes1.12からデフォルトで有効) + +{{< feature-state state="beta" for-kubernetes-version="1.12" >}} + +DaemonSetは全ての利用可能なNodeが単一のPodのコピーを稼働させることを保証します。通常、Podが稼働するNodeはKubernetesスケジューラーによって選択されます。しかし、DaemonSetのPodは代わりにDaemonSetコントローラーによって作成され、スケジューリングされます。 +下記の問題について説明します: + + * 矛盾するPodのふるまい: スケジューリングされるのを待っている通常のPodは、作成されているが`Pending`状態となりますが、DaemonSetのPodは`Pending`状態で作成されません。これはユーザーにとって困惑するものです。 + * [Podプリエンプション(Pod preemption)](/docs/concepts/configuration/pod-priority-preemption/)はデフォルトスケジューラーによってハンドルされます。もしプリエンプションが有効な場合、そのDaemonSetコントローラーはPodの優先順位とプリエンプションを考慮することなくスケジューリングの判断を行います。 + +`ScheduleDaemonSetPods`は、DaemonSetのPodに対して`NodeAffinity`項目を追加することにより、DaemonSetコントローラーの代わりにデフォルトスケジューラーを使ってDaemonSetのスケジュールを可能にします。その際に、デフォルトスケジューラーはPodをターゲットのホストにバインドします。もしDaemonSetのNodeAffinityが存在するとき、それは新しいものに置き換えられます。DaemonSetコントローラーはDaemonSetのPodの作成や修正を行うときのみそれらの操作を実施します。そしてDaemonSetの`.spec.template`フィールドに対しては何も変更が加えられません。 + +```yaml +nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchFields: + - key: metadata.name + operator: In + values: + - target-host-name +``` + +さらに、`node.kubernetes.io/unschedulable:NoSchedule`というtolarationがDaemonSetのPodに自動的に追加されます。デフォルトスケジューラーは、DaemonSetのPodのスケジューリングのときに、`unschedulable`なNodeを無視します。 + +### TaintsとTolerations + +DaemonSetのPodは[TaintsとTolerations](/docs/concepts/configuration/taint-and-toleration)の設定を尊重します。 +下記のTolerationsは、関連する機能によって自動的にDaemonSetのPodに追加されます。 + +| Toleration Key | Effect | Version | Description | +| ---------------------------------------- | ---------- | ------- | ------------------------------------------------------------ | +| `node.kubernetes.io/not-ready` | NoExecute | 1.13+ | DaemonSetのPodはネットワーク分割のようなNodeの問題が発生したときに除外されません。| +| `node.kubernetes.io/unreachable` | NoExecute | 1.13+ | DaemonSetのPodはネットワーク分割のようなNodeの問題が発生したときに除外されません。| +| `node.kubernetes.io/disk-pressure` | NoSchedule | 1.8+ | | +| `node.kubernetes.io/memory-pressure` | NoSchedule | 1.8+ | | +| `node.kubernetes.io/unschedulable` | NoSchedule | 1.12+ | DaemonSetのPodはデフォルトスケジューラーによってスケジュール不可能な属性を許容(tolerate)します。 | +| `node.kubernetes.io/network-unavailable` | NoSchedule | 1.12+ | ホストネットワークを使うDaemonSetのPodはデフォルトスケジューラーによってネットワーク利用不可能な属性を許容(tolerate)します。 + +## Daemon Podとのコミュニケーション + +DaemonSet内のPodとのコミュニケーションをする際に考えられるパターンは以下の通りです。: + +- **Push**: DaemonSet内のPodは他のサービスに対して更新情報を送信するように設定されます。 +- **NodeIPとKnown Port**: PodがNodeIPを介して疎通できるようにするため、DaemonSet内のPodは`hostPort`を使用できます。慣例により、クライアントはNodeIPのリストとポートを知っています。 +- **DNS**: 同じPodセレクターを持つ[HeadlessService](/docs/concepts/services-networking/service/#headless-services)を作成し、`endpoints`リソースを使ってDaemonSetを探すか、DNSから複数のAレコードを取得します。 +- **Service**: 同じPodセレクターを持つServiceを作成し、複数のうちのいずれかのNode上のDaemonに疎通させるためにそのServiceを使います。 + +## DaemonSetの更新 + +もしNodeラベルが変更されたとき、そのDaemonSetは直ちに新しくマッチしたNodeにPodを追加し、マッチしなくなったNodeからPodを削除します。 + +ユーザーはDaemonSetが作成したPodを修正可能です。しかし、Podは全てのフィールドの更新を許可していません。また、DaemonSetコントローラーは次のNode(同じ名前でも)が作成されたときにオリジナルのテンプレートを使ってPodを作成します。 + +ユーザーはDaemonSetを削除可能です。もし`kubectl`コマンドで`--cascade=false`を指定したとき、DaemonSetのPodはNode上で残り続けます。そしてユーザーは異なるテンプレートを使って新しいDaemonSetを作成可能です。 +異なるテンプレートを使った新しいDaemonSetは、マッチしたラベルを持っている全ての存在しているPodを認識します。DaemonSetはPodのテンプレートがミスマッチしていたとしても、それらのPodを修正もしくは削除をしません。 +ユーザーはPodもしくはNodeの削除によって新しいPodの作成を強制する必要があります。 + +Kubernetes1.6とそれ以降のバージョンでは、ユーザーはDaemonSet上で[ローリングアップデートの実施](/docs/tasks/manage-daemon/update-daemon-set/)が可能です。 + +## DaemonSetの代替案 + +### Initスクリプト + +Node上で直接起動することにより(例: `init`、`upstartd`、`systemd`を使用する)、デーモンプロセスを稼働することが可能です。この方法は非常に良いですが、このようなプロセスをDaemonSetを介して起動することはいくつかの利点があります。 + +- アプリケーションと同じ方法でデーモンの監視とログの管理ができる。 +- デーモンとアプリケーションで同じ設定用の言語とツール(例: Podテンプレート、`kubectl`)を使える。 +- リソースリミットを使ったコンテナ内でデーモンを稼働させることにより、デーモンとアプリケーションコンテナの分離を促進します。しかし、これはPod内でなく、コンテナ内でデーモンを稼働させることにより可能です(Dockerを介して直接起動する)。 + +### ベアPod + +特定のNode上で稼働するように指定したPodを直接作成することは可能です。しかし、DaemonSetはNodeの故障やNodeの破壊的なメンテナンスやカーネルのアップグレードなど、どのような理由に限らず、削除されたもしくは停止されたPodを置き換えます。このような理由で、ユーザーはPod単体を作成するよりもむしろDaemonSetを使うべきです。 + +### 静的Pod Pods + +Kubeletによって監視されているディレクトリに対してファイルを書き込むことによって、Podを作成することが可能です。これは[静的Pod](/docs/concepts/cluster-administration/static-pod/)と呼ばれます。 +DaemonSetと違い、静的Podはkubectlや他のKubernetes APIクライアントで管理できません。静的PodはApiServerに依存しておらず、クラスターの自立起動時に最適です。また、静的Podは将来的には廃止される予定です。 + +### Deployment + +DaemonSetは、Podの作成し、そのPodが停止されることのないプロセスを持つことにおいて[Deployment](/docs/concepts/workloads/controllers/deployment/)と同様です(例: webサーバー、ストレージサーバー)。 + +フロントエンドのようなServiceのように、どのホスト上にPodが稼働するか制御するよりも、レプリカ数をスケールアップまたはスケールダウンしたりローリングアップデートする方が重要であるような、状態をもたないServiceに対してDeploymentを使ってください。 +Podのコピーが全てまたは特定のホスト上で常に稼働していることが重要な場合や、他のPodの前に起動させる必要があるときにDaemonSetを使ってください。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/controllers/garbage-collection.md b/content/ja/docs/concepts/workloads/controllers/garbage-collection.md new file mode 100644 index 0000000000000..0463849cd08a9 --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/garbage-collection.md @@ -0,0 +1,149 @@ +--- +title: ガベージコレクション +content_template: templates/concept +weight: 60 +--- + +{{% capture overview %}} + +Kubernetesのガベージコレクターの役割は、かつてオーナーがいたが、現時点でもはやオーナーがいないようなオブジェクトの削除を行うことです。 +{{% /capture %}} + + +{{% capture body %}} + +## オーナーとその従属オブジェクト + +いくつかのKubernetesオブジェクトは他のオブジェクトのオーナーとなります。例えば、ReplicaSetはPodのセットに対するオーナーです。オーナーによって所有されたオブジェクトは、オーナーオブジェクトの*従属オブジェクト(Dependents)* と呼ばれます。全ての従属オブジェクトは、オーナーオブジェクトを指し示す`metadata.ownerReferences`というフィールドを持ちます。 + +時々、Kubernetesは`ownerReference`フィールドに値を自動的にセットします。例えば、ユーザーがReplicaSetを作成したとき、KubernetesはReplicaSet内の各Podの`ownerReference`フィールドに自動的に値をセットします。Kubernetes1.8において、KubernetesはReplicaController、ReplicaSet、StatefulSet、DaemonSet、Deployment、Job、CronJobによって作成され、適用されたオブジェクトの`ownerReference`フィールドに自動的にその値をセットします。 + +ユーザーはまた`ownerReference`フィールドに手動で値をセットすることにより、オーナーと従属オブジェクト間の関係を指定することができます。 + +下記の例は、3つのPodを持つReplicaSetの設定ファイルとなります。 + +{{< codenew file="controllers/replicaset.yaml" >}} + +もしユーザーがReplicaSetを作成し、Podのメタデータを見る時、`ownerReference`フィールドの値を確認できます。 + +```shell +kubectl apply -f https://k8s.io/examples/controllers/replicaset.yaml +kubectl get pods --output=yaml +``` + +その出力結果によると、そのPodのオーナーは`my-repset`という名前のReplicaSetです。 + +```shell +apiVersion: v1 +kind: Pod +metadata: + ... + ownerReferences: + - apiVersion: apps/v1 + controller: true + blockOwnerDeletion: true + kind: ReplicaSet + name: my-repset + uid: d9607e19-f88f-11e6-a518-42010a800195 + ... +``` + +{{< note >}} +ネームスペースをまたいだownerReferenceは意図的に許可されていません。これは以下のことを意味します。 +1) ネームスペース内のスコープの従属オブジェクトは、同一のネームスペース内のオーナーと、クラスターのスコープ内のオーナーのみ指定できます。 +2) クラスターのスコープ内の従属オブジェクトは、クラスターのスコープ内のオーナーオブジェクトのみ指定でき、ネームスペース内のスコープのオーナーオブジェクトは指定できません。 +{{< /note >}} + +## ガベージコレクターがどのように従属オブジェクトの削除をするかを制御する + +ユーザーがオブジェクトを削除するとき、それに紐づく従属オブジェクトも自動で削除するか指定できます。従属オブジェクトの自動削除は、*カスケード削除(Cascading deletion)* と呼ばれます。*カスケード削除* には2つのモードがあり、*バックグラウンド* と*フォアグラウンド* があります。 + +もしユーザーが、従属オブジェクトの自動削除なしにあるオブジェクトを削除する場合、その従属オブジェクトは*みなしご(orphaned)* と呼ばれます。 + +### フォアグラウンドのカスケード削除 + +*フォアグラウンドのカスケード削除* において、そのルートオブジェクトは最初に"削除処理中"という状態に遷移します。その*削除処理中* 状態において、下記の項目は正となります。 + + * そのオブジェクトはREST APIを介して確認可能です。 + * そのオブジェクトの`deletionTimestamp`がセットされます。 + * そのオブジェクトの`metadata.finalizers`フィールドは、`foregroundDeletion`という値を含みます。 + +一度"削除処理中"状態に遷移すると、そのガベージコレクターはオブジェクトの従属オブジェクトを削除します。一度そのガベージコレクターが全ての”ブロッキングしている”従属オブジェクトを削除すると(`ownerReference.blockOwnerDeletion=true`という値を持つオブジェクト)、それはオーナーのオブジェクトも削除します。 + +注意点として、"フォアグラウンドのカスケード削除"において、`ownerReference.blockOwnerDeletion`フィールドを持つ従属オブジェクトのみ、そのオーナーオブジェクトの削除をブロックします。 +Kubernetes1.7では、認証されていない従属オブジェクトがオーナーオブジェクトの削除を遅らせることができないようにするために[アドミッションコントローラー](/docs/reference/access-authn-authz/admission-controllers/#ownerreferencespermissionenforcement)が追加され、それは、オーナーオブジェクトの削除パーミッションに基づいて`blockOwnerDeletion`の値がtrueに設定してユーザーアクセスをコントロールします。 + +もしオブジェクトの`ownerReferences`フィールドがコントローラー(DeploymentやReplicaSetなど)によってセットされている場合、`blockOwnerDeletion`は自動的にセットされ、ユーザーはこのフィールドを手動で修正する必要はありません。 + +### バックグラウンドのカスケード削除 + +*バックグラウンドのカスケード削除* において、Kubernetesはそのオーナーオブジェクトを即座に削除し、ガベージコレクションはその従属オブジェクトをバックグラウンドで削除します。 + +### カスケード削除ポリシーの設定 + +カスケード削除ポリシーを制御するためには、オブジェクトをいつ設定するか`deleteOptions`引数上の`propagationPolicy`フィールドに設定してください。設定可能な値は`Orphan`、`Foreground`、もしくは`Background`のどれかです。 + +Kubernetes1.9以前では多くのコントローラーにおけるデフォルトのガベージコレクションポリシーは`orphan`でした。 +この対象のコントローラーはReplicationController、ReplicaSet、StatefulSet、DaemonSetとDeploymentを含みます。`extensions/v1beta1`、`apps/v1beta1`、`apps/v1beta2`のグループバージョンに含まれるオブジェクト種においては、もしユーザーがガベージコレクションに他の値を設定しない限り、デフォルトで従属オブジェクトはみなしご(orphaned)になります。 +Kubernetes1.9において、`apps/v1`というグループバージョンにおいて、従属オブジェクトはデフォルトで削除されます。 + +下記のコマンドは従属オブジェクトをバックグラウンドで削除する例です。 + +```shell +kubectl proxy --port=8080 +curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \ +-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Background"}' \ +-H "Content-Type: application/json" +``` + +下記のコマンドは従属オブジェクトをフォアグラウンドで削除する例です。 + +```shell +kubectl proxy --port=8080 +curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \ +-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \ +-H "Content-Type: application/json" +``` + +下記のコマンドは従属オブジェクトをみなしご状態になった従属オブジェクトの例です。 + +```shell +kubectl proxy --port=8080 +curl -X DELETE localhost:8080/apis/apps/v1/namespaces/default/replicasets/my-repset \ +-d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \ +-H "Content-Type: application/json" +``` + +kubectlもまたカスケード削除をサポートしています。 +kubectlを使って従属オブジェクトを自動的に削除するためには、`--cascade`をtrueにセットしてください。 +従属オブジェクトを削除せず、みなしご状態にするには`--cascade`をfalseにセットしてください。 +`--cascade`オプションのデフォルト値はtrueになります。 + +下記のコマンドは、ReplicaSetを削除し、その従属オブジェクトをみなしご状態にします。 + +```shell +kubectl delete replicaset my-repset --cascade=false +``` + +### Deploymentsに関する追記事項 + +Kubernetes1.7以前では、Deploymentに対するカスケード削除において、作成されたReplicaSetだけでなく、それらのPodも削除するためには、ユーザーは`propagationPolicy: Foreground`と指定*しなくてはなりません* 。もしこのタイプの_propagationPolicy_ が使われなかった場合、そのReplicaSetは削除されますが、そのPodは削除されずみなしご状態になります。 +さらなる詳細に関しては[kubeadm/#149](https://github.com/kubernetes/kubeadm/issues/149#issuecomment-284766613)を参照してください。 + +## 既知の問題について + +[#26120](https://github.com/kubernetes/kubernetes/issues/26120)にてイシューがトラックされています。 + +{{% /capture %}} + + +{{% capture whatsnext %}} + +[Design Doc 1](https://git.k8s.io/community/contributors/design-proposals/api-machinery/garbage-collection.md) + +[Design Doc 2](https://git.k8s.io/community/contributors/design-proposals/api-machinery/synchronous-garbage-collection.md) + +{{% /capture %}} + + + diff --git a/content/ja/docs/concepts/workloads/controllers/replicaset.md b/content/ja/docs/concepts/workloads/controllers/replicaset.md new file mode 100644 index 0000000000000..0c4a47f69463f --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/replicaset.md @@ -0,0 +1,315 @@ +--- +reviewers: +title: ReplicaSet +content_template: templates/concept +weight: 10 +--- + +{{% capture overview %}} + +ReplicaSetの目的は、どのような時でも安定したレプリカPodのセットを維持することです。これは、理想的なレプリカ数のPodが利用可能であることを保証するものとして使用されます。 + + +{{% /capture %}} + +{{% capture body %}} + +## ReplicaSetがどのように動くか + +ReplicaSetは、ReplicaSetが対象とするPodをどう特定するかを示すためのセレクターや、稼働させたいPodのレプリカ数、Podテンプレート(理想のレプリカ数の条件を満たすために作成される新しいPodのデータを指定するために用意されるもの)といったフィールドとともに定義されます。ReplicaSetは、指定された理想のレプリカ数にするためにPodの作成と削除を行うことにより、その目的を達成します。ReplicaSetが新しいPodを作成するとき、ReplicaSetはそのPodテンプレートを使用します。 + +ReplicaSetがそのPod群と連携するためのリンクは、Podの[metadata.ownerReferences](/docs/concepts/workloads/controllers/garbage-collection/#owners-and-dependents)というフィールド(現在のオブジェクトが所有されているリソースを指定する)を介して作成されます。ReplicaSetによって所持された全てのPodは、それらの`ownerReferences`フィールドにReplicaSetを特定する情報を保持します。このリンクを通じて、ReplicaSetは管理しているPodの状態を把握したり、その後の実行計画を立てます。 + +ReplicaSetは、そのセレクターを使用することにより、所有するための新しいPodを特定します。もし`ownerReference`フィールドの値を持たないPodか、`ownerReference`フィールドの値がコントローラーでないPodで、そのPodがReplicaSetのセレクターとマッチした場合に、そのPodは即座にそのReplicaSetによって所有されます。 + +## ReplicaSetを使うとき + +ReplicaSetはどんな時でも指定された数のPodのレプリカが稼働することを保証します。しかし、DeploymentはReplicaSetを管理する、より上位レベルの概念で、Deploymentはその他の多くの有益な機能と共に、宣言的なPodのアップデート機能を提供します。それゆえ、我々はユーザーが独自のアップデートオーケストレーションを必要としたり、アップデートを全く必要としないような場合を除いて、ReplicaSetを直接使うよりも代わりにDeploymentを使うことを推奨します。 + +これは、ユーザーがReplicaSetのオブジェクトを操作する必要が全く無いことを意味します。 +代わりにDeploymentを使用して、`spec`セクションにユーザーのアプリケーションを定義してください。 + +## ReplicaSetの使用例 + +{{< codenew file="controllers/frontend.yaml" >}} + +上記のマニフェストを`frontend.yaml`ファイルに保存しKubernetesクラスターに適用すると、マニフェストに定義されたReplicaSetとそれが管理するPod群を作成します。 + +```shell +kubectl apply -f http://k8s.io/examples/controllers/frontend.yaml +``` + +ユーザーはデプロイされた現在のReplicaSetの情報も取得できます。 +```shell +kubectl get rs +``` + +そして、ユーザーが作成したfrontendリソースについての情報も取得できます。 +```shell +NAME DESIRED CURRENT READY AGE +frontend 3 3 3 6s +``` + +ユーザーはまたReplicaSetの状態も確認できます。 +```shell +kubectl describe rs/frontend +``` + +その結果は以下のようになります。 +```shell +Name: frontend +Namespace: default +Selector: tier=frontend,tier in (frontend) +Labels: app=guestbook + tier=frontend +Annotations: +Replicas: 3 current / 3 desired +Pods Status: 3 Running / 0 Waiting / 0 Succeeded / 0 Failed +Pod Template: + Labels: app=guestbook + tier=frontend + Containers: + php-redis: + Image: gcr.io/google_samples/gb-frontend:v3 + Port: 80/TCP + Requests: + cpu: 100m + memory: 100Mi + Environment: + GET_HOSTS_FROM: dns + Mounts: + Volumes: +Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-qhloh + 1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-dnjpy + 1m 1m 1 {replicaset-controller } Normal SuccessfulCreate Created pod: frontend-9si5l +``` + +そして最後に、ユーザーはReplicaSetによって作成されたPodもチェックできます。 +```shell +kubectl get Pods +``` + +表示されるPodに関する情報は以下のようになります。 +```shell +NAME READY STATUS RESTARTS AGE +frontend-9si5l 1/1 Running 0 1m +frontend-dnjpy 1/1 Running 0 1m +frontend-qhloh 1/1 Running 0 1m +``` + +ユーザーはまた、それらのPodの`ownerReferences`が`frontend`ReplicaSetに設定されていることも確認できます。 +これを確認するためには、稼働しているPodの中のどれかのyamlファイルを取得します。 +```shell +kubectl get pods frontend-9si5l -o yaml +``` + +その表示結果は、以下のようになります。その`frontend`ReplicaSetの情報が`metadata`の`ownerReferences`フィールドにセットされています。 +```shell +apiVersion: v1 +kind: Pod +metadata: + creationTimestamp: 2019-01-31T17:20:41Z + generateName: frontend- + labels: + tier: frontend + name: frontend-9si5l + namespace: default + ownerReferences: + - apiVersion: extensions/v1beta1 + blockOwnerDeletion: true + controller: true + kind: ReplicaSet + name: frontend + uid: 892a2330-257c-11e9-aecd-025000000001 +... +``` + +## テンプレートなしのPodの所有 + +ユーザーが問題なくベアPod(Bare Pod: ここではPodテンプレート無しのPodのこと)を作成しているとき、そのベアPodがユーザーのReplicaSetの中のいずれのセレクターともマッチしないことを確認することを強く推奨します。 +この理由として、ReplicaSetは、所有対象のPodがReplicaSetのテンプレートによって指定されたPodのみに限定されていないからです(ReplicaSetは前のセクションで説明した方法によって他のPodも所有できます)。 + +前のセクションで取り上げた`frontend`ReplicaSetと、下記のマニフェストのPodをみてみます。 + +{{< codenew file="pods/pod-rs.yaml" >}} + +これらのPodは`ownerReferences`に何のコントローラー(もしくはオブジェクト)も指定されておらず、そして`frontend`ReplicaSetにマッチするセレクターをもっており、これらのPodは即座に`frontend`ReplicaSetによって所有されます。 + +この`frontend`ReplicaSetがデプロイされ、初期のPodレプリカがレプリカ数の要求を満たすためにセットアップされた後で、ユーザーがそのPodを作成することを考えます。 + +```shell +kubectl apply -f http://k8s.io/examples/pods/pod-rs.yaml +``` + +新しいPodはそのReplicaSetによって所有され、そのReplicaSetのレプリカ数が、設定された理想のレプリカ数を超えた場合すぐにそれらのPodは削除されます。 + +下記のコマンドでPodを取得できます。 +```shell +kubectl get Pods +``` + +その表示結果で、新しいPodがすでに削除済みか、削除中のステータスになっているのを確認できます。 +```shell +NAME READY STATUS RESTARTS AGE +frontend-9si5l 1/1 Running 0 1m +frontend-dnjpy 1/1 Running 0 1m +frontend-qhloh 1/1 Running 0 1m +pod2 0/1 Terminating 0 4s +``` + +もしユーザーがそのPodを最初に作成する場合 +```shell +kubectl apply -f http://k8s.io/examples/pods/pod-rs.yaml +``` + +そしてその後に`frontend`ReplicaSetを作成すると、 +```shell +kubectl apply -f http://k8s.io/examples/controllers/frontend.yaml +``` + +ユーザーはそのReplicaSetが作成したPodを所有し、さらにもともと存在していたPodと今回新たに作成されたPodの数が、理想のレプリカ数になるまでPodを作成するのを確認できます。 +ここでまたPodの状態を取得します。 +```shell +kubectl get Pods +``` + +取得結果は下記のようになります。 +```shell +NAME READY STATUS RESTARTS AGE +frontend-pxj4r 1/1 Running 0 5s +pod1 1/1 Running 0 13s +pod2 1/1 Running 0 13s +``` + +この方法で、ReplicaSetはテンプレートで指定されたもの以外のPodを所有することができます。 + +## ReplicaSetのマニフェストを記述する。 + +他の全てのKubernetes APIオブジェクトのように、ReplicaSetは`apiVersion`、`kind`と`metadata`フィールドを必要とします。 +ReplicaSetでは、`kind`フィールドの値は`ReplicaSet`です。 +Kubernetes1.9において、ReplicaSetは`apps/v1`というAPIバージョンが現在のバージョンで、デフォルトで有効です。`apps/v1beta2`というAPIバージョンは廃止されています。先ほど作成した`frontend.yaml`ファイルの最初の行を参考にしてください。 + +また、ReplicaSetは[`.spec` セクション](https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status)も必須です。 + +### Pod テンプレート + +`.spec.template`はラベルを持つことが必要な[Pod テンプレート](/docs/concepts/workloads/Pods/pod-overview/#pod-templates) です。先ほど作成した`frontend.yaml`の例では、`tier: frontend`というラベルを1つ持っています。 +他のコントローラーがこのPodを所有しようとしないためにも、他のコントローラーのセレクターでラベルを上書きしないように注意してください。 + +テンプレートの[再起動ポリシー](/docs/concepts/workloads/Pods/pod-lifecycle/#restart-policy)のためのフィールドである`.spec.template.spec.restartPolicy`は`Always`のみ許可されていて、そしてそれがデフォルト値です。 + +### Pod セレクター + +`.spec.selector`フィールドは[ラベルセレクター](/docs/concepts/overview/working-with-objects/labels/)です。 +[先ほど](#how-a-replicaset-works)議論したように、ReplicaSetが所有するPodを指定するためにそのラベルが使用されます。 +先ほどの`frontend.yaml`の例では、そのセレクターは下記のようになっていました +```shell +matchLabels: + tier: frontend +``` + +そのReplicaSetにおいて、`.spec.template.metadata.labels`フィールドの値は`spec.selector`と一致しなくてはならず、一致しない場合はAPIによって拒否されます。 + +{{< note >}} +2つのReplicaSetが同じ`.spec.selector`の値を設定しているが、それぞれ異なる`.spec.template.metadata.labels`と`.spec.template.spec`フィールドの値を持っていたとき、それぞれのReplicaSetはもう一方のReplicaSetによって作成されたPodを無視します。 +{{< /note >}} + +### レプリカ数について + +ユーザーは`.spec.replicas`フィールドの値を設定することにより、いくつのPodを同時に稼働させるか指定できます。そのときReplicaSetはレプリカ数がこの値に達するまでPodを作成、または削除します。 + +もしユーザーが`.spec.replicas`を指定しない場合、デフォルト値として1がセットされます。 + +## ReplicaSetを利用する + +### ReplicaSetとPodの削除 + +ReplicaSetとそれが所有する全てのPod削除したいときは、[`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete)コマンドを使ってください。 +[ガーベージコレクター](/docs/concepts/workloads/controllers/garbage-collection/)がデフォルトで自動的に全ての依存するPodを削除します。 + +REST APIもしくは`client-go`ライブラリーを使用するとき、ユーザーは`-d`オプションで`propagationPolicy`を`Background`か`Foreground`と指定しなくてはなりません。 +例えば下記のように実行します。 +```shell +kubectl proxy --port=8080 +curl -X DELETE 'localhost:8080/apis/extensions/v1beta1/namespaces/default/replicasets/frontend' \ +> -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Foreground"}' \ +> -H "Content-Type: application/json" +``` + +### ReplicaSetのみを削除する + +ユーザーは[`kubectl delete`](/docs/reference/generated/kubectl/kubectl-commands#delete)コマンドで`--cascade=false`オプションを付けることにより、所有するPodに影響を与えることなくReplicaSetを削除できます。 +REST APIもしくは`client-go`ライブラリーを使用するとき、ユーザーは`-d`オプションで`propagationPolicy`を`Orphan`と指定しなくてはなりません。 +```shell +kubectl proxy --port=8080 +curl -X DELETE 'localhost:8080/apis/extensions/v1beta1/namespaces/default/replicasets/frontend' \ +> -d '{"kind":"DeleteOptions","apiVersion":"v1","propagationPolicy":"Orphan"}' \ +> -H "Content-Type: application/json" +``` + +一度元のReplicaSetが削除されると、ユーザーは新しいものに置き換えるため新しいReplicaSetを作ることができます。新旧のReplicaSetの`.spec.selector`の値が同じである間、新しいReplicaSetは古いReplicaSetで稼働していたPodを取り入れます。 +しかし、存在するPodが新しく異なるPodテンプレートとマッチさせようとするとき、この仕組みは機能しません。 +ユーザーのコントロール下において新しいspecのPodをアップデートしたい場合は、[ローリングアップデート](#rolling-updates)を使用してください。 + +### PodをReplicaSetから分離させる + +ユーザーはPodのラベルを変更することにより、ReplicaSetからそのPodを削除できます。この手法はデバッグや、データ修復などのためにサービスからPodを削除したいときに使用できます。 +この方法で削除されたPodは自動的に新しいものに置き換えられます。(レプリカ数は変更されないものと仮定します。) + +### ReplicaSetのスケーリング + +ReplicaSetは、ただ`.spec.replicas`フィールドを更新することによって簡単にスケールアップまたはスケールダウンできます。ReplicaSetコントローラーは、ラベルセレクターにマッチするような指定した数のPodが利用可能であり、操作可能であることを保証します。 + +### HorizontalPodAutoscaler(HPA)のターゲットとしてのReplicaSet + +ReplicaSetはまた、[Horizontal Pod Autoscalers (HPA)](/docs/tasks/run-application/horizontal-pod-autoscale/)のターゲットにもなることができます。 +これはつまりReplicaSetがHPAによってオートスケールされうることを意味します。 +ここではHPAが、前の例で作成したReplicaSetをターゲットにする例を示します。 + +{{< codenew file="controllers/hpa-rs.yaml" >}} + +このマニフェストを`hpa-rs.yaml`に保存し、Kubernetesクラスターに適用すると、レプリケートされたPodのCPU使用量にもとづいてターゲットのReplicaSetをオートスケールするHPAを作成します。 + +```shell +kubectl apply -f https://k8s.io/examples/controllers/hpa-rs.yaml +``` + +同様のことを行うための代替案として、`kubectl autoscale`コマンドも使用できます。(こちらの方がより簡単です。) + +```shell +kubectl autoscale rs frontend --max=10 +``` + +## ReplicaSetの代替案 + +### Deployment (推奨) + +[`Deployment`](/docs/concepts/workloads/controllers/deployment/)はReplicaSetを所有することのできるオブジェクトで、宣言的なサーバサイドのローリングアップデートを介してReplicaSetとPodをアップデートできます。 +ReplicaSetは単独で使用可能ですが、現在では、ReplicaSetは主にPodの作成、削除とアップデートを司るためのメカニズムとしてDeploymentによって使用されています。ユーザーがDeploymentを使用するとき、Deploymentによって作成されるReplicaSetの管理について心配する必要はありません。DeploymentはReplicaSetを所有し、管理します。 +このため、もしユーザーがReplicaSetを必要とするとき、Deploymentの使用を推奨します。 + +### ベアPod(Bare Pods) + +ユーザーがPodを直接作成するケースとは異なり、ReplicaSetはNodeの故障やカーネルのアップグレードといった破壊的なNodeのメンテナンスなど、どのような理由に限らず削除または停止されたPodを置き換えます。 +このため、我々はもしユーザーのアプリケーションが単一のPodのみ必要とする場合でもReplicaSetを使用することを推奨します。プロセスのスーパーバイザーについても同様に考えると、それは単一Node上での独立したプロセスの代わりに複数のNodeにまたがった複数のPodを監視します。 +ReplicaSetは、Node上のいくつかのエージェント(例えば、KubeletやDocker)に対して、ローカルのコンテナ再起動を移譲します。 + +### Job + +PodをPodそれ自身で停止させたいような場合(例えば、バッチ用のジョブなど)は、ReplicaSetの代わりに[`Job`](/docs/concepts/jobs/run-to-completion-finite-workloads/)を使用してください。 + +### DaemonSet + +マシンの監視やロギングなど、マシンレベルの機能を提供したい場合は、ReplicaSetの代わりに[`DaemonSet`](/docs/concepts/workloads/controllers/daemonset/)を使用してください。 +これらのPodはマシン自体のライフタイムに紐づいています: そのPodは他のPodが起動する前に、そのマシン上で稼働される必要があり、マシンが再起動またはシャットダウンされるときには、安全に停止されます。 + +### ReplicationController + +ReplicaSetは[_ReplicationControllers_](/docs/concepts/workloads/controllers/replicationcontroller/)の後継となるものです。 +この2つは、ReplicationControllerが[ラベルについてのユーザーガイド](/docs/concepts/overview/working-with-objects/labels/#label-selectors)に書かれているように、集合ベース(set-based)のセレクター要求をサポートしていないことを除いては、同じ目的を果たし、同じようにふるまいます。 +このように、ReplicaSetはReplicationControllerよりも好まれます。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/controllers/statefulset.md b/content/ja/docs/concepts/workloads/controllers/statefulset.md new file mode 100644 index 0000000000000..b10c4156a43ec --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/statefulset.md @@ -0,0 +1,202 @@ +--- +reviewers: +title: StatefulSet +content_template: templates/concept +weight: 40 +--- + +{{% capture overview %}} + +StatefulSetはステートフルなアプリケーションを管理するためのワークロードAPIです。 + +{{< note >}} +StatefulSetはKubernetes1.9において利用可能(GA)です。 +{{< /note >}} + +{{< glossary_definition term_id="statefulset" length="all" >}} +{{% /capture %}} + +{{% capture body %}} + +## StatefulSetの使用 + +StatefulSetは下記の1つ以上の項目を要求するアプリケーションにおいて最適です。 + +* 安定した一意のネットワーク識別子 +* 安定した永続ストレージ +* 規則的で安全なデプロイとスケーリング +* 規則的で自動化されたローリングアップデート + +上記において安定とは、Podのスケジュール(または再スケジュール)をまたいでも永続的であることと同義です。 +もしアプリケーションが安定したネットワーク識別子と規則的なデプロイや削除、スケーリングを全く要求しない場合、ユーザーはステートレスなレプリカのセットを提供するコントローラーを使ってアプリケーションをデプロイするべきです。 +[Deployment](/docs/concepts/workloads/controllers/deployment/)や[ReplicaSet](/docs/concepts/workloads/controllers/replicaset/)のようなコントローラーはこのようなステートレスな要求に対して最適です。 + +## 制限事項 + +* StatefuleSetはKubernetes1.9より以前のバージョンではβ版のリソースであり、1.5より前のバージョンでは利用できません。 +* 提供されたPodのストレージは、要求された`storage class`にもとづいて[PersistentVolume Provisioner](https://github.com/kubernetes/examples/tree/{{< param "githubbranch" >}}/staging/persistent-volume-provisioning/README.md)によってプロビジョンされるか、管理者によって事前にプロビジョンされなくてはなりません。 +* StatefulSetの削除もしくはスケールダウンをすることにより、StatefulSetに関連したボリュームは削除*されません* 。 これはデータ安全性のためで、関連するStatefulSetのリソース全てを自動的に削除するよりもたいてい有効です。 +* StatefulSetは現在、Podのネットワークアイデンティティーに責務をもつために[Headless Service](/docs/concepts/services-networking/service/#headless-services)を要求します。ユーザーはこのServiceを作成する責任があります。 +* StatefulSetは、StatefulSetが削除されたときにPodの停止を行うことを保証していません。StatefulSetにおいて、規則的で安全なPodの停止を行う場合、削除のために事前にそのStatefulSetの数を0にスケールダウンさせることが可能です。 +* デフォルト設定の[Pod管理ポリシー](#pod-management-policies) (`OrderedReady`)によって[ローリングアップデート](#rolling-updates)を行う場合、[修復のための手動介入](#forced-rollback)を要求するようなブロークンな状態に遷移させることが可能です。 + +## コンポーネント + +下記の例は、StatefulSetのコンポーネントのデモンストレーションとなります。 + +* nginxという名前のHeadlessServiceは、ネットワークドメインをコントロールするために使われます。 +* webという名前のStatefulSetは、specで3つのnginxコンテナのレプリカを持ち、そのコンテナはそれぞれ別のPodで稼働するように設定されています。 +* volumeClaimTemplatesは、PersistentVolumeプロビジョナーによってプロビジョンされた[PersistentVolume](/docs/concepts/storage/persistent-volumes/)を使って安定したストレージを提供します。 + +```yaml +apiVersion: v1 +kind: Service +metadata: + name: nginx + labels: + app: nginx +spec: + ports: + - port: 80 + name: web + clusterIP: None + selector: + app: nginx +--- +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: web +spec: + selector: + matchLabels: + app: nginx # .spec.template.metadata.labelsの値と一致する必要があります + serviceName: "nginx" + replicas: 3 # by default is 1 + template: + metadata: + labels: + app: nginx # .spec.selector.matchLabelsの値と一致する必要があります + spec: + terminationGracePeriodSeconds: 10 + containers: + - name: nginx + image: k8s.gcr.io/nginx-slim:0.8 + ports: + - containerPort: 80 + name: web + volumeMounts: + - name: www + mountPath: /usr/share/nginx/html + volumeClaimTemplates: + - metadata: + name: www + spec: + accessModes: [ "ReadWriteOnce" ] + storageClassName: "my-storage-class" + resources: + requests: + storage: 1Gi +``` + +## Podセレクター +ユーザーは、StatefulSetの`.spec.template.metadata.labels`のラベルと一致させるため、StatefulSetの`.spec.selector`フィールドをセットしなくてはなりません。Kubernetes1.8以前では、`.spec.selector`フィールドは省略された場合デフォルト値になります。Kubernetes1.8とそれ以降のバージョンでは、ラベルに一致するPodセレクターの指定がない場合はStatefulSetの作成時にバリデーションエラーになります。 + +## Podアイデンティティー +StatefulSetのPodは、順番を示す番号、安定したネットワークアイデンティティー、安定したストレージからなる一意なアイデンティティーを持ちます。 +そのアイデンティティーはどのNode上にスケジュール(もしくは再スケジュール)されるかに関わらず、そのPodに紐付きます。 + +### 順序インデックス + +N個のレプリカをもったStatefulSetにおいて、StatefulSet内の各Podは、0からはじまりN-1までの整数値を順番に割り当てられ、そのStatefulSetにおいては一意となります。 + +### 安定したネットワークID + +StatefulSet内の各Podは、そのStatefulSet名とPodの順序番号から派生してホストネームが割り当てられます。 +作成されたホストネームの形式は`$(StatefulSet名)-$(順序番号)`となります。先ほどの上記の例では、`web-0,web-1,web-2`という3つのPodが作成されます。 +StatefulSetは、Podのドメインをコントロールするために[Headless Service](/docs/concepts/services-networking/service/#headless-services)を使うことができます。 +このHeadless Serviceによって管理されたドメインは`$(Service名).$(ネームスペース).svc.cluster.local`形式となり、"cluster.local"というのはそのクラスターのドメインとなります。 +各Podが作成されると、Podは`$(Pod名).$(管理するServiceドメイン名)`に一致するDNSサブドメインを取得し、管理するServiceはStatefulSetの`serviceName`で定義されます。 + +[制限事項](#制限事項)セクションで言及したように、ユーザーはPodのネットワークアイデンティティーのために[Headless Service](/docs/concepts/services-networking/service/#headless-services)を作成する責任があります。 + +ここで、クラスタードメイン、Service名、StatefulSet名の選択と、それらがStatefulSetのPodのDNS名にどう影響するかの例をあげます。 + +Cluster Domain | Service (ns/name) | StatefulSet (ns/name) | StatefulSet Domain | Pod DNS | Pod Hostname | +-------------- | ----------------- | ----------------- | -------------- | ------- | ------------ | + cluster.local | default/nginx | default/web | nginx.default.svc.cluster.local | web-{0..N-1}.nginx.default.svc.cluster.local | web-{0..N-1} | + cluster.local | foo/nginx | foo/web | nginx.foo.svc.cluster.local | web-{0..N-1}.nginx.foo.svc.cluster.local | web-{0..N-1} | + kube.local | foo/nginx | foo/web | nginx.foo.svc.kube.local | web-{0..N-1}.nginx.foo.svc.kube.local | web-{0..N-1} | + +{{< note >}} +クラスタードメインは[その他の設定](/docs/concepts/services-networking/dns-pod-service/#how-it-works)がされない限り、`cluster.local`にセットされます。 +{{< /note >}} + +### 安定したストレージ + +Kubernetesは各VolumeClaimTemplateに対して、1つの[PersistentVolume](/docs/concepts/storage/persistent-volumes/)を作成します。上記のnginxの例において、各Podは`my-storage-class`というStorageClassをもち、1Gibのストレージ容量を持った単一のPersistentVolumeを受け取ります。もしStorageClassが指定されていない場合、デフォルトのStorageClassが使用されます。PodがNode上にスケジュール(もしくは再スケジュール)されたとき、その`volumeMounts`はPersistentVolume Claimに関連したPersistentVolumeをマウントします。 +注意点として、PodのPersistentVolume Claimと関連したPersistentVolumeは、PodやStatefulSetが削除されたときに削除されません。 +削除する場合は手動で行わなければなりません。 + +### Podのネームラベル + +StatefulSetのコントローラーがPodを作成したとき、Podの名前として、`statefulset.kubernetes.io/pod-name`にラベルを追加します。このラベルによってユーザーはServiceにStatefulSet内の指定したPodを割り当てることができます。 + +## デプロイとスケーリングの保証 + +* N個のレプリカをもつStatefulSetにおいて、Podがデプロイされるとき、それらのPodは{0..N-1}の番号で順番に作成されます。 +* Podが削除されるとき、それらのPodは{N-1..0}の番号で降順に削除されます。 +* Podに対してスケーリングオプションが適用される前に、そのPodの前の順番の全てのPodがRunningかつReady状態になっていなくてはなりません。 +* Podが停止される前に、そのPodの番号より大きい番号を持つの全てのPodは完全にシャットダウンされていなくてはなりません。 + +StatefulSetは`pod.Spec.TerminationGracePeriodSeconds`を0に指定すべきではありません。これは不安全で、やらないことを強く推奨します。さらなる説明としては、[StatefulSetのPodの強制削除](/docs/tasks/run-application/force-delete-stateful-set-pod/)を参照してください。 + +上記の例のnginxが作成されたとき、3つのPodは`web-0`、`web-1`、`web-2`の順番でデプロイされます。`web-1`は`web-0`が[RunningかつReady状態](/docs/user-guide/pod-states/)になるまでは決してデプロイされないのと、同様に`web-2`は`web-1`がRunningかつReady状態にならないとデプロイされません。もし`web-0`が`web-1`がRunningかつReady状態になった後だが、`web-2`が起動する前に失敗した場合、`web-2`は`web-0`の再起動が成功し、RunningかつReady状態にならないと再起動されません。 + +もしユーザーが`replicas=1`といったようにStatefulSetにパッチをあてることにより、デプロイされたものをスケールすることになった場合、`web-2`は最初に停止されます。`web-1`は`web-2`が完全にシャットダウンされ削除されるまでは、停止されません。もし`web-0`が、`web-2`が完全に停止され削除された後だが、`web-1`の停止の前に失敗した場合、`web-1`は`web-0`がRunningかつReady状態になるまでは停止されません。 + +### Podの管理ポリシー +Kubernetes1.7とそれ以降のバージョンでは、StatefulSetは`.spec.podManagementPolicy`フィールドを介して、Podの一意性とアイデンティティーを保証します。 + +#### OrderedReadyなPod管理 + +`OrderedReady`なPod管理はStatefulSetにおいてデフォルトです。これは[デプロイとスケーリングの保証](#deployment-and-scaling-guarantees)に記載されている項目の振る舞いを実装します。 + +#### 並行なPod管理Parallel Pod Management +`並行`なPod管理は、StatefulSetコントローラーに対して、他のPodが起動や停止される前にそのPodが完全に起動し準備完了になるか停止するのを待つことなく、Podが並行に起動もしくは停止するように指示します。 + +## アップデートストラテジー + +Kubernetes1.7とそれ以降のバージョンにおいて、StatefulSetの`.spec.updateStarategy`フィールドで、コンテナの自動のローリングアップデートの設定やラベル、リソースのリクエストとリミットや、StatefulSet内のPodのアノテーションを指定できます。 + +### OnDelete + +`OnDelete`というアップデートストラテジーは、レガシーな(Kubernetes1.6以前)振る舞いとなります。StatefulSetの`.spec.updateStrategy.type`が`OnDelete`にセットされていたとき、そのStatefulSetコントローラーはStatefulSet内でPodを自動的に更新しません。StatefulSetの`.spec.template`項目の修正を反映した新しいPodの作成をコントローラーに支持するためには、ユーザーは手動でPodを削除しなければなりません。 + +### RollinUpdate + +`RollinUpdate`というアップデートストラテジーは、StatefulSet内のPodに対する自動化されたローリングアップデートの機能を実装します。これは`.spec.updateStrategy`フィールドが未指定の場合のデフォルトのストラテジーです。StatefulSetの`.spec.updateStrategy.type`が`RollingUpdate`にセットされたとき、そのStatefulSetコントローラーは、StatefulSet内のPodを削除し、再作成します。これはPodの停止(Podの番号の降順)と同じ順番で、一度に1つのPodを更新します。コントローラーは、その前のPodの状態がRunningかつReady状態になるまで次のPodの更新を待ちます。 + +#### パーティション + +`RollingUpdate`というアップデートストラテジーは、`.spec.updateStrategy.rollingUpdate.partition`を指定することにより、パーティションに分けることができます。もしパーティションが指定されていたとき、そのパーティションの値と等しいか、大きい番号を持つPodが更新されます。パーティションの値より小さい番号を持つPodは更新されず、たとえそれらのPodが削除されたとしても、それらのPodは以前のバージョンで再作成されます。もしStatefulSetの`.spec.updateStrategy.rollingUpdate.partition`が、`.spec.replicas`より大きい場合、`.spec.template`への更新はPodに反映されません。 +多くのケースの場合、ユーザーはパーティションを使う必要はありませんが、もし一部の更新を行う場合や、カナリー版のバージョンをロールアウトする場合や、段階的ロールアウトを行う場合に最適です。 + +#### 強制ロールバック + +デフォルトの[Pod管理ポリシー](#pod-management-policies)(`OrderedReady`)による[ローリングアップデート](#rolling-updates)を行う際、修復のために手作業が必要な状態にすることが可能です。 + +もしユーザーが、決してRunningかつReady状態にならないような設定になるようにPodテンプレートを更新した場合(例えば、不正なバイナリや、アプリケーションレベルの設定エラーなど)、StatefulSetはロールアウトを停止し、待機します。 + +この状態では、Podテンプレートを正常な状態に戻すだけでは不十分です。[既知の問題](https://github.com/kubernetes/kubernetes/issues/67250)によって、StatefulSetは元の正常な状態へ戻す前に、壊れたPodがReady状態(決して起こりえない)に戻るのを待ち続けます。 + +そのテンプレートを戻したあと、ユーザーはまたStatefulSetが異常状態で稼働しようとしていたPodをすべて削除する必要があります。StatefulSetはその戻されたテンプレートを使ってPodの再作成を始めます。 + +{{% /capture %}} +{{% capture whatsnext %}} + +* [ステートフルなアプリケーションのデプロイ](/docs/tutorials/stateful-application/basic-stateful-set/)の例を参考にしてください。 +* [StatefulSetを使ったCassandraのデプロイ](/docs/tutorials/stateful-application/cassandra/)の例を参考にしてください。 + +{{% /capture %}} + diff --git a/content/ja/docs/concepts/workloads/controllers/ttlafterfinished.md b/content/ja/docs/concepts/workloads/controllers/ttlafterfinished.md new file mode 100644 index 0000000000000..aed6b3316964f --- /dev/null +++ b/content/ja/docs/concepts/workloads/controllers/ttlafterfinished.md @@ -0,0 +1,56 @@ +--- +reviewers: +title: 終了したリソースのためのTTLコントローラー(TTL Controller for Finished Resources) +content_template: templates/concept +weight: 65 +--- + +{{% capture overview %}} + +{{< feature-state for_k8s_version="v1.12" state="alpha" >}} + +TTLコントローラーは実行を終えたリソースオブジェクトのライフタイムを制御するためのTTL機構を提供します。 +TTLコントローラーは現在[Job](/docs/concepts/workloads/controllers/jobs-run-to-completion/)のみ扱っていて、将来的にPodやカスタムリソースなど、他のリソースの実行終了を扱えるように拡張される予定です。 + +α版の免責事項: この機能は現在α版の機能で、[Feature Gate](/docs/reference/command-line-tools-reference/feature-gates/)の`TTLAfterFinished`を有効にすることで使用可能です。 + +{{% /capture %}} + + + + +{{% capture body %}} + +## TTLコントローラー + +TTLコントローラーは現在Jobに対してのみサポートされています。クラスターオペレーターはこの[例](/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically)のように、Jobの`.spec.ttlSecondsAfterFinished`フィールドを指定することにより、終了したJob(`完了した`もしくは`失敗した`)を自動的に削除するためにこの機能を使うことができます。 +TTLコントローラーは、そのリソースが終了したあと指定したTTLの秒数後に削除できるか推定します。言い換えると、そのTTLが期限切れになると、TTLコントローラーがリソースをクリーンアップするときに、そのリソースに紐づく従属オブジェクトも一緒に連続で削除します。注意点として、リソースが削除されるとき、ファイナライザーのようなライフサイクルに関する保証は尊重されます。 + +TTL秒はいつでもセット可能です。下記はJobの`.spec.ttlSecondsAfterFinished`フィールドのセットに関するいくつかの例です。 + +* Jobがその終了後にいくつか時間がたった後に自動的にクリーンアップできるように、そのリソースマニフェストにこの値を指定します。 +* この新しい機能を適用させるために、存在していて既に終了したリソースに対してこのフィールドをセットします。 +* リソース作成時に、このフィールドを動的にセットするために、[管理webhookの変更](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)をさせます。クラスター管理者は、終了したリソースに対して、このTTLポリシーを強制するために使うことができます。 +* リソースが終了した後に、このフィールドを動的にセットしたり、リソースステータスやラベルなどの値に基づいて異なるTTL値を選択するために、[管理webhookの変更](/docs/reference/access-authn-authz/extensible-admission-controllers/#admission-webhooks)をさせます。 + +## 注意 + +### TTL秒の更新 + +注意点として、Jobの`.spec.ttlSecondsAfterFinished`フィールドといったTTL期間はリソースが作成された後、もしくは終了した後に変更できます。しかし、一度Jobが削除可能(TTLの期限が切れたとき)になると、それがたとえTTLを伸ばすような更新に対してAPIのレスポンスで成功したと返されたとしても、そのシステムはJobが稼働し続けることをもはや保証しません。 + +### タイムスキュー(Time Skew) + +TTLコントローラーが、TTL値が期限切れかそうでないかを決定するためにKubernetesリソース内に保存されたタイムスタンプを使うため、この機能はクラスター内のタイムスキュー(時刻のずれ)に対してセンシティブとなります。タイムスキューは、誤った時間にTTLコントローラーに対してリソースオブジェクトのクリーンアップしてしまうことを引き起こすものです。 + +Kubernetesにおいてタイムスキューを避けるために、全てのNode上でNTPの稼働を必須とします([#6159](https://github.com/kubernetes/kubernetes/issues/6159#issuecomment-93844058)を参照してください)。クロックは常に正しいものではありませんが、Node間におけるその差はとても小さいものとなります。TTLに0でない値をセットするときにこのリスクに対して注意してください。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +[Jobの自動クリーンアップ](/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically) + +[設計ドキュメント](https://github.com/kubernetes/community/blob/master/keps/sig-apps/0026-ttl-after-finish.md) + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/pods/_index.md b/content/ja/docs/concepts/workloads/pods/_index.md new file mode 100755 index 0000000000000..a105f18fb3327 --- /dev/null +++ b/content/ja/docs/concepts/workloads/pods/_index.md @@ -0,0 +1,5 @@ +--- +title: "Pods" +weight: 10 +--- + diff --git a/content/ja/docs/concepts/workloads/pods/init-containers.md b/content/ja/docs/concepts/workloads/pods/init-containers.md new file mode 100644 index 0000000000000..5c3e42530faf3 --- /dev/null +++ b/content/ja/docs/concepts/workloads/pods/init-containers.md @@ -0,0 +1,276 @@ +--- +title: Initコンテナ(Init Containers) +content_template: templates/concept +weight: 40 +--- + +{{% capture overview %}} +このページでは、Initコンテナについて概観します。Initコンテナとは、アプリケーションコンテナの前に実行され、アプリケーションコンテナのイメージに存在しないセットアップスクリプトやユーティリティーを含んだ特別なコンテナです。 +{{% /capture %}} + +この機能はKubernetes1.6からβ版の機能として存在しています。InitコンテナはPodSpec内で、アプリケーションの`containers`という配列と並べて指定されます。そのベータ版のアノテーション値はまだ扱われ、PodSpecのフィールド値を上書きします。しかしながら、それらはKubernetesバージョン1.6と1.7において廃止されました。Kubernetesバージョン1.8からはそのアノテーション値はサポートされず、PodSpecフィールドの値に変換する必要があります。 + +{{% capture body %}} +## Initコンテナを理解する + +単一の[Pod](/docs/concepts/workloads/pods/pod-overview/)は、Pod内に複数のコンテナを稼働させることができますが、Initコンテナもまた、アプリケーションコンテナが稼働する前に1つまたは複数稼働できます。 + +Initコンテナは下記の項目をのぞいて、通常のコンテナと全く同じものとなります。 + +* Initコンテナは常に完了するまで稼働します。 +* 各Initコンテナは、次のInitコンテナが稼働する前に正常に完了しなくてはなりません。 + +もしあるPodの単一のInitコンテナが失敗した場合、KubernetesはInitコンテナが成功するまで何度もそのPodを再起動します。しかし、もしそのPodの`restartPolicy`が`Never`の場合、再起動されません。 + +単一のコンテナをInitコンテナとして指定するためには、PodSpecにそのアプリケーションの`containers`配列と並べて、`initContainers`フィールドを[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)型のオブジェクトのJSON配列として指定してください。 +Initコンテナのステータスは、`.status.initContainerStatuses`フィールドにコンテナのステータスの配列として返されます(`.status.containerStatuses`と同様)。 + +### 通常のコンテナとの違い + +Initコンテナは、リソースリミット、ボリューム、セキュリティ設定などのアプリケーションコンテナの全てのフィールドと機能をサポートしています。しかし、Initコンテナに対するリソースリクエストやリソースリミットの扱いは微妙に異なり、下記の[Resources](#resources)にて説明します。また、InitコンテナはそのPodの準備ができ前に完了しなくてはならないため、`readinessProbe`をサポートしていません。 + +もし複数のInitコンテナが単一のPodに対して指定された場合、それらのInitコンテナは1つずつ順番に実行されます。各Initコンテナは次のコンテナが完了できる前に完了しなくてはなりません。全てのInitコンテナが実行完了した時、KubernetesはPodを初期化し、通常通りアプリケーションコンテナを稼働させます。 + +## Initコンテナは何に使用できるか? + +Initコンテナはアプリケーションコンテナのイメージとは分離されているため、コンテナの起動に関連したコードにおいていくつかの利点があります。 + +* セキュリティの理由からアプリケーションコンテナのイメージに含めたくないユーティリティーを含んだり実行できます。 +* アプリケーションのイメージに存在していないセットアップ用のユーティリティーやカスタムコードを含むことができます。例えば、セットアップ中に`sed`、`awk`、`python`や、`dig`のようなツールを使うための他のイメージから、アプリケーションのイメージを作る必要がなくなります。 +* アプリケーションイメージをひとまとめにしてビルドすることなく、アプリケーションのイメージ作成と、デプロイ処理を独立して行うことができます。 +* アプリケーションコンテナと別のファイルシステムビューを持つために、Linuxの名前空間を使用します。その結果、アプリケーションコンテナがアクセスできない箇所へのシークレットなアクセス権限を得ることができます。 +* Initコンテナはアプリケーションコンテナの実行の前に完了しますが、その一方で、複数のアプリケーションコンテナは並列に実行されます。そのためInitコンテナはいくつかの前提条件をセットされるまで、アプリケーションコンテナの起動をブロックしたり遅らせることができます。 + +### 使用例 + +ここではInitコンテナの使用例を挙げます。 + +* シェルコマンドを使って単一のServiceが作成されるのを待機します。 + + for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1 + +* コマンドを使って下位のAPIからこのPodをリモートサーバに登録します。 + + `curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d 'instance=$()&ip=$()'` + +* `sleep 60`のようなコマンドを使ってアプリケーションコンテナが起動する前に待機します。 +* ボリュームにあるgitリポジトリをクローンします。 +* メインのアプリケーションコンテナのための設定ファイルを動的に生成するために、いくつかの値を設定ファイルに移してテンプレートツールを稼働させます。例えば、設定ファイルにそのPodのPOD_IPを移して、Jinjaを使ってメインのアプリケーションコンテナの設定ファイルを生成します。 + +さらに詳細な使用例は、[StatefulSetsのドキュメント](/docs/concepts/workloads/controllers/statefulset/)と[Production Pods guide](/docs/tasks/configure-pod-container/configure-pod-initialization/)にまとまっています。 + +### Initコンテナの使用 + +下記のKubernetes1.5用のyamlファイルは、2つのInitコンテナを含む単一のシンプルなポッドの概要となります。 +最初のInitコンテナの例は、`myservies`、2つ目のInitコンテナは`mydb`の起動をそれぞれ待ちます。2つのコンテナの実行が完了するとPodの起動が始まります。 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: myapp-pod + labels: + app: myapp + annotations: + pod.beta.kubernetes.io/init-containers: '[ + { + "name": "init-myservice", + "image": "busybox:1.28", + "command": ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"] + }, + { + "name": "init-mydb", + "image": "busybox:1.28", + "command": ["sh", "-c", "until nslookup mydb; do echo waiting for mydb; sleep 2; done;"] + } + ]' +spec: + containers: + - name: myapp-container + image: busybox:1.28 + command: ['sh', '-c', 'echo The app is running! && sleep 3600'] +``` + +古いアノテーション構文がKubernetes1.6と1.7において有効ですが、1.6では新しい構文にも対応しています。Kubernetes1.8以降では新しい構文はを使用する必要があります。KubernetesではInitコンテナの宣言を`spec`に移行させました。 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: myapp-pod + labels: + app: myapp +spec: + containers: + - name: myapp-container + image: busybox:1.28 + command: ['sh', '-c', 'echo The app is running! && sleep 3600'] + initContainers: + - name: init-myservice + image: busybox:1.28 + command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;'] + - name: init-mydb + image: busybox:1.28 + command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;'] +``` + +Kubernetes1.5での構文は1.6においても稼働しますが、1.6の構文の使用を推奨します。Kubernetes1.6において、API内でInitコンテナのフィールド作成されます。ベータ版のアノテーションはKubernetes1.6と1.7において有効ですが、1.8以降ではサポートされません。 + +下記のyamlファイルは`mydb`と`myservice`というServiceの概要です。 + +```yaml +kind: Service +apiVersion: v1 +metadata: + name: myservice +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 9376 +--- +kind: Service +apiVersion: v1 +metadata: + name: mydb +spec: + ports: + - protocol: TCP + port: 80 + targetPort: 9377 +``` + +このPodは、下記のコマンドによって起動とデバッグすることが可能です。 + +```shell +kubectl apply -f myapp.yaml +``` +``` +pod/myapp-pod created +``` + +```shell +kubectl get -f myapp.yaml +``` +``` +NAME READY STATUS RESTARTS AGE +myapp-pod 0/1 Init:0/2 0 6m +``` + +```shell +kubectl describe -f myapp.yaml +``` +``` +Name: myapp-pod +Namespace: default +[...] +Labels: app=myapp +Status: Pending +[...] +Init Containers: + init-myservice: +[...] + State: Running +[...] + init-mydb: +[...] + State: Waiting + Reason: PodInitializing + Ready: False +[...] +Containers: + myapp-container: +[...] + State: Waiting + Reason: PodInitializing + Ready: False +[...] +Events: + FirstSeen LastSeen Count From SubObjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 16s 16s 1 {default-scheduler } Normal Scheduled Successfully assigned myapp-pod to 172.17.4.201 + 16s 16s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Pulling pulling image "busybox" + 13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Pulled Successfully pulled image "busybox" + 13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Created Created container with docker id 5ced34a04634; Security:[seccomp=unconfined] + 13s 13s 1 {kubelet 172.17.4.201} spec.initContainers{init-myservice} Normal Started Started container with docker id 5ced34a04634 +``` +```shell +kubectl logs myapp-pod -c init-myservice # 1つ目のInitコンテナを調査する +kubectl logs myapp-pod -c init-mydb # 2つ目のInitコンテナを調査する +``` + +一度`mydq`と`myservice` Serviceを起動させると、Initコンテナが完了して`myapp-pod`が作成されるのを確認できます。 + +```shell +kubectl apply -f services.yaml +``` +``` +service/myservice created +service/mydb created +``` + +```shell +kubectl get -f myapp.yaml +NAME READY STATUS RESTARTS AGE +myapp-pod 1/1 Running 0 9m +``` + +この例は非常にシンプルですが、ユーザー独自のInitコンテナを作成するためのインスピレーションを提供するでしょう。 + +## Initコンテナのふるまいに関する詳細 + +単一のPodが起動している間、ネットワークとボリュームが初期化されたのちに、Initコンテナは順番に起動されます。各Initコンテナは次のInitコンテナが起動する前に完了しなくてはなりません。もしあるInitコンテナがランタイムもしくはエラーにより起動失敗した場合、そのPodの`restartPolicy`の値をもとにリトライされます。しかし、もしPodの`retartPolicy`が`Always`に設定されていた場合、そのInitコンテナの`restartPolicy`は`OnFailure`となります。 + +Podは全てのInitコンテナが完了するまで`Ready`状態となりません。Initコンテナ上のポートはServiceによって集約されません。初期化中のPodのステータスは`Pending`となりますが、`Initializing`という値はtrueとなります。 + +もしそのPodが[再起動](#pod-restart-reasons)されたとき、全てのInitコンテナは再度実行されなくてはなりません。 + +Initコンテナのスペックに対する変更はコンテナのイメージフィールドのみに限定されます。 +Initコンテナのイメージフィールド値の変更は、そのPodの再起動することと等しいです。 + +Initコンテナは何度も再起動、リトライ可能なため、べき等(Idempotent)である必要があります。特に、`EmptyDirs`にファイルを書き込むコードは、書き込み先のファイルがすでに存在している可能性を考慮に入れるべきです。 + +Initコンテナはアプリケーションコンテナの全てのフィールドを持っています。しかしKubernetesは、Initコンテナが完了と異なる状態を定義できないため`readinessProbe`が使用されることを禁止しています。これはバリデーションの際に強要されます。 + +Initコンテナがずっと失敗し続けたままの状態を防ぐために、Podに`activeDeadlineSeconds`、コンテナに`livenessProbe`の設定をそれぞれ使用してください。`activeDeadlineSeconds`の設定はInitコンテナにも適用されます。 + +あるPod内の各アプリケーションコンテナとInitコンテナの名前はユニークである必要があります。他のコンテナと同じ名前を共有していた場合、バリデーションエラーが返されます。 + +### リソース + +Initコンテナの順序と実行を考えるとき、リソースの使用に関して下記のルールが適用されます。 + +* 全てのInitコンテナの中で定義された最も高いリソースリクエストとリソースリミットが、*有効なInitリクエストとリミット* になります。 +* Podのリソースの*有効なリクエストとリミット* は、下記の2つの中のどちらか高い方となります。 + * そのリソースの全てのアプリケーションコンテナのリクエストとリミットの合計 + * そのリソースの有効なInitリクエストとリミット +* スケジューリングは有効なリクエストとリミットに基づいて実行されます。これはInitコンテナがそのPodの生存中に使われない初期化のためのリソースを保持することができることを意味しています。 +* Podの*有効なQosティアー* は、Initコンテナとアプリケーションコンテナで同様です。 + +クォータとリミットは有効なPodリクエストとリミットに基づいて適用されます。 + +Podレベルのcgroupsは、スケジューラーと同様に、有効なPodリクエストとリミットに基づいています。 + +### Podの再起動の理由 + +単一のPodは再起動可能で、Initコンテナの再実行も引き起こします。それらは下記の理由によるものです。 + +* あるユーザーが、そのPodのInitコンテナのイメージを変更するようにPodSpecを更新する場合。アプリケーションコンテナのイメージの変更はそのアプリケーションコンテナの再起動のみ行われます。 +* そのPodのインフラストラクチャーコンテナが再起動された場合。これはあまり起きるものでなく、Nodeに対するルート権限を持ったユーザーにより行われることがあります。 +* `restartPolicy`が`Always`と設定されているとき、単一Pod内の全てのコンテナが停止され、再起動が行われた時と、ガーベージコレクションによりInitコンテナの完了記録が失われた場合。 + +## サポートと互換性 + +ApiServerのバージョン1.6.0かそれ以上のバージョンのクラスターは、`.spec.initContainers`フィールドを使ったInitコンテナの機能をサポートしています。 +それ以前のバージョンでは、α版かβ版のアノテーションを使ってInitコンテナを使用できます。また、`.spec.initContainers`フィールドは、Kubernetes1.3.0かそれ以上のバージョンでInitコンテナを使用できるようにするためと、ApiServerバージョン1.6において、1.5.xなどの古いバージョンにロールバックできるようにするために、α版かβ版のアノテーションにミラーされ、存在するPodのInitコンテナの機能が失われることが無いように安全にロールバックできるようにします。 + +ApiServerとKubeletバージョン1.8.0かそれ以上のバージョンでは、α版とβ版のアノテーションは削除されており、廃止されたアノテーションは`.spec.initContainers`フィールドへの移行が必須となります。 + +{{% /capture %}} + + +{{% capture whatsnext %}} + +* [Initコンテナを持っているPodの作成](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container) + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/pods/pod-overview.md b/content/ja/docs/concepts/workloads/pods/pod-overview.md new file mode 100644 index 0000000000000..2386912c7633b --- /dev/null +++ b/content/ja/docs/concepts/workloads/pods/pod-overview.md @@ -0,0 +1,121 @@ +--- +reviewers: +- erictune +title: Podについての概観(Pod Overview) +content_template: templates/concept +weight: 10 +card: + name: concepts + weight: 60 +--- + +{{% capture overview %}} +このページでは、Kubernetesのオブジェクトモデルにおいて、デプロイ可能な最小単位のオブジェクトである`Pod`に関して概観します。 +{{% /capture %}} + + +{{% capture body %}} +## Podについて理解する + +*Pod* は、Kubernetesの基本的なビルディングブロックとなります。Kubernetesオブジェクトモデルの中で、ユーザーが作成し、デプロイ可能なシンプルで最も最小のユニットです。単一のPodはクラスター上で稼働する単一のプロセスを表現します。 + +単一のPodは、アプリケーションコンテナ(いくつかの場合においては複数のコンテナ)や、ストレージリソース、ユニークなネットワークIPや、コンテナがどのように稼働すべきか統制するためのオプションをカプセル化します。単一のPodは、ある単一のDeploymentのユニット(単一のコンテナもしくはリソースを共有する、密接に連携された少数のコンテナ群を含むような*Kubernetes内でのアプリケーションの単一のインスタンス*) を表現します。 + +> [Docker](https://www.docker.com)はKubernetesのPod内で使われる最も一般的なコンテナランタイムですが、Podは他のコンテナランタイムも同様にサポートしています。 + +Kubernetesクラスター内でのPodは2つの主な方法で使うことができます。 + +* **単一のコンテナを稼働させるPod** : いわゆる*「1Pod1コンテナ」* 構成のモデルは、最も一般的なKubernetesのユースケースです。 +このケースでは、ユーザーはPodを単一のコンテナのラッパーとして考えることができ、Kubernetesはコンテナを直接扱うというよりは、Podを管理することになります。 +* **協調して稼働させる必要がある複数のコンテナを稼働させるPod** : 単一のPodは、リソースを共有する必要があるような、密接に連携した複数の同じ環境にあるコンテナからなるアプリケーションをカプセル化することもできます。 これらの同じ環境にあるコンテナ群は、サービスの結合力の強いユニットを構成することができます。 +-- 1つのコンテナが、共有されたボリュームからファイルをパブリックな場所に送信し、一方では分割された*サイドカー* コンテナがそれらのファイルを更新します。そのPodはそれらのコンテナとストレージリソースを、単一の管理可能なエンティティとしてまとめます。 + +[Kubernetes Blog](http://kubernetes.io/blog)にて、Podのユースケースに関するいくつかの追加情報を見ることができます。 +さらなる情報を得たい場合は、下記のページを参照ください。 + +* [The Distributed System Toolkit: Patterns for Composite Containers](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns) +* [Container Design Patterns](https://kubernetes.io/blog/2016/06/container-design-patterns) + +各Podは、与えられたアプリケーションの単一のインスタンスを稼働するためのものです。もしユーザーのアプリケーションを水平にスケールさせたい場合(例: 複数インスタンスを稼働させる)、複数のPodを使うべきです。1つのPodは各インスタンスに対応しています。 +Kubernetesにおいて、これは一般的に_レプリケーション_ と呼ばれます。 +レプリケーションされたPodは、通常コントローラーと呼ばれる抽象概念によって単一のグループとして作成、管理されます。 +さらなる情報に関しては[Podとコントローラー](#pods-and-controllers)を参照して下さい。 + +### Podがどのように複数のコンテナを管理しているか + +Podは凝集性の高いサービスのユニットを構成するような複数の協調プロセス(コンテナ)をサポートするためにデザインされました。 +単一のPod内のコンテナ群は、クラスター内において同一の物理マシンもしくは仮想マシン上において自動で同じ環境に配備され、スケジュールされます。コンテナはリソースや依存関係を共有し、お互いにコミュニケートし、それらがいつ、どのように削除されるかを調整できます。 + +注意点として、単一のPod内で同じ環境に配備され、同時管理される複数のコンテナをグルーピングするのは、比較的に発展的なユースケースとなります。 +ユーザーは、コンテナ群が密接に連携するような、特定のインスタンスにおいてのみこのパターンを使用するべきです。 +例えば、ユーザーが共有ボリューム内にあるファイル用のWebサーバとして稼働するコンテナと、下記のダイアグラムにあるような、リモートのソースからファイルを更新するような分離された*サイドカー* コンテナを持っているような場合です。 + + +{{< figure src="/images/docs/pod.svg" title="Podのダイアグラム" width="50%" >}} + +Podは、Podによって構成されたコンテナ群のために2種類の共有リソースを提供します。 *ネットワーキング* と*ストレージ* です。 + +#### ネットワーキング + +各Podは固有のIPアドレスを割り当てられます。単一のPod内の各コンテナは、IPアドレスやネットワークポートを含む、そのネットワークの名前空間を共有します。*Pod内の* コンテナは`localhost`を使用してお互いに疎通できます。単一のPod内のコンテナが*Pod外* のエンティティと疎通する場合、共有されたネットワークリソース(ポートなど)をどのように使うかに関して調整しなければなりません。 + +#### ストレージ + +単一のPodは共有されたストレージ*ボリューム* のセットを指定できます。Pod内の全てのコンテナは、その共有されたボリュームにアクセスでき、コンテナ間でデータを共有することを可能にします。ボリュームもまた、もしPod内のコンテナの1つが再起動が必要になった場合に備えて、データを永続化できます。 +単一のPod内での共有ストレージをKubernetesがどう実装しているかについてのさらなる情報については、[Volumes](/docs/concepts/storage/volumes/)を参照してください。 + +## Podを利用する + +ユーザーはまれに、Kubenetes内で独立したPodを直接作成する場合があります(シングルトンPodなど)。 +これはPodが比較的、一時的な使い捨てエンティティとしてデザインされているためです。Podが作成された時(ユーザーによって直接的、またはコントローラーによって間接的に作成された場合)、ユーザーのクラスター内の単一のNode上で稼働するようにスケジューリングされます。そのPodはプロセスが停止されたり、Podオブジェクトが削除されたり、Podがリソースの欠如のために*追い出され* たり、Nodeが故障するまでNode上に残り続けます。 + +{{< note >}} +単一のPod内でのコンテナを再起動することと、そのPodを再起動することを混同しないでください。Podはそれ自体は実行されませんが、コンテナが実行される環境であり、削除されるまで存在し続けます。 +{{< /note >}} + +Podは、Podそれ自体によって自己修復しません。もし、稼働されていないNode上にPodがスケジュールされた場合や、スケジューリング操作自体が失敗した場合、Podが削除されます。同様に、Podはリソースの欠如や、Nodeのメンテナンスによる追い出しがあった場合はそこで停止します。Kubernetesは*コントローラー* と呼ばれる高レベルの抽象概念を使用し、それは比較的使い捨て可能なPodインスタンスの管理を行います。 +このように、Podを直接使うのは可能ですが、コントローラーを使用したPodを管理する方がより一般的です。KubernetesがPodのスケーリングと修復機能を実現するためにコントローラーをどのように使うかに関する情報は[Podとコントローラー](#pods-and-controllers)を参照してください。 + +### Podとコントローラー + +単一のコントローラーは、ユーザーのために複数のPodを作成・管理し、レプリケーションやロールアウト、クラスターのスコープ内で自己修復の機能をハンドリングします。例えば、もしNodeが故障した場合、コントローラーは異なるNode上にPodを置き換えるようにスケジューリングすることで、自動的にリプレース可能となります。 + +1つまたはそれ以上のPodを含むコントローラーの例は下記の通りです。 + +* [Deployment](/docs/concepts/workloads/controllers/deployment/) +* [StatefulSet](/docs/concepts/workloads/controllers/statefulset/) +* [DaemonSet](/docs/concepts/workloads/controllers/daemonset/) + +通常は、コントローラーはユーザーが作成したPodテンプレートを使用して、担当するPodを作成します。 + +## Podテンプレート + +Podテンプレートは、[ReplicationController](/docs/concepts/workloads/controllers/replicationcontroller/)、 [Job](/docs/concepts/jobs/run-to-completion-finite-workloads/)や、 +[DaemonSet](/docs/concepts/workloads/controllers/daemonset/)のような他のオブジェクト内で含まれるPodの仕様となります。 +コントローラーは実際のPodを作成するためにPodテンプレートを使用します。 +下記のサンプルは、メッセージを表示する単一のコンテナを含んだ、シンプルなPodのマニフェストとなります。 + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: myapp-pod + labels: + app: myapp +spec: + containers: + - name: myapp-container + image: busybox + command: ['sh', '-c', 'echo Hello Kubernetes! && sleep 3600'] +``` + +全てのレプリカの現在の理想的な状態を指定するというよりも、Podテンプレートはクッキーの抜き型のようなものです。一度クッキーがカットされると、そのクッキーは抜き型から離れて関係が無くなります。そこにはいわゆる”量子もつれ”といったものはありません。テンプレートに対するその後の変更や新しいテンプレートへの切り替えは、すでに作成されたPod上には直接的な影響はありません。 +同様に、ReplicationControllerによって作成されたPodは、変更後に直接更新されます。これはPodとの意図的な違いとなり、そのPodに属する全てのコンテナの現在の理想的な状態を指定します。このアプローチは根本的にシステムのセマンティクスを単純化し、機能の柔軟性を高めます。 + +{{% /capture %}} + +{{% capture whatsnext %}} +* Podの振る舞いに関して学ぶには下記を参照してください。 + * [Podの停止](/docs/concepts/workloads/pods/pod/#termination-of-pods) + * [Podのライフサイクル](/docs/concepts/workloads/pods/pod-lifecycle/) +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/pods/pod.md b/content/ja/docs/concepts/workloads/pods/pod.md new file mode 100644 index 0000000000000..3987e9f842ed0 --- /dev/null +++ b/content/ja/docs/concepts/workloads/pods/pod.md @@ -0,0 +1,190 @@ +--- +reviewers: +title: Pod +content_template: templates/concept +weight: 20 +--- + +{{% capture overview %}} + +_Pod_ は、Kubernetesで作成および管理できる、デプロイ可能な最小のコンピューティング単位です。 + +{{% /capture %}} + + +{{% capture body %}} + +## Podとは + +_Pod_ は(クジラの小群やエンドウ豆のさやのように)、共有のストレージ/ネットワークを持つ1つ以上のコンテナ(例えばDockerコンテナ)、およびコンテナを実行する方法についての仕様です。Pod内のコンテナ群は常に同じ場所に配置され、協調してスケジューリングされ、共通のコンテキストで実行されます。Podは、アプリケーション固有の「論理ホスト」――やや密に結合した1つ以上のアプリケーション・コンテナを含むもの――をモデル化します。コンテナ以前の世界では、同じ物理または仮想マシン上で実行されることが、同じ論理ホスト上で実行されることを意味するでしょう。 + +Kubernetesは、Dockerだけでなくより多くのコンテナ・ランタイムをサポートしていますが、Dockerは最もよく知られているランタイムであり、Dockerの用語を使ってPodを説明することが可能です。 + +Pod内では、Linux namespaceやcgroupなどのDockerコンテナを分離する一連の要素と同じものがコンテキストとして共有されます。 +Podのコンテキスト内で、個々のアプリケーションに更なる分離が適用されることがあります。 + +Pod内のコンテナはIPアドレスとポートの空間を共有し、 `localhost` を通じてお互いを見つけることができます 。 +また、SystemVセマフォやPOSIX共有メモリなどの標準のプロセス間通信(IPC)を使用して互いに通信することもできます。 +異なるPodのコンテナは異なるIPアドレスを持ち、[特別な設定](/docs/concepts/policy/pod-security-policy/)がなければIPCでは通信できません。 +これらのコンテナは通常、Pod IPアドレスを介して互いに通信します。 + +Pod内のアプリケーションからアクセスできる共有ボリュームを、Podの一部として定義できます。 +このボリュームは個々のアプリケーションのファイルシステムにマウント可能です。 + +[Docker](https://www.docker.com/)の用語でいえば、Podは共有namespaceと共有[ボリューム](/docs/concepts/storage/volumes/)を持つDockerコンテナのグループとしてモデル化されています。 + +個々のアプリケーションコンテナと同様に、Podは(永続的ではなく)比較的短期間の存在と捉えられます。 +[Podのライフサイクル](/docs/concepts/workloads/pods/pod-lifecycle/)で説明しているように、Podが作成されると、一意のID(UID)が割り当てられ、(再起動ポリシーに従って)終了または削除されるまでNodeで実行されるようにスケジュールされます。 +Nodeが停止した場合、そのNodeにスケジュールされたPodは、タイムアウト時間の経過後に削除されます。 +特定のPod(UIDで定義)は新しいNodeに「再スケジュール」されません。 +代わりに、必要に応じて同じ名前で、新しいUIDを持つ同一のPodに置き換えることができます(詳細については[ReplicationController](/docs/concepts/workloads/controllers/replicationcontroller/)を参照してください)。 + +ボリュームなど、Podと同じ存続期間を持つものがあると言われる場合、それは(そのUIDを持つ)Podが存在する限り存在することを意味します。 +そのPodが何らかの理由で削除された場合、たとえ同じ代替物が作成されたとしても、関連するもの(例えばボリューム)も同様に破壊されて再作成されます。 + +{{< figure src="/images/docs/pod.svg" title="Podの図" width="50%" >}} + +*file puller(ファイル取得コンテナ)とWebサーバーを含むマルチコンテナのPod。コンテナ間の共有ストレージとして永続ボリュームを使用している。* + +## Podを用いる動機 + +### 管理 + +Podは、まとまったサービスの単位を形成する複数の協調プロセスのパターンをモデル化したものです。 +構成要素であるアプリケーションの集まりよりも高いレベルの抽象化を提供することによって、アプリケーションのデプロイと管理を単純化します。 +Podは、デプロイや水平スケーリング、レプリケーションの単位として機能します。 +Pod内のコンテナに対しては、同じ場所への配置(共同スケジューリング)、命運の共有(つまり停止)、協調レプリケーション、リソース共有や依存関係の管理が自動的に取り扱われます。 + +### リソース共有と通信 + +Podは、構成要素間でのデータ共有および通信を可能にします。 + +Pod内のアプリケーションはすべて同じネットワーク名前空間(同じIPおよびポートスペース)を使用するため、 `localhost` としてお互いを「見つけて」通信できます。 +このため、Pod内のアプリケーションはそれぞれ使用するポートを調整する必要があります。 +各Podは、他の物理コンピュータやPodと自由に通信するためのフラットな共有ネットワーク空間上にIPアドレスを持ちます。 + +Pod内のアプリケーションコンテナのホスト名には、Podの名前が設定されます。 +詳細は[クラスターネットワーク](/docs/concepts/cluster-administration/networking/)をご覧ください。 + +Podで実行されるアプリケーションコンテナの定義に加えて、Podによって共有ストレージであるボリュームを複数設定することも可能です。 +ボリュームを使用すると、データはコンテナの再起動後も存続し、Pod内のアプリケーション間で共有できます。 + +## Podの用途 + +Podは、垂直に統合されたアプリケーションスタック(例:LAMP)をホストするために使用できます。 +しかし、Podを使う主な動機は、次のように同じ場所に配置され、共に管理されるヘルパープログラムをサポートすることです。 + +* コンテンツ管理システム(CMS)、ファイルやデータのローダー、ローカルのキャッシュマネージャーなど +* ログとチェックポイントのバックアップ、圧縮、ローテーション、スナップショットなど +* データの変更を監視するもの、ログをtailするもの、ロギングおよび監視の補助プログラム、イベントを発行するものなど +* プロキシ、ブリッジ、およびアダプタ +* コントローラー、マネージャー、コンフィギュレーター、およびアップデーター + +個々のPodは、一般に、同じアプリケーションの複数のインスタンスを実行することを目的としていません。 + +詳細については、[The Distributed System ToolKit: Patterns for +Composite Containers](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns)(分散システムツールキット:複合コンテナのパターン)を参照してください。 + +## 考えられる代替案 + +_単一の(Docker)コンテナで複数のプログラムを実行しないのはなぜですか?_ + +1. 透明性のため。Pod内のコンテナをインフラストラクチャから見えるようにすることで、インフラストラクチャはプロセス管理やリソース監視などのサービスをコンテナに提供できます。 +これは、ユーザーに多くの便益を提供します。 +1. ソフトウェアの依存関係を減らすため。 +個々のコンテナは、独立してバージョン管理、再構築、および再デプロイできます。 +Kubernetesはいつか個々のコンテナのライブアップデートをサポートするかもしれません。 +1. 使いやすさのため。ユーザーは独自のプロセスマネージャーを実行する必要はありません。シグナルや終了コードの伝播などについて心配する必要はありません。 +1. 効率のため。インフラストラクチャがより責任を負うため、コンテナはより軽量になります。 + +_アフィニティ(結合性、親和性)ベースのコンテナの共同スケジューリングをサポートしないのはなぜですか?_ + +このアプローチによって、コンテナの共同配置は提供されるでしょう。 +しかし、リソース共有やIPC、保証された命運の共有、および簡素化された管理といったPodの利点のほとんどは提供されないでしょう。 + + +## Podの耐久性(またはその欠如) + +Podは、耐久性のある存在として扱われることを意図していません。 +スケジューリングの失敗や、Nodeの故障には耐えられません。 +リソースの不足やNodeのメンテナンスといった場合に、追い出されて停止することもあり得ます。 + +一般に、ユーザーはPodを直接作成する必要はありません。 +ほとんどの場合、対象がシングルトンであったとしても、[Deployments](/docs/concepts/workloads/controllers/deployment/)などのコントローラーを使用するべきです。 +コントローラーは、レプリケーションとロールアウト管理だけでなく、クラスターレベルの自己修復機能も提供します。 +[StatefulSet](/docs/concepts/workloads/controllers/statefulset.md)ようなコントローラーもステートフルなPodをサポートします。 + +主要なユーザー向けのプリミティブとして集合APIを使用することは、[Borg](https://research.google.com/pubs/pub43438.html)、 [Marathon](https://mesosphere.github.io/marathon/docs/rest-api.html)、[Aurora](http://aurora.apache.org/documentation/latest/reference/configuration/#job-schema)、[Tupperware](http://www.slideshare.net/Docker/aravindnarayanan-facebook140613153626phpapp02-37588997)などのクラスタースケジューリングシステムで比較的一般的です。 + +Podは、以下のことを容易にするためにプリミティブとして公開されています。 + +* スケジューラーとコントローラーをプラガブルにする +* コントローラーAPIを介して「プロキシ」の必要なしに、Podレベルの操作をサポートする +* ブートストラップなどのために、コントローラーの寿命からPodの寿命を切り離す +* コントローラーとサービスを分離する――エンドポイントコントローラーはPodのみを監視する +* Kubeletレベルの機能とクラスターレベルの機能をきれいに組み合わせる――Kubeletは事実上「Podコントローラー」となる +* アプリケーションの可用性を高める。 +即ち、計画的な追い出しやイメージのプリフェッチなどの場合に、Podが停止し削除される前に、必ず事前に入れ換えられることを期待する + +## Podの終了 + +Podは、クラスター内のNodeで実行中のプロセスを表すため、不要になったときにそれらのプロセスを正常に終了できるようにすることが重要です(対照的なケースは、KILLシグナルで強制終了され、クリーンアップする機会がない場合)。 +ユーザーは削除を要求可能であるべきで、プロセスがいつ終了するかを知ることができなければなりませんが、削除が最終的に完了することも保証できるべきです。 +ユーザーがPodの削除を要求すると、システムはPodが強制終了される前に意図された猶予期間を記録し、各コンテナのメインプロセスにTERMシグナルが送信されます。 +猶予期間が終了すると、プロセスにKILLシグナルが送信され、PodはAPIサーバーから削除されます。 +プロセスの終了を待っている間にKubeletかコンテナマネージャーが再起動されると、終了処理は猶予期間の後にリトライされます。 + +フローの例は下のようになります。 + +1. ユーザーがデフォルトの猶予期間(30秒)でPodを削除するコマンドを送信する +1. APIサーバー内のPodは、猶予期間を越えるとPodが「死んでいる」と見なされるように更新される +1. クライアントのコマンドに表示されたとき、Podは「終了中」と表示される +1. (3と同時に)Kubeletは、2の期間が設定されたためにPodが終了中となったことを認識すると、Podのシャットダウン処理を開始する + 1. Pod内のコンテナの1つが[preStopフック](/docs/concepts/containers/container-lifecycle-hooks/#hook-details)を定義している場合は、コンテナの内側で呼び出される。 + 猶予期間が終了した後も `preStop` フックがまだ実行されている場合は、次に、短い延長された猶予期間(2秒)でステップ2が呼び出される + 1. コンテナにTERMシグナルが送信される。Pod内のすべてのコンテナが同時にTERMシグナルを受信するわけではなく、シャットダウンの順序が問題になる場合はそれぞれに `preStop` フックが必要になることがある +1. (3と同時に)Podはサービスを提供するエンドポイントのリストから削除され、ReplicationControllerの実行中のPodの一部とは見なされなくなる。 +ゆっくりとシャットダウンするPodは、(サービスプロキシのような)ロードバランサーがローテーションからそれらを削除するので、トラフィックを処理し続けることはできない +1. 猶予期間が終了すると、Pod内でまだ実行中のプロセスはSIGKILLで強制終了される +1. Kubeletは猶予期間を0(即時削除)に設定することでAPIサーバー上のPodの削除を終了する。 +PodはAPIから消え、クライアントからは見えなくなる + +デフォルトでは、すべての削除は30秒以内に正常に行われます。 +`kubectl delete` コマンドは、ユーザーがデフォルト値を上書きして独自の値を指定できるようにする `--grace-period=` オプションをサポートします。 +値 `0` はPodを[強制的に削除](/docs/concepts/workloads/pods/pod/#force-deletion-of-pods)します。 +kubectlのバージョン1.5以降では、強制削除を実行するために `--grace-period=0` と共に `--force` というフラグを追加で指定する必要があります。 + +### Podの強制削除 + +Podの強制削除は、クラスターの状態やetcdからPodを直ちに削除することと定義されます。 +強制削除が実行されると、apiserverは、Podが実行されていたNode上でPodが停止されたというkubeletからの確認を待ちません。 +API内のPodは直ちに削除されるため、新しいPodを同じ名前で作成できるようになります。 +Node上では、すぐに終了するように設定されるPodは、強制終了される前にわずかな猶予期間が与えられます。 + +強制削除は、Podによっては潜在的に危険な場合があるため、慎重に実行する必要があります。 +StatefulSetのPodについては、[StatefulSetからPodを削除するためのタスクのドキュメント](/docs/tasks/run-application/force-delete-stateful-set-pod/)を参照してください。 + +## Podコンテナの特権モード + +Kubernetes v1.1以降、Pod内のどのコンテナでも、コンテナ仕様の `SecurityContext` の `privileged ` フラグを使用して特権モードを有効にできます。 +これは、ネットワークスタックの操作やデバイスへのアクセスなど、Linuxの機能を使用したいコンテナにとって役立ちます。 +コンテナ内のプロセスは、コンテナ外のプロセスで利用できるものとほぼ同じ特権を獲得します。 +特権モードでは、ネットワークプラグインとボリュームプラグインを別々のPodとして作成する方が簡単なはずです。それらをkubeletにコンパイルする必要はありません。 + +マスターがKubernetes v1.1以降を実行しており、Nodeがv1.1より前のバージョンを実行している場合、新しい特権付きのPodはAPIサーバーに受け入れられますが、起動されません。 +それらは保留状態になります。 +ユーザーが `kubectl describe pod FooPodName` を実行すると、Podが保留状態になっている理由を確認できます。 +describeコマンド出力のイベントテーブルには、次のように表示されます。 +`Error validating pod "FooPodName"."FooPodNamespace" from api, ignoring: spec.containers[0].securityContext.privileged: forbidden '<*>(0xc2089d3248)true'` + +マスターがv1.1より前のバージョンを実行している場合、特権を持つPodは作成できません。 +ユーザーが特権付きのコンテナを含むPodを作成しようとすると、次のエラーを受け取ります。 +`The Pod "FooPodName" is invalid. +spec.containers[0].securityContext.privileged: forbidden '<*>(0xc20b222db0)true'` + +## APIオブジェクト + +PodはKubernetes REST APIのトップレベルのリソースです。 +APIオブジェクトの詳細については、[Pod APIオブジェクト](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#pod-v1-core)を参照してください 。 + +{{% /capture %}} diff --git a/content/ja/docs/concepts/workloads/pods/podpreset.md b/content/ja/docs/concepts/workloads/pods/podpreset.md new file mode 100644 index 0000000000000..7638d63acbc64 --- /dev/null +++ b/content/ja/docs/concepts/workloads/pods/podpreset.md @@ -0,0 +1,60 @@ +--- +reviewers: +title: Pod Preset +content_template: templates/concept +weight: 50 +--- + +{{% capture overview %}} +このページではPodPresetについて概観します。PodPresetは、Podの作成時にそのPodに対して、Secret、Volume、VolumeMountや環境変数など、特定の情報を注入するためのオブジェクトです。 +{{% /capture %}} + + +{{% capture body %}} +## PodPresetを理解する + +`PodPreset`はPodの作成時に追加のランタイム要求を注入するためのAPIリソースです。 +ユーザーはPodPresetを適用する対象のPodを指定するために、[ラベルセレクター](/docs/concepts/overview/working-with-objects/labels/#label-selectors)を使用します。 + +PodPresetの使用により、Podテンプレートの作者はPodにおいて、全ての情報を明示的に指定する必要がなくなります。 +この方法により、特定のServiceを使っているPodテンプレートの作者は、そのServiceについて全ての詳細を知る必要がなくなります。 + +PodPresetの内部についてのさらなる情報は、[PodPresetのデザインプロポーザル](https://git.k8s.io/community/contributors/design-proposals/service-catalog/pod-preset.md)を参照してください。 + +## PodPresetはどのように動くか + +Kubernetesは`PodPreset`に対する管理用コントローラーを提供し、これが有効になっている時、コントローラーはリクエストされたPod作成要求に対してPodPresetを適用します。 +Pod作成要求が発生した時、Kubernetesシステムは下記の処理を行います。 + +1. 使用可能な全ての`PodPreset`を取得する。 +1. それらの`PodPreset`のラベルセレクターが、作成されたPod上のラベルと一致するかチェックする。 +1. `PodPreset`によって定義された様々なリソースを、作成されたPodにマージしようと試みる。 +1. エラーが起きた時、そのPod上でマージエラーが起きたことを説明するイベントをスローし、`PodPreset`からリソースを1つも注入されていないPodを作成します。 +1. `PodPreset`によって修正されたことを示すために、マージ後の修正されたPodにアノテーションをつけます。そのアノテーションは`podpreset.admission.kubernetes.io/podpreset-: "<リソースのバージョン>"`という形式になります。 + +各Podは0以上のPodPresetにマッチすることができます。そして各`PodPreset`は0以上のPodに適用されます。単一の`PodPreset`が1以上のPodに適用された時、KubernetesはそのPodのSpecを修正します。`Env`、`EnvFrom`、`VolumeMounts`への変更があると、KubernetesはそのPod内の全てのコンテナのSpecを修正します。`Volume`への変更があった場合、KubernetesはそのPodのSpecを修正します。 + +{{< note >}} +単一のPodPresetは必要に応じてPodのSpec内の`.spec.containers`を修正することができます。PodPresetからのリソース定義は`initContainers`フィールドに対して1つも適用されません。 +{{< /note >}} + +### 特定のPodに対するPodPresetを無効にする + +PodPresetによるPodの変更を受け付けたくないようなインスタンスがある場合があります。このようなケースでは、ユーザーはそのPodのSpec内に次のような形式のアノテーションを追加できます。 +`podpreset.admission.kubernetes.io/exclude: "true"` + +## PodPresetを有効にする + +ユーザーのクラスター内でPodPresetを使うためには、クラスター内の以下の項目をご確認ください。 + +1. `settings.k8s.io/v1alpha1/podpreset`というAPIを有効にします。例えば、これはAPI Serverの `--runtime-config`オプションに`settings.k8s.io/v1alpha1=true`を含むことで可能になります。Minikubeにおいては、クラスターの起動時に`--extra-config=apiserver.runtime-config=settings.k8s.io/v1alpha1=true`をつけることで可能です。 +1. `PodPreset`に対する管理コントローラーを有効にします。これを行うための1つの方法として、API Serverの`--enable-admission-plugins`オプションの値に`PodPreset`を含む方法があります。Minikubeにおいては、クラスターの起動時に`--extra-config=apiserver.enable-admission-plugins=Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,PodPreset`を追加することで可能になります。 +1. ユーザーが使う予定のNamespaceにおいて、`PodPreset`オブジェクトを作成することによりPodPresetを定義します。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [PodPresetを使ったPodへのデータの注入](/docs/tasks/inject-data-application/podpreset/) + +{{% /capture %}} diff --git a/content/ja/docs/contribute/_index.md b/content/ja/docs/contribute/_index.md new file mode 100644 index 0000000000000..b452fa57f7cb8 --- /dev/null +++ b/content/ja/docs/contribute/_index.md @@ -0,0 +1,59 @@ +--- +content_template: templates/concept +title: Kubernetesのドキュメントに貢献する +linktitle: 貢献 +main_menu: true +weight: 80 +--- + +{{% capture overview %}} + +あなたがKubernetesのドキュメンテーションやWebサイトに貢献するのを手伝いたいのであれば、私たちはあなたの貢献を嬉しく思います!プロジェクトに関わって日が浅いのか、それとも長きに渡って関わっているのか、開発者、エンドユーザ、または誤植に耐えられない人かどうかに関係なく、誰でも貢献できます。 + +Kubernetesコミュニティに参加する、または私たちについて学ぶためのより多くの方法については、[Kubernetesコミュニティサイト](/community/)をご覧ください。Kubernetesドキュメントのスタイルガイドについては、[スタイルガイド](/docs/contribute/style/style-guide/)を参照してください。 + +{{% capture body %}} + +## 寄稿者のタイプ + +- [CLAに署名](/docs/contribute/start#sign-the-cla)し、プロジェクトにいくらかの時間と努力を費やしたKubernetes組織の*メンバー*。メンバーシップの具体的な基準については、[コミュニティメンバーシップ](https://github.com/kubernetes/community/blob/master/community-membership.md)を参照してください。 +- SIG Docs*レビューワー*は、ドキュメントのプルリクエストのレビューに関心を示し、SIG Docs承認者によってGithubリポジトリの適切なGithubグループと`OWNERS`ファイルに追加されたKubernetes組織のメンバーです。 +- SIG Docs*承認者*は、プロジェクトに対する継続的なコミットメントを示している優秀なメンバーです。承認者はKubernetes組織に代わってプルリクエストをマージし、コンテンツを公開できます。承認者は、より大きなKubernetesコミュニティのSIG Docsを代表することもできます。リリースの調整など、SIG Docs承認者の任務の中には、かなりの時間を要するものがあります。 + +## 貢献する方法 + +このリストは、誰でもできること、Kubernetes組織のメンバーができること、そしてより高いレベルのアクセスとSIG Docsプロセスへの精通を必要とすることに分けられます。時間をかけて一貫して貢献することで、すでに行われた作業や組織上の決定について理解するのに役立ちます。 + +これはKubernetesのドキュメントに貢献できる方法の網羅的なリストではありませんが、始めるのに役立ちます。 + +- [全ての人](/docs/contribute/start/) + - 対処可能なバグのファイル +- [メンバー](/docs/contribute/start/) + - 既存のドキュメントの改善 + - [Slack](http://slack.k8s.io/)または[SIG docsメーリングリスト](https://groups.google.com/forum/#!forum/kubernetes-sig-docs)で改善のためのアイデアを発案 + - ドキュメントのアクセシビリティの向上 + - PRに拘束力のないフィードバックの提供 + - ブログ記事やケーススタディの執筆・投稿 +- [レビューワー](/docs/contribute/intermediate/) + - 新機能のドキュメンテーション + - 問題のトリアージと分類 + - PRの確認 + - ダイアグラム、グラフィックアセット、および埋め込み可能なスクリーンキャスト/ビデオの作成 + - ローカライゼーション + - ドキュメントの代表として他のリポジトリに貢献する + - コード内のユーザー向け文字列を編集する + - Godoc、コードのコメントを改善する +- [承認者](/docs/contribute/advanced/) + - PRを承認およびマージして寄稿者コンテンツを公開 + - ドキュメント代表としてKubernetesリリースチームに参加する + - スタイルガイドに改善を提案する + - docsテストの改善を提案する + - KubernetesのWebサイトまたはその他のツールの改良を提案する + + +## 貢献するその他の方法 + +- TwitterやStack Overflowなどのオンラインフォーラムを通じてKubernetesコミュニティに貢献したり、ローカルのミートアップやKubernetesイベントについて学ぶには、[Kubernetesコミュニティサイト](/community/)にアクセスしてください。 +- 機能の開発に貢献するには、[コントリビューターチートシート](https://github.com/kubernetes/community/tree/master/contributors/guide/contributor-cheatsheet)を読んで始めてください。 + +{{% /capture %}} diff --git a/content/ja/docs/home/_index.md b/content/ja/docs/home/_index.md index 4f086ca39b102..ec4e3222fa07b 100644 --- a/content/ja/docs/home/_index.md +++ b/content/ja/docs/home/_index.md @@ -1,4 +1,5 @@ --- +approvers: title: Kubernetesドキュメント noedit: true cid: docsHome @@ -15,42 +16,42 @@ menu: post: >

チュートリアル、サンプルやドキュメントのリファレンスを使って Kubernetes の利用方法を学んでください。あなたはドキュメントへコントリビュートをすることもできます!

overview: > - Kubernetesは、自動デプロイ、スケーリング、およびコンテナ化されたアプリケーションの管理を行うための、オープンソースのコンテナオーケストレーションエンジンです。本オープンソースプロジェクトは、Cloud Native Computing Foundation (CNCF).によって管理されています。 + Kubernetesは、コンテナ化されたアプリケーションの展開、スケーリング、また管理を自動化するためのオープンソースコンテナプラットフォームです。このオープンソースプロジェクトは、Cloud Native Computing Foundationによってホストされています(CNCF)。 cards: - name: concepts title: "基本を理解する" - description: "Kubernetesに基本的なコンセプトについて学びます。" + description: "Kubernetesとその基本的なコンセプトを学びます。" button: "コンセプトを学ぶ" - button_path: "/ja/docs/concepts" + button_path: "/docs/concepts" - name: tutorials - title: "Kubernetesを試用する" - description: "チュートリアルに沿って、Kubernetesにアプリケーションをデプロイする方法を学びます。" + title: "Kubernetesを試す" + description: "Kubernetesにどのようにアプリケーションを展開するかを、チュートリアルから学びます。" button: "チュートリアルを見る" - button_path: "/ja/docs/tutorials" + button_path: "/docs/tutorials" - name: setup - title: "クラスターを立ち上げる" - description: "ご自身のリソースや要件に合わせたKubernetes環境を動かしてみましょう。" - button: "Kubernetesをセットアップする" - button_path: "/ja/docs/setup" + title: "クラスターを構築する" + description: "リソースと要求に基づいて、Kubernetesを実行します。" + button: "Kubernetesを構築する" + button_path: "/docs/setup" - name: tasks title: "Kubernetesの使い方を学ぶ" - description: "一般的な使い方と、それらを実行するための短い手順を調べます。" - button: "View Tasks" - button_path: "/ja/docs/tasks" + description: "一般的なタスク、そのタスクを短い手順でどのように実行するかを見てみます。" + button: "タスクを見る" + button_path: "/docs/tasks" - name: reference - title: 参考情報を探す - description: 用語、コマンドラインの構文、APIのリソースタイプ、およびセットアップツールのドキュメントを参照します。 - button: View Reference - button_path: /ja/docs/reference + title: "リファレンス情報を調べる" + description: "用語、コマンドラインの構文、APIリソースタイプ、そして構築ツールのドキュメントを見て回ります。" + button: "リファレンスを見る" + button_path: /docs/reference - name: contribute - title: ドキュメントに貢献する - description: 本プロジェクトに不慣れな方でも、久しぶりの方も、どなたでも貢献することができます。 - button: ドキュメントに貢献する - button_path: /ja/docs/contribute + title: "ドキュメントにコントリビュートする" + description: "プロジェクトに不慣れでも、長い間関わっていたとしても、誰でもコントリビュートすることが出来ます。" + button: "ドキュメントにコントリビュートする" + button_path: /docs/contribute - name: download - title: Kubernetesをダウンロードする - description: Kubernetesをインストールする場合や最新バージョンにアップグレードする場合は、現在のリリースノートを参照してください。 + title: "Kubernetesをダウンロードする" + description: "もしKubernetesをインストールする、また最新バージョンにアップグレードする場合、最新のリリースノートを参照してください。" - name: about - title: ドキュメントについて - description: このWebサイトには、Kubernetesの現在および以前の4つのバージョンに関するドキュメントが含まれています。 + title: "ドキュメントについて" + description: "このサイトは、Kubernetesの最新バージョンと過去4世代のドキュメントを含んでいます。" --- diff --git a/content/ja/docs/reference/glossary/controller.md b/content/ja/docs/reference/glossary/controller.md new file mode 100755 index 0000000000000..908ef77785774 --- /dev/null +++ b/content/ja/docs/reference/glossary/controller.md @@ -0,0 +1,19 @@ +--- +title: Controller +id: controller +date: 2018-04-12 +full_link: /docs/admin/kube-controller-manager/ +short_description: > + クラスターの状態をAPIサーバーから取得、見張る制御ループで、現在の状態を望ましい状態に移行するように更新します。 + +aka: +tags: +- architecture +- fundamental +--- + クラスターの状態を{{< glossary_tooltip text="apiserver" term_id="kube-apiserver" >}}から取得、見張る制御ループで、現在の状態を望ましい状態に移行するように更新します。 + + + +今日、Kubernetesで提供されるコントローラーの例として、レプリケーションコントローラー、エンドポイントコントローラー、名前空間コントローラー、またサービスアカウントコントローラーがあります。 + diff --git a/content/ja/docs/reference/glossary/etcd.md b/content/ja/docs/reference/glossary/etcd.md new file mode 100755 index 0000000000000..34f2c7335f51e --- /dev/null +++ b/content/ja/docs/reference/glossary/etcd.md @@ -0,0 +1,19 @@ +--- +title: etcd +id: etcd +date: 2018-04-12 +full_link: /docs/tasks/administer-cluster/configure-upgrade-etcd/ +short_description: > + 一貫性、高可用性を持ったキーバリューストアで、Kubernetesの全てのクラスター情報の保存場所として利用されています。 + +aka: +tags: +- architecture +- storage +--- + 一貫性、高可用性を持ったキーバリューストアで、Kubernetesの全てのクラスター情報の保存場所として利用されています。 + + + +あなたのKubernetesクラスター情報を守るため、etcdのデータのバックアッププランを持っておいて下さい。etcdに関するより詳細な情報は、[etcdドキュメント](https://github.com/coreos/etcd/blob/master/Documentation/docs.md)を確認してください。 + diff --git a/content/ja/docs/reference/glossary/kube-apiserver.md b/content/ja/docs/reference/glossary/kube-apiserver.md new file mode 100755 index 0000000000000..9c9a130a2ed47 --- /dev/null +++ b/content/ja/docs/reference/glossary/kube-apiserver.md @@ -0,0 +1,19 @@ +--- +title: kube-apiserver +id: kube-apiserver +date: 2018-04-12 +full_link: /docs/reference/generated/kube-apiserver/ +short_description: > + Kubernetes APIを外部に提供する、マスター上のコンポーネントです。これがKubernetesコントロールプレーンのフロントエンドになります。 + +aka: +tags: +- architecture +- fundamental +--- + Kubernetes APIを外部に提供する、マスター上のコンポーネントです。これがKubernetesコントロールプレーンのフロントエンドになります。 + + + +このコンポーネントは、水平スケールするように設計されています。つまり追加でインスタンスを足すことでスケール可能です。さらなる情報は、[高可用性クラスターを構築する](/docs/admin/high-availability/)を確認してください。 + diff --git a/content/ja/docs/reference/glossary/kube-controller-manager.md b/content/ja/docs/reference/glossary/kube-controller-manager.md new file mode 100755 index 0000000000000..e38df64e7138e --- /dev/null +++ b/content/ja/docs/reference/glossary/kube-controller-manager.md @@ -0,0 +1,19 @@ +--- +title: kube-controller-manager +id: kube-controller-manager +date: 2018-04-12 +full_link: /docs/reference/generated/kube-controller-manager/ +short_description: > + マスター上で動く、コントローラー群を動かすコンポーネントです。 + +aka: +tags: +- architecture +- fundamental +--- + マスター上で動く、{{< glossary_tooltip text="controllers" term_id="controller" >}}を動かすコンポーネントです。 + + + +論理的には、各{{< glossary_tooltip text="controller" term_id="controller" >}}は、それぞれ別のプロセスですが、複雑になるのを避けるため、一つの実行ファイルにまとめてコンパイルされ、単一のプロセスとして動きます。 + diff --git a/content/ja/docs/reference/glossary/kube-scheduler.md b/content/ja/docs/reference/glossary/kube-scheduler.md new file mode 100755 index 0000000000000..3c97492e48012 --- /dev/null +++ b/content/ja/docs/reference/glossary/kube-scheduler.md @@ -0,0 +1,18 @@ +--- +title: kube-scheduler +id: kube-scheduler +date: 2018-04-12 +full_link: /docs/reference/generated/kube-scheduler/ +short_description: > + マスター上で動くコンポーネントで、まだノードに紐付けられていない新規に作成されたPodを見張り、稼働させるべきノードを選択します。 + +aka: +tags: +- architecture +--- + マスター上で動くコンポーネントで、まだノードに紐付けられていない新規に作成されたPodを見張り、稼働させるべきノードを選択します。 + + + +スケジューリングで考慮される要因は個別、集合的なものを含んでおり、ハードウェア/ソフトウェア/ポリシーの制約、アフィニティ、アンチアフィニティ設定、データの保存位置関係、稼働しているワークロードごとの干渉と処理完了期限があります。 + diff --git a/content/ja/docs/reference/glossary/kubelet.md b/content/ja/docs/reference/glossary/kubelet.md new file mode 100755 index 0000000000000..f9dbdc156b588 --- /dev/null +++ b/content/ja/docs/reference/glossary/kubelet.md @@ -0,0 +1,19 @@ +--- +title: Kubelet +id: kubelet +date: 2018-04-12 +full_link: /docs/reference/generated/kubelet +short_description: > + クラスター内の各ノードで稼働するエージェントです。コンテナがPod内で稼働していることを保証します。 + +aka: +tags: +- fundamental +- core-object +--- + クラスター内の各ノードで稼働するエージェントです。コンテナがPod内で稼働していることを保証します。 + + + +Kubeletは、様々な機構から提供されるPodSpecs情報を受け取り、それらのPodSpecs情報に記述されているコンテナが正常に稼働していることを保証します。Kubeletは、Kubernetes外で作成されたコンテナは管理しません。 + diff --git a/content/ja/docs/reference/glossary/name.md b/content/ja/docs/reference/glossary/name.md new file mode 100755 index 0000000000000..c9b0bcd5ef421 --- /dev/null +++ b/content/ja/docs/reference/glossary/name.md @@ -0,0 +1,18 @@ +--- +title: 名前(Name) +id: name +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/names +short_description: > + クライアントから提供され、リソースURL内のオブジェクトを参照する文字列です。例えば`/api/v1/pods/何らかの名前`のようになります。 + +aka: +tags: +- fundamental +--- + クライアントから提供され、リソースURL内のオブジェクトを参照する文字列です。例えば`/api/v1/pods/何らかの名前`のようになります。 + + + +同じ種類のオブジェクトは、同じ名前を同時に持つことは出来ません。しかし、オブジェクトを削除することで、旧オブジェクトと同じ名前で新しいオブジェクトを作成できます。 + diff --git a/content/ja/docs/reference/glossary/statefulset.md b/content/ja/docs/reference/glossary/statefulset.md new file mode 100755 index 0000000000000..3b23ea48cebc3 --- /dev/null +++ b/content/ja/docs/reference/glossary/statefulset.md @@ -0,0 +1,24 @@ +--- +title: StatefulSet +id: statefulset +date: 2018-04-12 +full_link: /docs/concepts/workloads/controllers/statefulset/ +short_description: > + Manages the deployment and scaling of a set of Pods, *and provides guarantees about the ordering and uniqueness* of these Pods. + +aka: +tags: +- fundamental +- core-object +- workload +- storage +--- + +StatefulSetはDeploymentと{{< glossary_tooltip text="Pod" term_id="pod" >}}のセットのスケーリングの管理をし、それらのPodの*順序とユニーク性を保証* します。 + + + +{{< glossary_tooltip term_id="deployment" >}}のように、StatefulSetは指定したコンテナのspecに基づいてPodを管理します。Deploymentとは異なり、StatefulSetは各Podにおいて管理が大変な同一性を維持します。これらのPodは同一のspecから作成されますが、それらは交換可能ではなく、リスケジュール処理をまたいで維持される永続的な識別子を持ちます。 + +StatefulSetは他のコントローラーと同様のパターンで動作します。ユーザーはStatefulSet*オブジェクト* の理想的な状態を定義し、StatefulSet*コントローラー* は現在の状態から、理想状態になるために必要なアップデートを行います。 + diff --git a/content/ja/docs/reference/glossary/uid.md b/content/ja/docs/reference/glossary/uid.md new file mode 100755 index 0000000000000..550e6fb9889f0 --- /dev/null +++ b/content/ja/docs/reference/glossary/uid.md @@ -0,0 +1,18 @@ +--- +title: UID +id: uid +date: 2018-04-12 +full_link: /docs/concepts/overview/working-with-objects/names +short_description: > + オブジェクトを一意に識別するためのKubernetesが生成する文字列です。 + +aka: +tags: +- fundamental +--- + オブジェクトを一意に識別するためのKubernetesが生成する文字列です。 + + + +Kubernetesクラスターの生存期間中にわたって生成された全てのオブジェクトは、異なるUIDを持っています。これは類似のエンティティの、同一時間軸での存在を区別するのが目的です。 + diff --git a/content/ja/docs/setup/minikube.md b/content/ja/docs/setup/minikube.md index 913a9b18ba539..483f87c7328db 100644 --- a/content/ja/docs/setup/minikube.md +++ b/content/ja/docs/setup/minikube.md @@ -340,7 +340,7 @@ NodePort上では、 `NodePort` タイプのどのサービスもそのIPアド `kubectl get service $SERVICE --output='jsonpath="{.spec.ports[0].nodePort}"'` -## 永続化ボリューム +## 永続ボリューム Minikubeは `hostPath` タイプの[PersistentVolumes](/docs/concepts/storage/persistent-volumes/)をサポートします。 このPersistentVolumesはMinikubeのVM内のディレクトリーにマッピングされます。 diff --git a/content/ja/docs/tasks/access-application-cluster/service-access-application-cluster.md b/content/ja/docs/tasks/access-application-cluster/service-access-application-cluster.md new file mode 100644 index 0000000000000..9f7fc68061dcf --- /dev/null +++ b/content/ja/docs/tasks/access-application-cluster/service-access-application-cluster.md @@ -0,0 +1,142 @@ +--- +title: Serviceを利用したクラスター内のアプリケーションへのアクセス +content_template: templates/tutorial +weight: 60 +--- + +{{% capture overview %}} + +ここでは、クラスター内で稼働しているアプリケーションに外部からアクセスするために、KubernetesのServiceオブジェクトを作成する方法を紹介します。 +例として、2つのインスタンスから成るアプリケーションへのロードバランシングを扱います。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture objectives %}} + +* 2つのHellow Worldアプリケーションを稼働させる。 +* Nodeのポートを公開するServiceオブジェクトを作成する。 +* 稼働しているアプリケーションにアクセスするためにServiceオブジェクトを使用する。 + +{{% /capture %}} + + +{{% capture lessoncontent %}} + +## 2つのPodから成るアプリケーションのServiceを作成 + +1. クラスタでHello Worldアプリケーションを稼働させます: + ```shell + kubectl run hello-world --replicas=2 --labels="run=load-balancer-example" --image=gcr.io/google-samples/node-hello:1.0 --port=8080 + ``` + このコマンドは + [Deployment](/docs/concepts/workloads/controllers/deployment/) + オブジェクトとそれに紐付く + [ReplicaSet](/docs/concepts/workloads/controllers/replicaset/) + オブジェクトを作成します。ReplicaSetは、Hello Worldアプリケーションが稼働している2つの + [Pod](/docs/concepts/workloads/pods/pod/) + から構成されます。 + +1. Deploymentの情報を表示します: + ```shell + kubectl get deployments hello-world + kubectl describe deployments hello-world + ``` + +1. ReplicaSetオブジェクトの情報を表示します: + ```shell + kubectl get replicasets + kubectl describe replicasets + ``` + +1. Deploymentを公開するServiceオブジェクトを作成します: + ```shell + kubectl expose deployment hello-world --type=NodePort --name=example-service + ``` + +1. Serviceに関する情報を表示します: + ```shell + kubectl describe services example-service + ``` + 出力例は以下の通りです: + ```shell + Name: example-service + Namespace: default + Labels: run=load-balancer-example + Annotations: + Selector: run=load-balancer-example + Type: NodePort + IP: 10.32.0.16 + Port: 8080/TCP + TargetPort: 8080/TCP + NodePort: 31496/TCP + Endpoints: 10.200.1.4:8080,10.200.2.5:8080 + Session Affinity: None + Events: + ``` + NodePortの値を記録しておきます。上記の例では、31496です。 + +1. Hello Worldアプリーションが稼働しているPodを表示します: + ```shell + kubectl get pods --selector="run=load-balancer-example" --output=wide + ``` + 出力例は以下の通りです: + ```shell + NAME READY STATUS ... IP NODE + hello-world-2895499144-bsbk5 1/1 Running ... 10.200.1.4 worker1 + hello-world-2895499144-m1pwt 1/1 Running ... 10.200.2.5 worker2 + ``` +1. Hello World podが稼働するNodeのうち、いずれか1つのパブリックIPアドレスを確認します。 + 確認方法は、使用している環境により異なります。 + 例として、Minikubeの場合は`kubectl cluster-info`、Google Compute Engineの場合は`gcloud compute instances list`によって確認できます。 + +1. 選択したノード上で、NodePortの値でのTCP通信を許可するファイヤーウォールを作成します。 + NodePortの値が31568の場合、31568番のポートを利用したTCP通信を許可するファイヤーウォールを作成します。 + クラウドプロバイダーによって設定方法が異なります。 + +1. Hello World applicationにアクセスするために、Nodeのアドレスとポート番号を使用します: + ```shell + curl http://: + ``` + ここで `` はNodeのパブリックIPアドレス、 + `` はNodePort Serviceのポート番号の値を表しています。 + リクエストが成功すると、下記のメッセージが表示されます: + ```shell + Hello Kubernetes! + ``` + +## service configuration fileの利用 + +`kubectl expose`コマンドの代わりに、 +[service configuration file](/docs/concepts/services-networking/service/) +を使用してServiceを作成することもできます。 + +{{% /capture %}} + + +{{% capture cleanup %}} + +Serviceを削除するには、以下のコマンドを実行します: + + kubectl delete services example-service + +Hello Worldアプリケーションが稼働しているDeployment、ReplicaSet、Podを削除するには、以下のコマンドを実行します: + + kubectl delete deployment hello-world + +{{% /capture %}} + + +{{% capture whatsnext %}} + +詳細は +[serviceを利用してアプリケーションと接続する](/docs/concepts/services-networking/connect-applications-service/) +を確認してください。 +{{% /capture %}} diff --git a/content/ja/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md b/content/ja/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md new file mode 100644 index 0000000000000..51e228aff2a4f --- /dev/null +++ b/content/ja/docs/tasks/configure-pod-container/attach-handler-lifecycle-event.md @@ -0,0 +1,90 @@ +--- +title: コンテナライフサイクルイベントへのハンドラー紐付け +content_template: templates/task +weight: 140 +--- + +{{% capture overview %}} + +このページでは、コンテナのライフサイクルイベントにハンドラーを紐付けする方法を説明します。KubernetesはpostStartとpreStopイベントをサポートしています。Kubernetesはコンテナの起動直後にpostStartイベントを送信し、コンテナの終了直前にpreStopイベントを送信します。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture steps %}} + +## postStartハンドラーとpreStopハンドラーを定義する + +この課題では、1つのコンテナを持つPodを作成します。コンテナには、postStartイベントとpreStopイベントのハンドラーがあります。 + +これがPodの設定ファイルです: + +{{< codenew file="pods/lifecycle-events.yaml" >}} + +設定ファイルでは、postStartコマンドが`message`ファイルをコンテナの`/usr/share`ディレクトリに書き込むことがわかります。preStopコマンドはnginxを適切にシャットダウンします。これは、障害のためにコンテナが終了している場合に役立ちます。 + +Podを作成します: + + kubectl apply -f https://k8s.io/examples/pods/lifecycle-events.yaml + +Pod内のコンテナが実行されていることを確認します: + + kubectl get pod lifecycle-demo + +Pod内で実行されているコンテナでシェルを実行します: + + kubectl exec -it lifecycle-demo -- /bin/bash + +シェルで、`postStart`ハンドラーが`message`ファイルを作成したことを確認します: + + root@lifecycle-demo:/# cat /usr/share/message + +出力は、postStartハンドラーによって書き込まれたテキストを示しています。 + + Hello from the postStart handler + +{{% /capture %}} + + + +{{% capture discussion %}} + +## 議論 + +コンテナが作成された直後にKubernetesはpostStartイベントを送信します。 +ただし、コンテナのエントリーポイントが呼び出される前にpostStartハンドラーが呼び出されるという保証はありません。postStartハンドラーはコンテナのコードに対して非同期的に実行されますが、postStartハンドラーが完了するまでコンテナのKubernetesによる管理はブロックされます。postStartハンドラーが完了するまで、コンテナのステータスはRUNNINGに設定されません。 + +Kubernetesはコンテナが終了する直前にpreStopイベントを送信します。 +コンテナのKubernetesによる管理は、Podの猶予期間が終了しない限り、preStopハンドラーが完了するまでブロックされます。詳細は[Podの終了](/docs/user-guide/pods/#termination-of-pods)を参照してください。 + +{{< note >}} +Kubernetesは、Podが *終了* したときにのみpreStopイベントを送信します。 +これは、Podが *完了* したときにpreStopフックが呼び出されないことを意味します。 +この制限は[issue #55087](https://github.com/kubernetes/kubernetes/issues/55807)で追跡されています。 +{{< /note >}} + +{{% /capture %}} + + +{{% capture whatsnext %}} + +* [コンテナライフサイクルフック](/docs/concepts/containers/container-lifecycle-hooks/)の詳細 +* [Podのライフサイクル](/docs/concepts/workloads/pods/pod-lifecycle/)の詳細 + + +### 参照 + +* [ライフサイクル](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#lifecycle-v1-core) +* [コンテナ](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core) +* [PodSpec](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#podspec-v1-core)の`terminationGracePeriodSeconds` + +{{% /capture %}} + + diff --git a/content/ja/docs/tasks/debug-application-cluster/debug-init-containers.md b/content/ja/docs/tasks/debug-application-cluster/debug-init-containers.md new file mode 100644 index 0000000000000..b9638ff0ba469 --- /dev/null +++ b/content/ja/docs/tasks/debug-application-cluster/debug-init-containers.md @@ -0,0 +1,117 @@ +--- +title: Init Containerのデバッグ +content_template: templates/task +--- + +{{% capture overview %}} + +このページでは、Init Containerの実行に関連する問題を調査する方法を説明します。以下のコマンドラインの例では、Podを``、Init Containerを``および``として参照しています。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +* [Init Container](/docs/concepts/abstractions/init-containers/)の基本を理解しておきましょう。 +* [Init Containerを設定](/docs/tasks/configure-pod-container/configure-pod-initialization/#creating-a-pod-that-has-an-init-container/)しておきましょう。 + +{{% /capture %}} + +{{% capture steps %}} + +## Init Containerのステータスを確認する + +Podのステータスを表示します: + +```shell +kubectl get pod +``` + +たとえば、`Init:1/2`というステータスは、2つのInit Containerのうちの1つが正常に完了したことを示します。 + +``` +NAME READY STATUS RESTARTS AGE + 0/1 Init:1/2 0 7s +``` + +ステータス値とその意味の例については、[Podのステータスを理解する](#understanding-pod-status)を参照してください。 + +## Init Containerの詳細を取得する + +Init Containerの実行に関する詳細情報を表示します: + +```shell +kubectl describe pod +``` + +たとえば、2つのInit Containerを持つPodでは、次のように表示されます: + +``` +Init Containers: + : + Container ID: ... + ... + State: Terminated + Reason: Completed + Exit Code: 0 + Started: ... + Finished: ... + Ready: True + Restart Count: 0 + ... + : + Container ID: ... + ... + State: Waiting + Reason: CrashLoopBackOff + Last State: Terminated + Reason: Error + Exit Code: 1 + Started: ... + Finished: ... + Ready: False + Restart Count: 3 + ... +``` + +また、Pod Specの`status.initContainerStatuses`フィールドを読むことでプログラムでInit Containerのステータスにアクセスすることもできます。: + + +```shell +kubectl get pod nginx --template '{{.status.initContainerStatuses}}' +``` + + +このコマンドは生のJSONで上記と同じ情報を返します。 + +## Init Containerのログにアクセスする + +ログにアクセスするには、Init Container名とPod名を渡します。 + +```shell +kubectl logs -c +``` + +シェルスクリプトを実行するInit Containerは、実行時にコマンドを出力します。たとえば、スクリプトの始めに`set -x`を実行することでBashで同じことができます。 + +{{% /capture %}} + +{{% capture discussion %}} + +## Podのステータスを理解する + +`Init:`で始まるPodステータスはInit Containerの実行ステータスを要約します。以下の表は、Init Containerのデバッグ中に表示される可能性のあるステータス値の例をいくつか示しています。 + +ステータス | 意味 +------ | ------- +`Init:N/M` | Podは`M`個のInit Containerを持ち、これまでに`N`個完了しました。 +`Init:Error` | Init Containerが実行に失敗しました。 +`Init:CrashLoopBackOff` | Init Containerが繰り返し失敗しました。 +`Pending` | PodはまだInit Containerの実行を開始していません。 +`PodInitializing` or `Running` | PodはすでにInit Containerの実行を終了しています。 + +{{% /capture %}} + + + diff --git a/content/ja/docs/tasks/debug-application-cluster/debug-stateful-set.md b/content/ja/docs/tasks/debug-application-cluster/debug-stateful-set.md new file mode 100644 index 0000000000000..ed55b52a233a8 --- /dev/null +++ b/content/ja/docs/tasks/debug-application-cluster/debug-stateful-set.md @@ -0,0 +1,40 @@ +--- +title: StatefulSetのデバッグ +content_template: templates/task +--- + +{{% capture overview %}} + +このタスクでは、StatefulSetをデバッグする方法を説明します。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +* Kubernetesクラスターが必要です。また、kubectlコマンドラインツールがクラスターと通信するように設定されている必要があります。 +* 調べたいStatefulSetを実行しておきましょう。 + +{{% /capture %}} + +{{% capture steps %}} + +## StatefulSetのデバッグ + +StatefulSetに属し、ラベル`app=myapp`が設定されているすべてのPodを一覧表示するには、以下のコマンドを利用できます。 + +```shell +kubectl get pods -l app=myapp +``` + +Podが長期間`Unknown`または`Terminating`の状態になっていることがわかった場合は、それらを処理する方法について[StatefulSet Podsの削除](/docs/tasks/manage-stateful-set/delete-pods/)タスクを参照してください。 +[Podのデバッグ](/docs/tasks/debug-application-cluster/debug-pod-replication-controller/)ガイドを使用して、StatefulSet内の個々のPodをデバッグできます。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +[Init Containerのデバッグ](/docs/tasks/debug-application-cluster/debug-init-containers/)の詳細 + +{{% /capture %}} + + diff --git a/content/ja/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md b/content/ja/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md new file mode 100644 index 0000000000000..5de335c32bd6e --- /dev/null +++ b/content/ja/docs/tasks/debug-application-cluster/determine-reason-pod-failure.md @@ -0,0 +1,96 @@ +--- +title: Pod障害の原因を特定する +content_template: templates/task +--- + +{{% capture overview %}} + +このページでは、コンテナ終了メッセージの読み書き方法を説明します。 + +終了メッセージは、致命的なイベントに関する情報を、ダッシュボードや監視ソフトウェアなどのツールで簡単に取得して表示できる場所にコンテナが書き込むための手段を提供します。 ほとんどの場合、終了メッセージに入力した情報も一般的な[Kubernetesログ](/docs/concepts/cluster-administration/logging/)に書き込まれるはずです。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture steps %}} + +## 終了メッセージの書き込みと読み取り + +この課題では、1つのコンテナを実行するPodを作成します。 +設定ファイルには、コンテナの開始時に実行されるコマンドを指定します。 + +{{< codenew file="debug/termination.yaml" >}} + +1. YAML設定ファイルに基づいてPodを作成します: + + kubectl apply -f https://k8s.io/examples/debug/termination.yaml + + YAMLファイルの`cmd`フィールドと`args`フィールドで、コンテナが10秒間スリープしてから`/dev/termination-log`ファイルに「Sleep expired」と書いているのがわかります。コンテナが「Sleep expired」メッセージを書き込んだ後、コンテナは終了します。 + +1. Podに関する情報を表示します: + + kubectl get pod termination-demo + + Podが実行されなくなるまで、上記のコマンドを繰り返します。 + +1. Podに関する詳細情報を表示します: + + kubectl get pod termination-demo --output=yaml + + 出力には「Sleep expired」メッセージが含まれています: + + apiVersion: v1 + kind: Pod + ... + lastState: + terminated: + containerID: ... + exitCode: 0 + finishedAt: ... + message: | + Sleep expired + ... + +1. Goテンプレートを使用して、終了メッセージのみが含まれるように出力をフィルタリングします: + + kubectl get pod termination-demo -o go-template="{{range .status.containerStatuses}}{{.lastState.terminated.message}}{{end}}" + +## 終了メッセージのカスタマイズ + +Kubernetesは、コンテナの`terminationMessagePath`フィールドで指定されている終了メッセージファイルから終了メッセージを取得します。デフォルト値は`/dev/termination-log`です。このフィールドをカスタマイズすることで、Kubernetesに別のファイルを使うように指示できます。Kubernetesは指定されたファイルの内容を使用して、成功と失敗の両方についてコンテナのステータスメッセージを入力します。 + +次の例では、コンテナはKubernetesが取得するために終了メッセージを`/tmp/my-log`に書き込みます: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: msg-path-demo +spec: + containers: + - name: msg-path-demo-container + image: debian + terminationMessagePath: "/tmp/my-log" +``` + +さらに、ユーザーは追加のカスタマイズをするためにContainerの`terminationMessagePolicy`フィールドを設定できます。このフィールドのデフォルト値は`File`です。これは、終了メッセージが終了メッセージファイルからのみ取得されることを意味します。`terminationMessagePolicy`を`FallbackToLogsOnError`に設定することで、終了メッセージファイルが空でコンテナがエラーで終了した場合に、コンテナログ出力の最後のチャンクを使用するようにKubernetesに指示できます。ログ出力は、2048バイトまたは80行のどちらか小さい方に制限されています。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [コンテナ](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)の`terminationMessagePath`フィールド参照 +* [ログ取得](/docs/concepts/cluster-administration/logging/)について +* [Goテンプレート](https://golang.org/pkg/text/template/)について + +{{% /capture %}} + + + diff --git a/content/ja/docs/tasks/debug-application-cluster/get-shell-running-container.md b/content/ja/docs/tasks/debug-application-cluster/get-shell-running-container.md new file mode 100644 index 0000000000000..40f903789fa2e --- /dev/null +++ b/content/ja/docs/tasks/debug-application-cluster/get-shell-running-container.md @@ -0,0 +1,142 @@ +--- +title: 実行中のコンテナへのシェルを取得する +content_template: templates/task +--- + +{{% capture overview %}} + + +このページは`kubectl exec`を使用して実行中のコンテナへのシェルを取得する方法を説明します。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture steps %}} + +## コンテナへのシェルの取得 + +このエクササイズでは、1つのコンテナを持つPodを作成します。 +コンテナはnginxのイメージを実行します。以下がそのPodの設定ファイルです: + +{{< codenew file="application/shell-demo.yaml" >}} + +Podを作成します: + +```shell +kubectl create -f https://k8s.io/examples/application/shell-demo.yaml +``` + +コンテナが実行中であることを確認します: + +```shell +kubectl get pod shell-demo +``` + +実行中のコンテナへのシェルを取得します: + +```shell +kubectl exec -it shell-demo -- /bin/bash +``` +{{< note >}} + +ダブルダッシュの記号 "--" はコマンドに渡す引数とkubectlの引数を分離します。 + +{{< /note >}} + +シェル内で、ルートディレクトリーのファイル一覧を表示します: + +```shell +root@shell-demo:/# ls / +``` + +シェル内で、他のコマンドを試しましょう。以下がいくつかの例です: + +```shell +root@shell-demo:/# ls / +root@shell-demo:/# cat /proc/mounts +root@shell-demo:/# cat /proc/1/maps +root@shell-demo:/# apt-get update +root@shell-demo:/# apt-get install -y tcpdump +root@shell-demo:/# tcpdump +root@shell-demo:/# apt-get install -y lsof +root@shell-demo:/# lsof +root@shell-demo:/# apt-get install -y procps +root@shell-demo:/# ps aux +root@shell-demo:/# ps aux | grep nginx +``` + +## nginxのルートページへの書き込み + +Podの設定ファイルを再度確認します。Podは`emptyDir`ボリュームを持ち、 +コンテナは`/usr/share/nginx/html`ボリュームをマウントします。 + +シェル内で、`/usr/share/nginx/html`ディレクトリに`index.html`を作成します。 + +```shell +root@shell-demo:/# echo Hello shell demo > /usr/share/nginx/html/index.html +``` + +シェル内で、nginxサーバーにGETリクエストを送信します: + +```shell +root@shell-demo:/# apt-get update +root@shell-demo:/# apt-get install curl +root@shell-demo:/# curl localhost +``` + +出力に`index.html`ファイルに書き込んだ文字列が表示されます: + +```shell +Hello shell demo +``` + +シェルを終了する場合、`exit`を入力します。 + +## コンテナ内での各コマンドの実行 + +シェルではない通常のコマンドウインドウ内で、実行中のコンテナの環境変数の一覧を表示します: + +```shell +kubectl exec shell-demo env +``` + +他のコマンドを試します。以下がいくつかの例です: + +```shell +kubectl exec shell-demo ps aux +kubectl exec shell-demo ls / +kubectl exec shell-demo cat /proc/1/mounts +``` + +{{% /capture %}} + +{{% capture discussion %}} + +## Podが1つ以上のコンテナを持つ場合にシェルを開く + +Podが1つ以上のコンテナを持つ場合、`--container`か`-c`を使用して、`kubectl exec`コマンド内でコンテナを指定します。 +例えば、my-podという名前のPodがあり、そのPodがmain-appとhelper-appという2つのコンテナを持つとします。 +以下のコマンドはmain-appのコンテナへのシェルを開きます。 + +```shell +kubectl exec -it my-pod --container main-app -- /bin/bash +``` + +{{% /capture %}} + + +{{% capture whatsnext %}} + +* [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands/#exec) + +{{% /capture %}} + + + diff --git a/content/ja/docs/tasks/run-application/delete-stateful-set.md b/content/ja/docs/tasks/run-application/delete-stateful-set.md new file mode 100644 index 0000000000000..575f3ae221fef --- /dev/null +++ b/content/ja/docs/tasks/run-application/delete-stateful-set.md @@ -0,0 +1,85 @@ +--- +title: StatefulSetの削除 +content_template: templates/task +weight: 60 +--- + +{{% capture overview %}} + +このタスクでは、StatefulSetを削除する方法を説明します。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +* このタスクは、クラスター上で、StatefulSetで表現されるアプリケーションが実行されていることを前提としています。 + +{{% /capture %}} + +{{% capture steps %}} + +## StatefulSetの削除 + +Kubernetesで他のリソースを削除するのと同じ方法でStatefulSetを削除することができます。つまり、`kubectl delete`コマンドを使い、StatefulSetをファイルまたは名前で指定します。 + +```shell +kubectl delete -f +``` + +```shell +kubectl delete statefulsets +``` + +StatefulSet自体が削除された後で、関連するヘッドレスサービスを個別に削除する必要があるかもしれません。 + +```shell +kubectl delete service +``` + +kubectlを使ってStatefulSetを削除すると0にスケールダウンされ、すべてのPodが削除されます。PodではなくStatefulSetだけを削除したい場合は、`--cascade=false`を使用してください。 + +```shell +kubectl delete -f --cascade=false +``` + +`--cascade=false`を`kubectl delete`に渡すことで、StatefulSetオブジェクト自身が削除された後でも、StatefulSetによって管理されていたPodは残ります。Podに`app=myapp`というラベルが付いている場合は、次のようにして削除できます: + +```shell +kubectl delete pods -l app=myapp +``` + +### 永続ボリューム + +StatefulSet内のPodを削除しても、関連付けられているボリュームは削除されません。これは、削除する前にボリュームからデータをコピーする機会があることを保証するためです。Podが[終了状態](/docs/concepts/workloads/pods/pod/#termination-of-pods)になった後にPVCを削除すると、ストレージクラスと再利用ポリシーによっては、背後にある永続ボリュームの削除がトリガーされることがあります。決してクレーム削除後にボリュームにアクセスできると想定しないでください。 + +{{< note >}} +データを損失する可能性があるため、PVCを削除するときは注意してください。 +{{< /note >}} + +### StatefulSetの完全削除 + +関連付けられたPodを含むStatefulSet内のすべてのものを単純に削除するには、次のような一連のコマンドを実行します: + +```shell +grace=$(kubectl get pods --template '{{.spec.terminationGracePeriodSeconds}}') +kubectl delete statefulset -l app=myapp +sleep $grace +kubectl delete pvc -l app=myapp + +``` + +上の例では、Podは`app=myapp`というラベルを持っています。必要に応じてご利用のラベルに置き換えてください。 + +### StatefulSet Podの強制削除 + +StatefulSet内の一部のPodが長期間`Terminating`または`Unknown`状態のままになっていることが判明した場合は、手動でapiserverからPodを強制的に削除する必要があります。これは潜在的に危険な作業です。詳細は[StatefulSet Podの強制削除](/docs/tasks/run-application/force-delete-stateful-set-pod/)を参照してください。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +[StatefulSet Podの強制削除](/docs/tasks/run-application/force-delete-stateful-set-pod/)の詳細 + +{{% /capture %}} + + diff --git a/content/ja/docs/tasks/run-application/run-replicated-stateful-application.md b/content/ja/docs/tasks/run-application/run-replicated-stateful-application.md new file mode 100644 index 0000000000000..5711d1859b26c --- /dev/null +++ b/content/ja/docs/tasks/run-application/run-replicated-stateful-application.md @@ -0,0 +1,490 @@ +--- +title: レプリカを持つステートフルアプリケーションを実行する +content_template: templates/tutorial +weight: 30 +--- + +{{% capture overview %}} + +このページでは、[StatefulSet](/docs/concepts/workloads/controllers/statefulset/) +コントローラーを使用して、レプリカを持つステートフルアプリケーションを実行する方法を説明します。 +ここでの例は、非同期レプリケーションを行う複数のスレーブを持つ、単一マスターのMySQLです。 + +**この例は本番環境向けの構成ではない**ことに注意してください。 +具体的には、MySQLの設定が安全ではないデフォルトのままとなっています。 +これはKubernetesでステートフルアプリケーションを実行するための一般的なパターンに焦点を当てるためです。 + +{{% /capture %}} + +{{% capture prerequisites %}} + +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} +* {{< include "default-storage-class-prereqs.md" >}} +* このチュートリアルは、あなたが[PersistentVolume](/docs/concepts/storage/persistent-volumes/) + と[StatefulSet](/docs/concepts/workloads/controllers/statefulset/)、 + さらには[Pod](/docs/concepts/workloads/pods/pod/)、 + [Service](/docs/concepts/services-networking/service/)、 + [ConfigMap](/docs/tasks/configure-pod-container/configure-pod-configmap/)などの + 他のコアな概念に精通していることを前提としています。 +* MySQLに関する知識は記事の理解に役立ちますが、 + このチュートリアルは他のシステムにも役立つ一般的なパターンを提示することを目的としています。 + +{{% /capture %}} + +{{% capture objectives %}} + +* StatefulSetコントローラーを使用して、レプリカを持つMySQLトポロジーをデプロイします。 +* MySQLクライアントトラフィックを送信します。 +* ダウンタイムに対する耐性を観察します。 +* StatefulSetをスケールアップおよびスケールダウンします。 + +{{% /capture %}} + +{{% capture lessoncontent %}} + +## MySQLをデプロイする + +このMySQLのデプロイの例は、1つのConfigMap、2つのService、および1つのStatefulSetから構成されます。 + +### ConfigMap + +次のYAML設定ファイルからConfigMapを作成します。 + +```shell +kubectl apply -f https://k8s.io/examples/application/mysql/mysql-configmap.yaml +``` + +{{< codenew file="application/mysql/mysql-configmap.yaml" >}} + +このConfigMapは、MySQLマスターとスレーブの設定を独立して制御するために、 +それぞれの`my.cnf`を上書きする内容を提供します。 +この場合、マスターはスレーブにレプリケーションログを提供するようにし、 +スレーブはレプリケーション以外の書き込みを拒否するようにします。 + +ConfigMap自体に特別なことはありませんが、ConfigMapの各部分は異なるPodに適用されます。 +各Podは、StatefulSetコントローラーから提供される情報に基づいて、 +初期化時にConfigMapのどの部分を見るかを決定します。 + +### Services + +以下のYAML設定ファイルからServiceを作成します。 + +```shell +kubectl apply -f https://k8s.io/examples/application/mysql/mysql-services.yaml +``` + +{{< codenew file="application/mysql/mysql-services.yaml" >}} + +ヘッドレスサービスは、StatefulSetコントローラーが +StatefulSetの一部であるPodごとに作成するDNSエントリーのベースエントリーを提供します。 +この例ではヘッドレスサービスの名前は`mysql`なので、同じKubernetesクラスタの +同じ名前空間内の他のPodは、`.mysql`を名前解決することでPodにアクセスできます。 + +`mysql-read`と呼ばれるクライアントサービスは、独自のクラスタIPを持つ通常のServiceであり、 +Ready状態のすべてのMySQL Podに接続を分散します。 +Serviceのエンドポイントには、MySQLマスターとすべてのスレーブが含まれる可能性があります。 + +読み込みクエリーのみが、負荷分散されるクライアントサービスを使用できることに注意してください。 +MySQLマスターは1つしかいないため、クライアントが書き込みを実行するためには、 +(ヘッドレスサービス内のDNSエントリーを介して)MySQLのマスターPodに直接接続する必要があります。 + +### StatefulSet + +最後に、次のYAML設定ファイルからStatefulSetを作成します。 + +```shell +kubectl apply -f https://k8s.io/examples/application/mysql/mysql-statefulset.yaml +``` + +{{< codenew file="application/mysql/mysql-statefulset.yaml" >}} + +次のコマンドを実行して起動の進行状況を確認できます。 + +```shell +kubectl get pods -l app=mysql --watch +``` + +しばらくすると、3つのPodすべてがRunning状態になるはずです。 + +``` +NAME READY STATUS RESTARTS AGE +mysql-0 2/2 Running 0 2m +mysql-1 2/2 Running 0 1m +mysql-2 2/2 Running 0 1m +``` + +**Ctrl+C**を押してウォッチをキャンセルします。 +起動が進行しない場合は、[始める前に](#始める前に)で説明されているように、 +PersistentVolumeの動的プロビジョニング機能が有効になっていることを確認してください。 + +このマニフェストでは、StatefulSetの一部としてステートフルなPodを管理するためにさまざまな手法を使用しています。 +次のセクションでは、これらの手法のいくつかに焦点を当て、StatefulSetがPodを作成するときに何が起こるかを説明します。 + +## ステートフルなPodの初期化を理解する + +StatefulSetコントローラーは、序数インデックスの順にPodを一度に1つずつ起動します。 +各PodがReady状態を報告するまで待機してから、その次のPodの起動が開始されます。 + +さらに、コントローラーは各Podに `-`という形式の一意で不変の名前を割り当てます。 +この例の場合、Podの名前は`mysql-0`、`mysql-1`、そして`mysql-2`となります。 + +上記のStatefulSetマニフェスト内のPodテンプレートは、これらのプロパティーを利用して、 +MySQLレプリケーションの起動を順序正しく実行します。 + +### 構成を生成する + +Podスペック内のコンテナを起動する前に、Podは最初に +[初期化コンテナ](/docs/concepts/workloads/pods/init-containers/)を定義された順序で実行します。 + +最初の初期化コンテナは`init-mysql`という名前で、序数インデックスに基づいて特別なMySQL設定ファイルを生成します。 + +スクリプトは、`hostname`コマンドによって返されるPod名の末尾から抽出することによって、自身の序数インデックスを特定します。 +それから、序数を(予約された値を避けるために数値オフセット付きで)MySQLの`conf.d`ディレクトリーの`server-id.cnf`というファイルに保存します。 +これは、StatefulSetコントローラーによって提供される一意で不変のIDを、同じ特性を必要とするMySQLサーバーIDの領域に変換します。 + +さらに、`init-mysql`コンテナ内のスクリプトは、`master.cnf`または`slave.cnf`のいずれかを、 +ConfigMapから内容を`conf.d`にコピーすることによって適用します。 +このトポロジー例は単一のMySQLマスターと任意の数のスレーブで構成されているため、 +スクリプトは単に序数の`0`がマスターになるように、それ以外のすべてがスレーブになるように割り当てます。 +StatefulSetコントローラーによる +[デプロイ順序の保証](/docs/concepts/workloads/controllers/statefulset/#deployment-and-scaling-guarantees/)と組み合わせると、 +スレーブが作成される前にMySQLマスターがReady状態になるため、スレーブはレプリケーションを開始できます。 + +### 既存データをクローンする + +一般に、新しいPodがセットにスレーブとして参加するときは、 +MySQLマスターにはすでにデータがあるかもしれないと想定する必要があります。 +また、レプリケーションログが期間の先頭まで全て揃っていない場合も想定する必要があります。 +これらの控えめな仮定は、実行中のStatefulSetのサイズを初期サイズに固定するのではなく、 +時間の経過とともにスケールアップまたはスケールダウンできるようにするために重要です。 + +2番目の初期化コンテナは`clone-mysql`という名前で、スレーブPodが空のPersistentVolumeで最初に起動したときに、 +クローン操作を実行します。 +つまり、実行中の別のPodから既存のデータをすべてコピーするので、 +そのローカル状態はマスターからレプリケーションを開始するのに十分な一貫性があります。 + +MySQL自体はこれを行うためのメカニズムを提供していないため、この例ではPercona XtraBackupという人気のあるオープンソースツールを使用しています。 +クローンの実行中は、ソースとなるMySQLサーバーのパフォーマンスが低下する可能性があります。 +MySQLマスターへの影響を最小限に抑えるために、スクリプトは各Podに序数インデックスが自分より1低いPodからクローンするように指示します。 +StatefulSetコントローラーは、`N+1`のPodを開始する前には必ず`N`のPodがReady状態であることを保証するので、この方法が機能します。 + +### レプリケーションを開始する + +初期化コンテナが正常に完了すると、通常のコンテナが実行されます。 +MySQLのPodは実際に`mysqld`サーバーを実行する`mysql`コンテナと、 +[サイドカー](https://kubernetes.io/blog/2015/06/the-distributed-system-toolkit-patterns) +として機能する`xtrabackup`コンテナから成ります。 + +`xtrabackup`サイドカーはクローンされたデータファイルを見て、 +スレーブ上でMySQLレプリケーションを初期化する必要があるかどうかを決定します。 +もし必要がある場合、`mysqld`が準備できるのを待ってから、 +XtraBackupクローンファイルから抽出されたレプリケーションパラメーターで`CHANGE MASTER TO`と`START SLAVE`コマンドを実行します。 + +スレーブがレプリケーションを開始すると、スレーブはMySQLマスターを記憶し、 +サーバーが再起動した場合または接続が停止した場合に、自動的に再接続します。 +また、スレーブはその不変のDNS名(`mysql-0.mysql`)でマスターを探すため、 +再スケジュールされたために新しいPod IPを取得したとしても、自動的にマスターを見つけます。 + +最後に、レプリケーションを開始した後、`xtrabackup`コンテナはデータのクローンを要求する他のPodからの接続を待ち受けます。 +StatefulSetがスケールアップした場合や、次のPodがPersistentVolumeClaimを失ってクローンをやり直す必要がある場合に備えて、 +このサーバーは無期限に起動したままになります。 + +## クライアントトラフィックを送信する + +テストクエリーをMySQLマスター(ホスト名 `mysql-0.mysql`)に送信するには、 +`mysql:5.7`イメージを使って一時的なコンテナーを実行し、`mysql`クライアントバイナリーを実行します。 + +```shell +kubectl run mysql-client --image=mysql:5.7 -i --rm --restart=Never --\ + mysql -h mysql-0.mysql <`は前のステップで確認したノードの名前に置き換えてください。 + +この操作はノード上の他のアプリケーションに影響を与える可能性があるため、 +**テストクラスタでのみこの操作を実行**するのが最善です。 + +```shell +kubectl drain --force --delete-local-data --ignore-daemonsets +``` + +Podが別のノードに再スケジュールされる様子を確認しましょう。 + +```shell +kubectl get pod mysql-2 -o wide --watch +``` + +次のような出力が見られるはずです。 + +``` +NAME READY STATUS RESTARTS AGE IP NODE +mysql-2 2/2 Terminating 0 15m 10.244.1.56 kubernetes-minion-group-9l2t +[...] +mysql-2 0/2 Pending 0 0s kubernetes-minion-group-fjlm +mysql-2 0/2 Init:0/2 0 0s kubernetes-minion-group-fjlm +mysql-2 0/2 Init:1/2 0 20s 10.244.5.32 kubernetes-minion-group-fjlm +mysql-2 0/2 PodInitializing 0 21s 10.244.5.32 kubernetes-minion-group-fjlm +mysql-2 1/2 Running 0 22s 10.244.5.32 kubernetes-minion-group-fjlm +mysql-2 2/2 Running 0 30s 10.244.5.32 kubernetes-minion-group-fjlm +``` + +また、サーバーID`102`が`SELECT @@server_id`ループの出力からしばらくの消えて、 +そして戻ることが確認できるはずです。 + +それでは、ノードをuncordonして正常な状態に戻しましょう。 + +```shell +kubectl uncordon +``` + +## スレーブの数をスケーリングする + +MySQLレプリケーションでは、スレーブを追加することで読み取りクエリーのキャパシティーをスケールできます。 +StatefulSetを使用している場合、単一のコマンドでこれを実行できます。 + +```shell +kubectl scale statefulset mysql --replicas=5 +``` + +次のコマンドを実行して、新しいPodが起動してくるのを確認します。 + +```shell +kubectl get pods -l app=mysql --watch +``` + +新しいPodが起動すると、サーバーID`103`と`104`が`SELECT @@server_id`ループの出力に現れます。 + +また、これらの新しいサーバーが、これらのサーバーが存在する前に追加したデータを持っていることを確認することもできます。 + +```shell +kubectl run mysql-client --image=mysql:5.7 -i -t --rm --restart=Never --\ + mysql -h mysql-3.mysql -e "SELECT * FROM test.messages" +``` + +``` +Waiting for pod default/mysql-client to be running, status is Pending, pod ready: false ++---------+ +| message | ++---------+ +| hello | ++---------+ +pod "mysql-client" deleted +``` + +元の状態へのスケールダウンもシームレスに可能です。 + +```shell +kubectl scale statefulset mysql --replicas=3 +``` + +ただし、スケールアップすると新しいPersistentVolumeClaimが自動的に作成されますが、 +スケールダウンしてもこれらのPVCは自動的には削除されないことに注意して下さい。 +このため、初期化されたPVCをそのまま置いておいくことで再スケールアップを速くしたり、 +PVを削除する前にデータを抽出するといった選択が可能になります。 + +次のコマンドを実行してこのことを確認できます。 + +```shell +kubectl get pvc -l app=mysql +``` + +StatefulSetを3にスケールダウンしたにもかかわらず、5つのPVCすべてがまだ存在しています。 + +``` +NAME STATUS VOLUME CAPACITY ACCESSMODES AGE +data-mysql-0 Bound pvc-8acbf5dc-b103-11e6-93fa-42010a800002 10Gi RWO 20m +data-mysql-1 Bound pvc-8ad39820-b103-11e6-93fa-42010a800002 10Gi RWO 20m +data-mysql-2 Bound pvc-8ad69a6d-b103-11e6-93fa-42010a800002 10Gi RWO 20m +data-mysql-3 Bound pvc-50043c45-b1c5-11e6-93fa-42010a800002 10Gi RWO 2m +data-mysql-4 Bound pvc-500a9957-b1c5-11e6-93fa-42010a800002 10Gi RWO 2m +``` + +余分なPVCを再利用するつもりがないのであれば、削除することができます。 + +```shell +kubectl delete pvc data-mysql-3 +kubectl delete pvc data-mysql-4 +``` + +{{% /capture %}} + +{{% capture cleanup %}} + +1. `SELECT @@server_id`ループを実行している端末で**Ctrl+C**を押すか、 + 別の端末から次のコマンドを実行して、ループをキャンセルします。 + + ```shell + kubectl delete pod mysql-client-loop --now + ``` + +1. StatefulSetを削除します。これによってPodの終了も開始されます。 + + ```shell + kubectl delete statefulset mysql + ``` + +1. Podが消えたことを確認します。 + Podが終了処理が完了するのには少し時間がかかるかもしれません。 + + ```shell + kubectl get pods -l app=mysql + ``` + + 上記のコマンドから以下の出力が戻れば、Podが終了したことがわかります。 + + ``` + No resources found. + ``` + +1. ConfigMap、Services、およびPersistentVolumeClaimを削除します。 + + ```shell + kubectl delete configmap,service,pvc -l app=mysql + ``` + +1. PersistentVolumeを手動でプロビジョニングした場合は、それらを手動で削除し、 + また、下層にあるリソースも解放する必要があります。 + 動的プロビジョニング機能を使用した場合は、PersistentVolumeClaimを削除すれば、自動的にPersistentVolumeも削除されます。 + 一部の動的プロビジョナー(EBSやPDなど)は、PersistentVolumeを削除すると同時に下層にあるリソースも解放します。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +* その他のステートフルアプリケーションの例は、[Helm Charts repository](https://github.com/kubernetes/charts)を見てください。 + +{{% /capture %}} + + + diff --git a/content/ja/docs/tasks/run-application/run-single-instance-stateful-application.md b/content/ja/docs/tasks/run-application/run-single-instance-stateful-application.md new file mode 100644 index 0000000000000..a2463f711e7e9 --- /dev/null +++ b/content/ja/docs/tasks/run-application/run-single-instance-stateful-application.md @@ -0,0 +1,181 @@ +--- +title: 単一レプリカのステートフルアプリケーションを実行する +content_template: templates/tutorial +weight: 20 +--- + +{{% capture overview %}} + +このページでは、PersistentVolumeとDeploymentを使用して、Kubernetesで単一レプリカのステートフルアプリケーションを実行する方法を説明します。アプリケーションはMySQLです。 + +{{% /capture %}} + + +{{% capture objectives %}} + +* 自身の環境のディスクを参照するPersistentVolumeを作成します。 +* MySQLのDeploymentを作成します。 +* MySQLをDNS名でクラスター内の他のPodに公開します。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +* {{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +* {{< include "default-storage-class-prereqs.md" >}} + +{{% /capture %}} + + +{{% capture lessoncontent %}} + +## MySQLをデプロイする + +Kubernetes Deploymentを作成し、PersistentVolumeClaimを使用して既存のPersistentVolumeに接続することで、ステートフルアプリケーションを実行できます。 +たとえば、以下のYAMLファイルはMySQLを実行し、PersistentVolumeClaimを参照するDeploymentを記述しています。 +このファイルは/var/lib/mysqlのボリュームマウントを定義してから、20Gのボリュームを要求するPersistentVolumeClaimを作成します。 +この要求は、要件を満たす既存のボリューム、または動的プロビジョナーによって満たされます。 + +注:パスワードはYAMLファイル内に定義されており、これは安全ではありません。安全な解決策については[Kubernetes Secret](/docs/concepts/configuration/secret/)を参照してください 。 + +{{< codenew file="application/mysql/mysql-deployment.yaml" >}} +{{< codenew file="application/mysql/mysql-pv.yaml" >}} + +1. YAMLファイルに記述されたPVとPVCをデプロイします。 + + kubectl create -f https://k8s.io/examples/application/mysql/mysql-pv.yaml + +1. YAMLファイルの内容をデプロイします。 + + kubectl create -f https://k8s.io/examples/application/mysql/mysql-deployment.yaml + +1. 作成したDeploymentの情報を表示します。 + + kubectl describe deployment mysql + + Name: mysql + Namespace: default + CreationTimestamp: Tue, 01 Nov 2016 11:18:45 -0700 + Labels: app=mysql + Annotations: deployment.kubernetes.io/revision=1 + Selector: app=mysql + Replicas: 1 desired | 1 updated | 1 total | 0 available | 1 unavailable + StrategyType: Recreate + MinReadySeconds: 0 + Pod Template: + Labels: app=mysql + Containers: + mysql: + Image: mysql:5.6 + Port: 3306/TCP + Environment: + MYSQL_ROOT_PASSWORD: password + Mounts: + /var/lib/mysql from mysql-persistent-storage (rw) + Volumes: + mysql-persistent-storage: + Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) + ClaimName: mysql-pv-claim + ReadOnly: false + Conditions: + Type Status Reason + ---- ------ ------ + Available False MinimumReplicasUnavailable + Progressing True ReplicaSetUpdated + OldReplicaSets: + NewReplicaSet: mysql-63082529 (1/1 replicas created) + Events: + FirstSeen LastSeen Count From SubobjectPath Type Reason Message + --------- -------- ----- ---- ------------- -------- ------ ------- + 33s 33s 1 {deployment-controller } Normal ScalingReplicaSet Scaled up replica set mysql-63082529 to 1 + +1. Deploymentによって作成されたPodを一覧表示します。 + + kubectl get pods -l app=mysql + + NAME READY STATUS RESTARTS AGE + mysql-63082529-2z3ki 1/1 Running 0 3m + +1. PersistentVolumeClaimを確認します。 + + kubectl describe pvc mysql-pv-claim + + Name: mysql-pv-claim + Namespace: default + StorageClass: + Status: Bound + Volume: mysql-pv-volume + Labels: + Annotations: pv.kubernetes.io/bind-completed=yes + pv.kubernetes.io/bound-by-controller=yes + Capacity: 20Gi + Access Modes: RWO + Events: + +## MySQLインスタンスにアクセスする + +前述のYAMLファイルは、クラスター内の他のPodがデータベースにアクセスできるようにするServiceを作成します。 +Serviceのオプションで`clusterIP: None`を指定すると、ServiceのDNS名がPodのIPアドレスに直接解決されます。 +このオプションは、ServiceのバックエンドのPodが1つのみであり、Podの数を増やす予定がない場合に適しています。 + +MySQLクライアントを実行してサーバーに接続します。 + +``` +kubectl run -it --rm --image=mysql:5.6 --restart=Never mysql-client -- mysql -h mysql -ppassword +``` + +このコマンドは、クラスター内にMySQLクライアントを実行する新しいPodを作成し、Serviceを通じてMySQLサーバーに接続します。 +接続できれば、ステートフルなMySQLデータベースが稼働していることが確認できます。 + +``` +Waiting for pod default/mysql-client-274442439-zyp6i to be running, status is Pending, pod ready: false +If you don't see a command prompt, try pressing enter. + +mysql> +``` + +## アップデート + +イメージまたはDeploymentの他の部分は、`kubectl apply`コマンドを使用して通常どおりに更新できます。 +ステートフルアプリケーションに固有のいくつかの注意事項を以下に記載します。 + +* アプリケーションをスケールしないでください。このセットアップは単一レプリカのアプリケーション専用です。 + 下層にあるPersistentVolumeは1つのPodにしかマウントできません。 + クラスター化されたステートフルアプリケーションについては、[StatefulSetのドキュメント](/docs/concepts/workloads/controllers/statefulset/)を参照してください。 +* Deploymentを定義するYAMLファイルでは`strategy: type: Recreate`を使用して下さい。 + この設定はKubernetesにローリングアップデートを使用 _しない_ ように指示します。 + 同時に複数のPodを実行することはできないため、ローリングアップデートは使用できません。 + `Recreate`戦略は、更新された設定で新しいPodを作成する前に、最初のPodを停止します。 + +## Deploymentの削除 + +名前を指定してデプロイしたオブジェクトを削除します。 + +``` +kubectl delete deployment,svc mysql +kubectl delete pvc mysql-pv-claim +kubectl delete pv mysql-pv-volume +``` + +PersistentVolumeを手動でプロビジョニングした場合は、PersistentVolumeを手動で削除し、また、下層にあるリソースも解放する必要があります。 +動的プロビジョニング機能を使用した場合は、PersistentVolumeClaimを削除すれば、自動的にPersistentVolumeも削除されます。 +一部の動的プロビジョナー(EBSやPDなど)は、PersistentVolumeを削除すると同時に下層にあるリソースも解放します。 + +{{% /capture %}} + + +{{% capture whatsnext %}} + +* [Deploymentオブジェクト](/docs/concepts/workloads/controllers/deployment/)についてもっと学ぶ + +* [アプリケーションのデプロイ](/docs/user-guide/deploying-applications/)についてもっと学ぶ + +* [kubectl runのドキュメント](/docs/reference/generated/kubectl/kubectl-commands/#run) + +* [Volumes](/docs/concepts/storage/volumes/)と[Persistent Volumes](/docs/concepts/storage/persistent-volumes/) + +{{% /capture %}} + + diff --git a/content/ja/docs/tasks/run-application/run-stateless-application-deployment.md b/content/ja/docs/tasks/run-application/run-stateless-application-deployment.md new file mode 100644 index 0000000000000..c38b40171a2ac --- /dev/null +++ b/content/ja/docs/tasks/run-application/run-stateless-application-deployment.md @@ -0,0 +1,150 @@ +--- +title: Deploymentを使用してステートレスアプリケーションを実行する +min-kubernetes-server-version: v1.9 +content_template: templates/tutorial +weight: 10 +--- + +{{% capture overview %}} + +このページでは、Kubernetes Deploymentオブジェクトを使用してアプリケーションを実行する方法を説明します。 + +{{% /capture %}} + + +{{% capture objectives %}} + +* nginx deploymentを作成します。 +* kubectlを使ってdeploymentに関する情報を一覧表示します。 +* deploymentを更新します。 + +{{% /capture %}} + + +{{% capture prerequisites %}} + +{{< include "task-tutorial-prereqs.md" >}} {{< version-check >}} + +{{% /capture %}} + + +{{% capture lessoncontent %}} + +## nginx deploymentの作成と探検 + +Kubernetes Deploymentオブジェクトを作成することでアプリケーションを実行できます。また、YAMLファイルでDeploymentを記述できます。例えば、このYAMLファイルはnginx:1.7.9 Dockerイメージを実行するデプロイメントを記述しています: + +{{< codenew file="application/deployment.yaml" >}} + + +1. YAMLファイルに基づいてDeploymentを作成します: + + kubectl apply -f https://k8s.io/examples/application/deployment.yaml + +1. Deploymentに関する情報を表示します: + + kubectl describe deployment nginx-deployment + + 出力はこのようになります: + + user@computer:~/website$ kubectl describe deployment nginx-deployment + Name: nginx-deployment + Namespace: default + CreationTimestamp: Tue, 30 Aug 2016 18:11:37 -0700 + Labels: app=nginx + Annotations: deployment.kubernetes.io/revision=1 + Selector: app=nginx + Replicas: 2 desired | 2 updated | 2 total | 2 available | 0 unavailable + StrategyType: RollingUpdate + MinReadySeconds: 0 + RollingUpdateStrategy: 1 max unavailable, 1 max surge + Pod Template: + Labels: app=nginx + Containers: + nginx: + Image: nginx:1.7.9 + Port: 80/TCP + Environment: + Mounts: + Volumes: + Conditions: + Type Status Reason + ---- ------ ------ + Available True MinimumReplicasAvailable + Progressing True NewReplicaSetAvailable + OldReplicaSets: + NewReplicaSet: nginx-deployment-1771418926 (2/2 replicas created) + No events. + +1. Deploymentによって作成されたPodを一覧表示します: + + kubectl get pods -l app=nginx + + 出力はこのようになります: + + NAME READY STATUS RESTARTS AGE + nginx-deployment-1771418926-7o5ns 1/1 Running 0 16h + nginx-deployment-1771418926-r18az 1/1 Running 0 16h + +1. Podに関する情報を表示します: + + kubectl describe pod + + ここで``はPodの1つの名前を指定します。 + +## Deploymentの更新 + +新しいYAMLファイルを適用してDeploymentを更新できます。このYAMLファイルは、Deploymentを更新してnginx 1.8を使用するように指定しています。 + +{{< codenew file="application/deployment-update.yaml" >}} + +1. 新しいYAMLファイルを適用します: + + kubectl apply -f https://k8s.io/examples/application/deployment-update.yaml + +1. Deploymentが新しい名前でPodを作成し、古いPodを削除するのを監視します: + + kubectl get pods -l app=nginx + +## レプリカ数を増やすことによるアプリケーションのスケール + +新しいYAMLファイルを適用することで、Deployment内のPodの数を増やすことができます。このYAMLファイルは`replicas`を4に設定します。これはDeploymentが4つのPodを持つべきであることを指定します: + +{{< codenew file="application/deployment-scale.yaml" >}} + +1. 新しいYAMLファイルを適用します: + + kubectl apply -f https://k8s.io/examples/application/deployment-scale.yaml + +1. Deploymentに4つのPodがあることを確認します: + + kubectl get pods -l app=nginx + + 出力はこのようになります: + + NAME READY STATUS RESTARTS AGE + nginx-deployment-148880595-4zdqq 1/1 Running 0 25s + nginx-deployment-148880595-6zgi1 1/1 Running 0 25s + nginx-deployment-148880595-fxcez 1/1 Running 0 2m + nginx-deployment-148880595-rwovn 1/1 Running 0 2m + +## Deploymentの削除 + +Deploymentを名前を指定して削除します: + + kubectl delete deployment nginx-deployment + +## ReplicationControllers -- 昔のやり方 + +複製アプリケーションを作成するための好ましい方法はDeploymentを使用することです。そして、DeploymentはReplicaSetを使用します。 DeploymentとReplicaSetがKubernetesに追加される前は、[ReplicationController](/docs/concepts/workloads/controllers/replicationcontroller/)を使用して複製アプリケーションを構成していました。 + +{{% /capture %}} + + +{{% capture whatsnext %}} + +* [Deploymentオブジェクト](/docs/concepts/workloads/controllers/deployment/)の詳細 + +{{% /capture %}} + + diff --git a/content/ja/docs/tasks/run-application/scale-stateful-set.md b/content/ja/docs/tasks/run-application/scale-stateful-set.md new file mode 100644 index 0000000000000..a5c264caf112c --- /dev/null +++ b/content/ja/docs/tasks/run-application/scale-stateful-set.md @@ -0,0 +1,80 @@ +--- +title: StatefulSetのスケール +content_template: templates/task +weight: 50 +--- + +{{% capture overview %}} +このタスクは、StatefulSetをスケールする方法を示します。StatefulSetをスケーリングするとは、レプリカの数を増減することです。 +{{% /capture %}} + +{{% capture prerequisites %}} + +* StatefulSetはKubernetesバージョン1.5以降でのみ利用可能です。 + Kubernetesのバージョンを確認するには、`kubectl version`を実行してください。 + +* すべてのステートフルアプリケーションがうまくスケールできるわけではありません。StatefulSetがスケールするかどうかわからない場合は、[StatefulSetの概念](/docs/concepts/workloads/controllers/statefulset/)または[StatefulSetのチュートリアル](/docs/tutorials/stateful-application/basic-stateful-set/)を参照してください。 + +* ステートフルアプリケーションクラスターが完全に健全であると確信できる場合にのみ、スケーリングを実行してください。 + +{{% /capture %}} + +{{% capture steps %}} + +## StatefulSetのスケール + +### kubectlを使用したStatefulSetのスケール + +まず、スケールしたいStatefulSetを見つけます。 + +```shell +kubectl get statefulsets +``` + +StatefulSetのレプリカ数を変更します: + +```shell +kubectl scale statefulsets --replicas= +``` + +### StatefulSetのインプレースアップデート + +コマンドライン上でレプリカ数を変更する代わりに、StatefulSetに[インプレースアップデート](/docs/concepts/cluster-administration/manage-deployment/#in-place-updates-of-resources)が可能です。 + +StatefulSetが最初に `kubectl apply`で作成されたのなら、StatefulSetマニフェストの`.spec.replicas`を更新してから、`kubectl apply`を実行します: + +```shell +kubectl apply -f +``` + +そうでなければ、`kubectl edit`でそのフィールドを編集してください: + +```shell +kubectl edit statefulsets +``` + +あるいは`kubectl patch`を使ってください: + +```shell +kubectl patch statefulsets -p '{"spec":{"replicas":}}' +``` + +## トラブルシューティング + +### スケールダウンがうまくいかない + +管理するステートフルPodのいずれかが異常である場合、StatefulSetをスケールダウンすることはできません。それらのステートフルPodが実行され準備ができた後にのみ、スケールダウンが行われます。 + +spec.replicas > 1の場合、Kubernetesは不健康なPodの理由を判断できません。それは、永続的な障害または一時的な障害の結果である可能性があります。一時的な障害は、アップグレードまたはメンテナンスに必要な再起動によって発生する可能性があります。 + +永続的な障害が原因でPodが正常でない場合、障害を修正せずにスケーリングすると、StatefulSetメンバーシップが正しく機能するために必要な特定の最小レプリカ数を下回る状態になる可能性があります。これにより、StatefulSetが利用できなくなる可能性があります。 + +一時的な障害によってPodが正常でなくなり、Podが再び使用可能になる可能性がある場合は、一時的なエラーがスケールアップまたはスケールダウン操作の妨げになる可能性があります。一部の分散データベースでは、ノードが同時に参加および脱退するときに問題があります。このような場合は、アプリケーションレベルでスケーリング操作を考えることをお勧めします。また、ステートフルアプリケーションクラスタが完全に健全であることが確実な場合にのみスケーリングを実行してください。 + +{{% /capture %}} + +{{% capture whatsnext %}} + +* [StatefulSetの削除](/docs/tasks/run-application/delete-stateful-set/)の詳細 + +{{% /capture %}} diff --git a/content/ja/docs/tutorials/_index.md b/content/ja/docs/tutorials/_index.md index 74ae96f91530b..f451618f9b5c8 100644 --- a/content/ja/docs/tutorials/_index.md +++ b/content/ja/docs/tutorials/_index.md @@ -37,7 +37,7 @@ content_template: templates/concept * [StatefulSetの基本](/docs/tutorials/stateful-application/basic-stateful-set/) -* [例: 永続化ボリュームを使ったWordPressとMySQLのデプロイ](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/) +* [例: 永続ボリュームを使ったWordPressとMySQLのデプロイ](/docs/tutorials/stateful-application/mysql-wordpress-persistent-volume/) * [例: Stateful Setsを使ったCassandraのデプロイ](/docs/tutorials/stateful-application/cassandra/) diff --git a/content/ja/examples/pods/pod-rs.yaml b/content/ja/examples/pods/pod-rs.yaml new file mode 100644 index 0000000000000..df7b390597c49 --- /dev/null +++ b/content/ja/examples/pods/pod-rs.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: Pod +metadata: + name: pod1 + labels: + tier: frontend +spec: + containers: + - name: hello1 + image: gcr.io/google-samples/hello-app:2.0 + +--- + +apiVersion: v1 +kind: Pod +metadata: + name: pod2 + labels: + tier: frontend +spec: + containers: + - name: hello2 + image: gcr.io/google-samples/hello-app:1.0 diff --git a/content/ja/includes/default-storage-class-prereqs.md b/content/ja/includes/default-storage-class-prereqs.md new file mode 100644 index 0000000000000..588439eb89a22 --- /dev/null +++ b/content/ja/includes/default-storage-class-prereqs.md @@ -0,0 +1,2 @@ +ここで使用されている[PersistentVolumeClaims](/docs/user-guide/persistent-volumes/#persistentvolumeclaims)の要件を満たすには、デフォルトの[StorageClass](/docs/concepts/storage/storage-classes/)を使用して動的PersistentVolumeプロビジョナーを作成するか、[PersistentVolumesを静的にプロビジョニングする](/docs/user-guide/persistent-volumes/#provisioning)必要があります。 + diff --git a/content/ja/includes/federated-task-tutorial-prereqs.md b/content/ja/includes/federated-task-tutorial-prereqs.md new file mode 100644 index 0000000000000..b254407a676a3 --- /dev/null +++ b/content/ja/includes/federated-task-tutorial-prereqs.md @@ -0,0 +1,5 @@ +This guide assumes that you have a running Kubernetes Cluster Federation installation. +If not, then head over to the [federation admin guide](/docs/tutorials/federation/set-up-cluster-federation-kubefed/) to learn how to +bring up a cluster federation (or have your cluster administrator do this for you). +Other tutorials, such as Kelsey Hightower's [Federated Kubernetes Tutorial](https://github.com/kelseyhightower/kubernetes-cluster-federation), +might also help you create a Federated Kubernetes cluster. diff --git a/content/ja/includes/federation-deprecation-warning-note.md b/content/ja/includes/federation-deprecation-warning-note.md new file mode 100644 index 0000000000000..b7a05b1077095 --- /dev/null +++ b/content/ja/includes/federation-deprecation-warning-note.md @@ -0,0 +1,3 @@ +Use of `Federation v1` is strongly discouraged. `Federation V1` never achieved GA status and is no longer under active development. Documentation is for historical purposes only. + +For more information, see the intended replacement, [Kubernetes Federation v2](https://github.com/kubernetes-sigs/federation-v2). diff --git a/content/ja/includes/index.md b/content/ja/includes/index.md new file mode 100644 index 0000000000000..ca03031f1ee91 --- /dev/null +++ b/content/ja/includes/index.md @@ -0,0 +1,3 @@ +--- +headless: true +--- diff --git a/content/ja/includes/partner-script.js b/content/ja/includes/partner-script.js new file mode 100644 index 0000000000000..499dc3f2e3829 --- /dev/null +++ b/content/ja/includes/partner-script.js @@ -0,0 +1,1609 @@ +;(function () { + var partners = [ + { + type: 0, + name: 'Sysdig', + logo: 'sys_dig', + link: 'https://sysdig.com/blog/monitoring-kubernetes-with-sysdig-cloud/', + blurb: 'Sysdig is the container intelligence company. Sysdig has created the only unified platform to deliver monitoring, security, and troubleshooting in a microservices-friendly architecture.' + }, + { + type: 0, + name: 'Puppet', + logo: 'puppet', + link: 'https://puppet.com/blog/announcing-kream-and-new-kubernetes-helm-and-docker-modules', + blurb: 'We\'ve developed tools and products to make your adoption of Kubernetes as efficient as possible, covering your full workflow cycle from development to production. And now Puppet Pipelines for Containers is your complete DevOps dashboard for Kubernetes.' + }, + { + type: 0, + name: 'Citrix', + logo: 'citrix', + link: 'https://www.citrix.com/networking/microservices.html', + blurb: 'Netscaler CPX gives app developers all the features they need to load balance their microservices and containerized apps with Kubernetes.' + }, + { + type: 0, + name: 'Cockroach Labs', + logo: 'cockroach_labs', + link: 'https://www.cockroachlabs.com/blog/running-cockroachdb-on-kubernetes/', + blurb: 'CockroachDB is a distributed SQL database whose built-in replication and survivability model pair with Kubernetes to truly make data easy.' + }, + { + type: 2, + name: 'Weaveworks', + logo: 'weave_works', + link: ' https://weave.works/kubernetes', + blurb: 'Weaveworks enables Developers and Dev/Ops teams to easily connect, deploy, secure, manage, and troubleshoot microservices in Kubernetes.' + }, + { + type: 0, + name: 'Intel', + logo: 'intel', + link: 'https://tectonic.com/press/intel-coreos-collaborate-on-openstack-with-kubernetes.html', + blurb: 'Powering the GIFEE (Google’s Infrastructure for Everyone Else), to run OpenStack deployments on Kubernetes.' + }, + { + type: 3, + name: 'Platform9', + logo: 'platform9', + link: 'https://platform9.com/products/kubernetes/', + blurb: 'Platform9 is the open source-as-a-service company that takes all of the goodness of Kubernetes and delivers it as a managed service.' + }, + { + type: 0, + name: 'Datadog', + logo: 'datadog', + link: 'http://docs.datadoghq.com/integrations/kubernetes/', + blurb: 'Full-stack observability for dynamic infrastructure & applications. Includes precision alerting, analytics and deep Kubernetes integrations. ' + }, + { + type: 0, + name: 'AppFormix', + logo: 'appformix', + link: 'http://www.appformix.com/solutions/appformix-for-kubernetes/', + blurb: 'AppFormix is a cloud infrastructure performance optimization service helping enterprise operators streamline their cloud operations on any Kubernetes cloud. ' + }, + { + type: 0, + name: 'Crunchy', + logo: 'crunchy', + link: 'http://info.crunchydata.com/blog/advanced-crunchy-containers-for-postgresql', + blurb: 'Crunchy PostgreSQL Container Suite is a set of containers for managing PostgreSQL with DBA microservices leveraging Kubernetes and Helm.' + }, + { + type: 0, + name: 'Aqua', + logo: 'aqua', + link: 'http://blog.aquasec.com/security-best-practices-for-kubernetes-deployment', + blurb: 'Deep, automated security for your containers running on Kubernetes.' + }, + { + type: 0, + name: 'Distelli', + logo: 'distelli', + link: 'https://www.distelli.com/', + blurb: 'Pipelines from your source repositories to your Kubernetes Clusters on any cloud.' + }, + { + type: 0, + name: 'Nuage networks', + logo: 'nuagenetworks', + link: 'https://github.com/nuagenetworks/nuage-kubernetes', + blurb: 'The Nuage SDN platform provides policy-based networking between Kubernetes Pods and non-Kubernetes environments with visibility and security monitoring.' + }, + { + type: 0, + name: 'Sematext', + logo: 'sematext', + link: 'https://sematext.com/kubernetes/', + blurb: 'Logging & Monitoring: Automatic collection and processing of Metrics, Events and Logs for auto-discovered pods and Kubernetes nodes.' + }, + { + type: 0, + name: 'Diamanti', + logo: 'diamanti', + link: 'https://www.diamanti.com/products/', + blurb: 'Diamanti deploys containers with guaranteed performance using Kubernetes in the first hyperconverged appliance purpose built for containerized applications.' + }, + { + type: 0, + name: 'Aporeto', + logo: 'aporeto', + link: 'https://aporeto.com/trireme', + blurb: 'Aporeto makes cloud-native applications secure by default without impacting developer velocity and works at any scale, on any cloud.' + }, + { + type: 2, + name: 'Giant Swarm', + logo: 'giantswarm', + link: 'https://giantswarm.io', + blurb: 'Giant Swarm enables you to simply and rapidly create and use Kubernetes clusters on-demand either on-premises or in the cloud. Contact Giant Swarm to learn about the best way to run cloud native applications anywhere.' + }, + { + type: 3, + name: 'Giant Swarm', + logo: 'giantswarm', + link: 'https://giantswarm.io/product/', + blurb: 'Giant Swarm enables you to simply and rapidly create and use Kubernetes clusters on-demand either on-premises or in the cloud. Contact Giant Swarm to learn about the best way to run cloud native applications anywhere.' + }, + { + type: 3, + name: 'Hasura', + logo: 'hasura', + link: 'https://hasura.io', + blurb: 'Hasura is a Kubernetes-based PaaS and a Postgres-based BaaS that accelerates app development with ready-to-use components.' + }, + { + type: 3, + name: 'Mirantis', + logo: 'mirantis', + link: 'https://www.mirantis.com/software/kubernetes/', + blurb: 'Mirantis - Mirantis Cloud Platform' + }, + { + type: 2, + name: 'Mirantis', + logo: 'mirantis', + link: 'https://content.mirantis.com/Containerizing-OpenStack-on-Kubernetes-Video-Landing-Page.html', + blurb: 'Mirantis builds and manages private clouds with open source software such as OpenStack, deployed as containers orchestrated by Kubernetes.' + }, + { + type: 0, + name: 'Kubernetic', + logo: 'kubernetic', + link: 'https://kubernetic.com/', + blurb: 'Kubernetic is a Kubernetes Desktop client that simplifies and democratizes cluster management for DevOps.' + }, + { + type: 1, + name: 'Reactive Ops', + logo: 'reactive_ops', + link: 'https://www.reactiveops.com/the-kubernetes-experts/', + blurb: 'ReactiveOps has written automation on best practices for infrastructure as code on GCP & AWS using Kubernetes, helping you build and maintain a world-class infrastructure at a fraction of the price of an internal hire.' + }, + { + type: 2, + name: 'Livewyer', + logo: 'livewyer', + link: 'https://livewyer.io/services/kubernetes-experts/', + blurb: 'Kubernetes experts that on-board applications and empower IT teams to get the most out of containerised technology.' + }, + { + type: 2, + name: 'Samsung SDS', + logo: 'samsung_sds', + link: 'http://www.samsungsdsa.com/cloud-infrastructure_kubernetes', + blurb: 'Samsung SDS’s Cloud Native Computing Team offers expert consulting across the range of technical aspects involved in building services targeted at a Kubernetes cluster.' + }, + { + type: 2, + name: 'Container Solutions', + logo: 'container_solutions', + link: 'http://container-solutions.com/resources/kubernetes/', + blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.' + }, + { + type: 4, + name: 'Container Solutions', + logo: 'container_solutions', + link: 'http://container-solutions.com/resources/kubernetes/', + blurb: 'Container Solutions is a premium software consultancy that focuses on programmable infrastructure, offering our expertise in software development, strategy and operations to help you innovate at speed and scale.' + }, + { + type: 2, + name: 'Jetstack', + logo: 'jetstack', + link: 'https://www.jetstack.io/', + blurb: 'Jetstack is an organisation focused entirely on Kubernetes. They will help you to get the most out of Kubernetes through expert professional services and open source tooling. Get in touch, and accelerate your project.' + }, + { + type: 0, + name: 'Tigera', + logo: 'tigera', + link: 'http://docs.projectcalico.org/latest/getting-started/kubernetes/', + blurb: 'Tigera builds high performance, policy driven, cloud native networking solutions for Kubernetes.' + }, + { + type: 1, + name: 'Harbur', + logo: 'harbur', + link: 'https://harbur.io/', + blurb: 'Based in Barcelona, Harbur is a consulting firm that helps companies deploy self-healing solutions empowered by Container technologies' + }, + { + type: 0, + name: 'Spotinst', + logo: 'spotinst', + link: 'http://blog.spotinst.com/2016/08/04/elastigroup-kubernetes-minions-steroids/', + blurb: 'Your Kubernetes For 80% Less. Run K8s workloads on Spot Instances with 100% availability to save 80% + autoscale your Kubernetes with maximum efficiency in heterogenous environments.' + }, + { + type: 2, + name: 'InwinSTACK', + logo: 'inwinstack', + link: 'http://www.inwinstack.com/index.php/en/solutions-en/', + blurb: 'Our container service leverages OpenStack-based infrastructure and its container orchestration engine Magnum to manage Kubernetes clusters.' + }, + { + type: 4, + name: 'InwinSTACK', + logo: 'inwinstack', + link: 'http://www.inwinstack.com/index.php/en/solutions-en/', + blurb: 'Our container service leverages OpenStack-based infrastructure and its container orchestration engine Magnum to manage Kubernetes clusters.' + }, + { + type: 3, + name: 'InwinSTACK', + logo: 'inwinstack', + link: 'https://github.com/inwinstack/kube-ansible', + blurb: 'inwinSTACK - kube-ansible' + }, + { + type: 1, + name: 'Semantix', + logo: 'semantix', + link: 'http://www.semantix.com.br/', + blurb: 'Semantix is a company that works with data analytics and distributed systems. Kubernetes is used to orchestrate services for our customers.' + }, + { + type: 0, + name: 'ASM Technologies Limited', + logo: 'asm', + link: 'http://www.asmtech.com/', + blurb: 'Our technology supply chain portfolio enables your software products to be accessible, viable and available more effectively.' + }, + { + type: 1, + name: 'InfraCloud Technologies', + logo: 'infracloud', + link: 'http://blog.infracloud.io/state-of-kubernetes/', + blurb: 'InfraCloud Technologies is software consultancy which provides services in Containers, Cloud and DevOps.' + }, + { + type: 0, + name: 'SignalFx', + logo: 'signalfx', + link: 'https://github.com/signalfx/integrations/tree/master/kubernetes', + blurb: 'Gain real-time visibility across metrics & the most intelligent alerts for todays architectures, including deep integration with Kubernetes' + }, + { + type: 0, + name: 'NATS', + logo: 'nats', + link: 'https://github.com/pires/kubernetes-nats-cluster', + blurb: 'NATS is a simple, secure, and scalable cloud native messaging system.' + }, + { + type: 2, + name: 'RX-M', + logo: 'rxm', + link: 'http://rx-m.com/training/kubernetes-training/', + blurb: 'Market neutral Kubernetes Dev, DevOps and Production training and consulting services.' + }, + { + type: 4, + name: 'RX-M', + logo: 'rxm', + link: 'http://rx-m.com/training/kubernetes-training/', + blurb: 'Market neutral Kubernetes Dev, DevOps and Production training and consulting services.' + }, + { + type: 1, + name: 'Emerging Technology Advisors', + logo: 'eta', + link: 'https://www.emergingtechnologyadvisors.com/services/kubernetes.html', + blurb: 'ETA helps companies architect, implement, and manage scalable applications using Kubernetes on public or private cloud.' + }, + { + type: 0, + name: 'CloudPlex.io', + logo: 'cloudplex', + link: 'http://www.cloudplex.io', + blurb: 'CloudPlex enables operations teams to visually deploy, orchestrate, manage, and monitor infrastructure, applications, and services in public or private cloud.' + }, + { + type: 2, + name: 'Kumina', + logo: 'kumina', + link: 'https://www.kumina.nl/managed_kubernetes', + blurb: 'Kumina combines the power of Kubernetes with 10+ years of experience in IT operations. We create, build and support fully managed Kubernetes solutions on your choice of infrastructure. We also provide consulting and training.' + }, + { + type: 0, + name: 'CA Technologies', + logo: 'ca', + link: 'https://docops.ca.com/ca-continuous-delivery-director/integrations/en/plug-ins/kubernetes-plug-in', + blurb: 'The CA Continuous Delivery Director Kubernetes plugin orchestrates deployment of containerized applications within an end-to-end release pipeline.' + }, + { + type: 0, + name: 'CoScale', + logo: 'coscale', + link: 'http://www.coscale.com/blog/how-to-monitor-your-kubernetes-cluster', + blurb: 'Full stack monitoring of containers and microservices orchestrated by Kubernetes. Powered by anomaly detection to find problems faster.' + }, + { + type: 2, + name: 'Supergiant.io', + logo: 'supergiant', + link: 'https://supergiant.io/blog/supergiant-packing-algorithm-unique-save-money', + blurb: 'Supergiant autoscales hardware for Kubernetes. Open-source, it makes HA, distributed, stateful apps easy to deploy, manage, and scale.' + }, + { + type: 0, + name: 'Avi Networks', + logo: 'avinetworks', + link: 'https://kb.avinetworks.com/avi-vantage-openshift-installation-guide/', + blurb: 'Avis elastic application services fabric provides scalable, feature rich & integrated L4-7 networking for K8S environments.' + }, + { + type: 1, + name: 'Codecrux web technologies pvt ltd', + logo: 'codecrux', + link: 'http://codecrux.com/kubernetes/', + blurb: 'At CodeCrux we help your organization get the most out of Containers and Kubernetes, regardless of where you are in your journey' + }, + { + type: 0, + name: 'Greenqloud', + logo: 'qstack', + link: 'https://www.qstack.com/application-orchestration/', + blurb: 'Qstack provides self-serviceable on-site Kubernetes clusters with an intuitive User Interface for Infrastructure and Kubernetes management.' + }, + { + type: 1, + name: 'StackOverdrive.io', + logo: 'stackoverdrive', + link: 'http://www.stackoverdrive.net/kubernetes-consulting/', + blurb: 'StackOverdrive helps organizations of all sizes leverage Kubernetes for container based orchestration and management.' + }, + { + type: 0, + name: 'StackIQ, Inc.', + logo: 'stackiq', + link: 'https://www.stackiq.com/kubernetes/', + blurb: 'With Stacki and the Stacki Pallet for Kubernetes, you can go from bare metal to containers in one step very quickly and easily.' + }, + { + type: 0, + name: 'Cobe', + logo: 'cobe', + link: 'https://cobe.io/product-page/', + blurb: 'Manage Kubernetes clusters with a live, searchable model that captures all relationships and performance data in full visualised context.' + }, + { + type: 0, + name: 'Datawire', + logo: 'datawire', + link: 'http://www.datawire.io', + blurb: 'Datawires open source tools let your microservices developers be awesomely productive on Kubernetes, while letting ops sleep at night.' + }, + { + type: 0, + name: 'Mashape, Inc.', + logo: 'kong', + link: 'https://getkong.org/install/kubernetes/', + blurb: 'Kong is a scalable open source API layer that runs in front of any RESTful API and can be provisioned to a Kubernetes cluster.' + }, + { + type: 0, + name: 'F5 Networks', + logo: 'f5networks', + link: 'http://github.com/f5networks', + blurb: 'We have a LB integration into Kubernetes.' + }, + { + type: 1, + name: 'Lovable Tech', + logo: 'lovable', + link: 'http://lovable.tech/', + blurb: 'World class engineers, designers, and strategic consultants helping you ship Lovable web & mobile technology.' + }, + { + type: 0, + name: 'StackState', + logo: 'stackstate', + link: 'http://stackstate.com/platform/container-monitoring', + blurb: 'Operational Analytics across teams and tools. Includes topology visualization, root cause analysis and anomaly detection for Kubernetes.' + }, + { + type: 1, + name: 'INEXCCO INC', + logo: 'inexcco', + link: 'https://www.inexcco.com/', + blurb: 'Strong DevOps and Cloud talent working with couple clients on kubernetes and helm implementations. ' + }, + { + type: 2, + name: 'Bitnami', + logo: 'bitnami', + link: 'http://bitnami.com/kubernetes', + blurb: 'Bitnami brings a catalog of trusted, up to date, and easy to use applications and application building blocks to Kubernetes.' + }, + { + type: 1, + name: 'Nebulaworks', + logo: 'nebulaworks', + link: 'http://www.nebulaworks.com/container-platforms', + blurb: 'Nebulaworks provides services to help the enterprise adopt modern container platforms and optimized processes to enable innovation at scale.' + }, + { + type: 1, + name: 'EASYNUBE', + logo: 'easynube', + link: 'http://easynube.co.uk/devopsnube/', + blurb: 'EasyNube provide architecture, implementation, and manage scalable applications using Kubernetes and Openshift.' + }, + { + type: 1, + name: 'Opcito Technologies', + logo: 'opcito', + link: 'http://www.opcito.com/kubernetes/', + blurb: 'Opcito is a software consultancy that uses Kubernetes to help organisations build, architect & deploy highly scalable applications.' + }, + { + type: 0, + name: 'code by Dell EMC', + logo: 'codedellemc', + link: 'https://blog.codedellemc.com', + blurb: 'Respected as a thought leader in storage persistence for containerized applications. Contributed significant work to K8 and Ecosystem' + }, + { + type: 0, + name: 'Instana', + logo: 'instana', + link: 'https://www.instana.com/supported-technologies/', + blurb: 'Instana monitors performance of the applications, infrastructure, containers and services deployed on a Kubernetes cluster.' + }, + { + type: 0, + name: 'Netsil', + logo: 'netsil', + link: 'https://netsil.com/kubernetes/', + blurb: 'Generate a real-time, auto-discovered application topology map! Monitor Kubernetes pods and namespaces without any code instrumentation.' + }, + { + type: 2, + name: 'Treasure Data', + logo: 'treasuredata', + link: 'https://fluentd.treasuredata.com/kubernetes-logging/', + blurb: 'Fluentd Enterprise brings smart, secure logging to Kubernetes, and brings integrations with backends such as Splunk, Kafka, or AWS S3.' + }, + { + type: 2, + name: 'Kenzan', + logo: 'Kenzan', + link: 'http://kenzan.com/?ref=kubernetes', + blurb: 'We provide custom consulting services leveraging Kubernetes as our foundation. This involves the platform development, delivery pipelines, and the application development within Kubernetes.' + }, + { + type: 2, + name: 'New Context', + logo: 'newcontext', + link: 'https://www.newcontext.com/devsecops-infrastructure-automation-orchestration/', + blurb: 'New Context builds and uplifts secure Kubernetes implementations and migrations, from initial design to infrastructure automation and management.' + }, + { + type: 2, + name: 'Banzai', + logo: 'banzai', + link: 'https://banzaicloud.com/platform/', + blurb: 'Banzai Cloud brings cloud native to the enterprise and simplifies the transition to microservices on Kubernetes.' + }, + { + type: 3, + name: 'Kublr', + logo: 'kublr', + link: 'http://kublr.com', + blurb: 'Kublr - Accelerate and control the deployment, scaling, monitoring and management of your containerized applications.' + }, + { + type: 1, + name: 'ControlPlane', + logo: 'controlplane', + link: 'https://control-plane.io', + blurb: 'We are a London-based Kubernetes consultancy with a focus on security and continuous delivery. We offer consulting & training.' + }, + { + type: 3, + name: 'Nirmata', + logo: 'nirmata', + link: 'https://www.nirmata.com/', + blurb: 'Nirmata - Nirmata Managed Kubernetes' + }, + { + type: 2, + name: 'Nirmata', + logo: 'nirmata', + link: 'https://www.nirmata.com/', + blurb: 'Nirmata is a software platform that helps DevOps teams deliver enterprise-grade and cloud-provider agnostic Kubernetes based container management solutions.' + }, + { + type: 3, + name: 'TenxCloud', + logo: 'tenxcloud', + link: 'https://tenxcloud.com', + blurb: 'TenxCloud - TenxCloud Container Engine (TCE)' + }, + { + type: 2, + name: 'TenxCloud', + logo: 'tenxcloud', + link: 'https://www.tenxcloud.com/', + blurb: 'Founded in October 2014, TenxCloud is a leading enterprise container cloud computing service provider in China, covering the areas such as container PaaS cloud platform, micro-service management, DevOps, development test, AIOps and so on. Provide private cloud PaaS products and solutions for financial, energy, operator, manufacturing, education and other industry customers.' + }, + { + type: 0, + name: 'Twistlock', + logo: 'twistlock', + link: 'https://www.twistlock.com/', + blurb: 'Security at Kubernetes Scale: Twistlock allows you to deploy fearlessly with assurance that your images and containers are free of vulnerabilities and protected at runtime.' + }, + { + type: 0, + name: 'Endocode AG', + logo: 'endocode', + link: 'https://endocode.com/kubernetes/', + blurb: 'Endocode practices and teaches the open source way. Kernel to cluster - Dev to Ops. We offer Kubernetes trainings, services and support.' + }, + { + type: 2, + name: 'Accenture', + logo: 'accenture', + link: 'https://www.accenture.com/us-en/service-application-containers', + blurb: 'Architecture, implementation and operation of world-class Kubernetes solutions for cloud-native clients.' + }, + { + type: 1, + name: 'Biarca', + logo: 'biarca', + link: 'http://biarca.io/', + blurb: 'Biarca is a cloud services provider and key focus areas Key areas of focus for Biarca include Cloud Adoption Services, Infrastructure Services, DevOps Services and Application Services. Biarca leverages Kubernetes to deliver containerized solutions.' + }, + { + type: 2, + name: 'Claranet', + logo: 'claranet', + link: 'http://www.claranet.co.uk/hosting/google-cloud-platform-consulting-managed-services', + blurb: 'Claranet helps people migrate to the cloud and take full advantage of the new world it offers. We consult, design, build and proactively manage the right infrastructure and automation tooling for clients to achieve this.' + }, + { + type: 1, + name: 'CloudKite', + logo: 'cloudkite', + link: 'https://cloudkite.io/', + blurb: 'CloudKite.io helps companies build and maintain highly automated, resilient, and impressively performing software on Kubernetes.' + }, + { + type: 2, + name: 'CloudOps', + logo: 'CloudOps', + link: 'https://www.cloudops.com/services/docker-and-kubernetes-workshops/', + blurb: 'CloudOps gets you hands-on with the K8s ecosystem via workshop/lab. Get prod ready K8s in cloud(s) of your choice with our managed services.' + }, + { + type: 2, + name: 'Ghostcloud', + logo: 'ghostcloud', + link: 'https://www.ghostcloud.cn/ecos-kubernetes', + blurb: 'EcOS is an enterprise-grade PaaS / CaaS based on Docker and Kubernetes, which makes it easier to configure, deploy and manage containerized applications.' + }, + { + type: 3, + name: 'Ghostcloud', + logo: 'ghostcloud', + link: 'https://www.ghostcloud.cn/ecos-kubernetes', + blurb: 'EcOS is an enterprise-grade PaaS / CaaS based on Docker and Kubernetes, which makes it easier to configure, deploy and manage containerized applications.' + }, + { + type: 2, + name: 'Contino', + logo: 'contino', + link: 'https://www.contino.io/', + blurb: 'We help enterprise organizations adopt DevOps, containers and cloud computing. Contino is a global consultancy that enables regulated organizations to accelerate innovation through the adoption of modern approaches to software delivery.' + }, + { + type: 2, + name: 'Booz Allen Hamilton', + logo: 'boozallenhamilton', + link: 'https://www.boozallen.com/', + blurb: 'Booz Allen partners with public and private sector clients to solve their most difficult challenges through a combination of consulting, analytics, mission operations, technology, systems delivery, cybersecurity, engineering, and innovation expertise.' + }, + { + type: 1, + name: 'BigBinary', + logo: 'bigbinary', + link: 'http://blog.bigbinary.com/categories/Kubernetes', + blurb: 'Provider of Digital Solutions for federal and commercial clients, to include DevSecOps, cloud platforms, transformation strategy, cognitive solutions, and UX.' + }, + { + type: 0, + name: 'CloudPerceptions', + logo: 'cloudperceptions', + link: 'https://www.meetup.com/Triangle-Kubernetes-Meetup/files/', + blurb: 'Container security solution for small-to-medium size enterprises who plan to run Kubernetes on shared infrastructure.' + }, + { + type: 2, + name: 'Creationline, Inc.', + logo: 'creationline', + link: 'https://www.creationline.com/ci', + blurb: 'Total solution for container based IT resource management.' + }, + { + type: 0, + name: 'DataCore Software', + logo: 'datacore', + link: 'https://www.datacore.com/solutions/virtualization/containerization', + blurb: 'DataCore provides highly-available, high-performance universal block storage for Kubernetes, radically improving the speed of deployment.' + }, + { + type: 0, + name: 'Elastifile', + logo: 'elastifile', + link: 'https://www.elastifile.com/stateful-containers', + blurb: 'Elastifile’s cross-cloud data fabric delivers elastically scalable, high performance, software-defined persistent storage for Kubernetes.' + }, + { + type: 0, + name: 'GitLab', + logo: 'gitlab', + link: 'https://about.gitlab.com/2016/11/14/idea-to-production/', + blurb: 'With GitLab and Kubernetes, you can deploy a complete CI/CD pipeline with multiple environments, automatic deployments, and automatic monitoring.' + }, + { + type: 0, + name: 'Gravitational, Inc.', + logo: 'gravitational', + link: 'https://gravitational.com/telekube/', + blurb: 'Telekube combines Kubernetes with Teleport, our modern SSH server, so operators can remotely manage a multitude of K8s application deployments.' + }, + { + type: 0, + name: 'Hitachi Data Systems', + logo: 'hitachi', + link: 'https://www.hds.com/en-us/products-solutions/application-solutions/unified-compute-platform-with-kubernetes-orchestration.html', + blurb: 'Build the Applications You Need to Drive Your Business - DEVELOP AND DEPLOY APPLICATIONS FASTER AND MORE RELIABLY.' + }, + { + type: 1, + name: 'Infosys Technologies', + logo: 'infosys', + link: 'https://www.infosys.com', + blurb: 'Monolithic to microservices on openshift is a offering that we are building as part of open source practice.' + }, + { + type: 0, + name: 'JFrog', + logo: 'jfrog', + link: 'https://www.jfrog.com/use-cases/12584/', + blurb: 'You can use Artifactory to store and manage all of your application’s container images and deploy to Kubernetes and setup a build, test, deploy pipeline using Jenkins and Artifactory. Once an image is ready to be rolled out, Artifactory can trigger a rolling-update deployment into a Kubernetes cluster without downtime – automatically!' + }, + { + type: 0, + name: 'Navops by Univa', + logo: 'navops', + link: 'https://www.navops.io', + blurb: 'Navops is a suite of products that enables enterprises to take full advantage of Kubernetes and provides the ability to quickly and efficiently run containers at scale.' + }, + { + type: 0, + name: 'NeuVector', + logo: 'neuvector', + link: 'http://neuvector.com/solutions-for-kubernetes-security/', + blurb: 'NeuVector delivers an application and network intelligent container network security solution integrated with and optimized for Kubernetes.' + }, + { + type: 1, + name: 'OpsZero', + logo: 'opszero', + link: 'https://www.opszero.com/kubernetes.html', + blurb: 'opsZero provides DevOps for Startups. We build and service your Kubernetes and Cloud Infrastructure to accelerate your release cycle.' + }, + { + type: 1, + name: 'Shiwaforce.com Ltd.', + logo: 'shiwaforce', + link: 'https://www.shiwaforce.com/en/', + blurb: 'Shiwaforce.com is the Agile Partner in Digital Transformation. Our solutions follow business changes quickly, easily and cost-effectively.' + }, + { + type: 1, + name: 'SoftServe', + logo: 'softserve', + link: 'https://www.softserveinc.com/en-us/blogs/kubernetes-travis-ci/', + blurb: 'SoftServe allows its clients to adopt modern application design patterns and benefit from fully integrated, highly available, cost effective Kubernetes clusters at any scale.' + }, + { + type: 1, + name: 'Solinea', + logo: 'solinea', + link: 'https://www.solinea.com/cloud-consulting-services/container-microservices-offerings', + blurb: 'Solinea is a digital transformation consultancy that enables businesses to build innovative solutions by adopting cloud native computing.' + }, + { + type: 1, + name: 'Sphere Software, LLC', + logo: 'spheresoftware', + link: 'https://sphereinc.com/kubernetes/', + blurb: 'The Sphere Software team of experts allows customers to architect and implement scalable applications using Kubernetes in Google Cloud, AWS, and Azure.' + }, + { + type: 1, + name: 'Altoros', + logo: 'altoros', + link: 'https://www.altoros.com/container-orchestration-tools-enablement.html', + blurb: 'Deployment and configuration of Kubernetes, Optimization of existing solutions, training for developers on using Kubernetes, support.' + }, + { + type: 0, + name: 'Cloudbase Solutions', + logo: 'cloudbase', + link: 'https://cloudbase.it/kubernetes', + blurb: 'Cloudbase Solutions provides Kubernetes cross-cloud interoperability for Windows and Linux deployments based on open source technologies.' + }, + { + type: 0, + name: 'Codefresh', + logo: 'codefresh', + link: 'https://codefresh.io/kubernetes-deploy/', + blurb: 'Codefresh is a complete DevOps platform built for containers and Kubernetes. With CI/CD pipelines, image management, and deep integrations into Kubernetes and Helm.' + }, + { + type: 0, + name: 'NetApp', + logo: 'netapp', + link: 'http://netapp.io/2016/12/23/introducing-trident-dynamic-persistent-volume-provisioner-kubernetes/', + blurb: 'Dynamic provisioning and persistent storage support.' + }, + { + type: 0, + name: 'OpenEBS', + logo: 'OpenEBS', + link: 'https://openebs.io/', + blurb: 'OpenEBS is containerized storage for containers integrated tightly into Kubernetes and based on distributed block storage and containerization of storage control. OpenEBS derives intent from K8s and other YAML or JSON such as per container QoS SLAs, tiering and replica policies, and more. OpenEBS is EBS API compliant.' + }, + { + type: 3, + name: 'Google Kubernetes Engine', + logo: 'google', + link: 'https://cloud.google.com/kubernetes-engine/', + blurb: 'Google - Google Kubernetes Engine' + }, + { + type: 1, + name: 'Superorbital', + logo: 'superorbital', + link: 'https://superorbit.al/workshops/kubernetes/', + blurb: 'Helping companies navigate the Cloud Native waters through Kubernetes consulting and training.' + }, + { + type: 3, + name: 'Apprenda', + logo: 'apprenda', + link: 'https://apprenda.com/kismatic/', + blurb: 'Apprenda - Kismatic Enterprise Toolkit (KET)' + }, + { + type: 3, + name: 'Red Hat', + logo: 'redhat', + link: 'https://www.openshift.com', + blurb: 'Red Hat - OpenShift Online and OpenShift Container Platform' + }, + { + type: 3, + name: 'Rancher', + logo: 'rancher', + link: 'http://rancher.com/kubernetes/', + blurb: 'Rancher Inc. - Rancher Kubernetes' + }, + { + type: 3, + name: 'Canonical', + logo: 'canonical', + link: 'https://www.ubuntu.com/kubernetes', + blurb: 'The Canonical Distribution of Kubernetes enables you to operate Kubernetes clusters on demand on any major public cloud and private infrastructure.' + }, + { + type: 2, + name: 'Canonical', + logo: 'canonical', + link: 'https://www.ubuntu.com/kubernetes', + blurb: 'Canonical Ltd. - Canonical Distribution of Kubernetes' + }, + { + type: 3, + name: 'Cisco', + logo: 'cisco', + link: 'https://www.cisco.com', + blurb: 'Cisco Systems - Cisco Container Platform' + }, + { + type: 3, + name: 'Cloud Foundry', + logo: 'cff', + link: 'https://www.cloudfoundry.org/container-runtime/', + blurb: 'Cloud Foundry - Cloud Foundry Container Runtime' + }, + { + type: 3, + name: 'IBM', + logo: 'ibm', + link: 'https://www.ibm.com/cloud/container-service', + blurb: 'IBM - IBM Cloud Kubernetes Service' + }, + { + type: 2, + name: 'IBM', + logo: 'ibm', + link: 'https://www.ibm.com/cloud-computing/bluemix/containers', + blurb: 'The IBM Bluemix Container Service combines Docker and Kubernetes to deliver powerful tools, an intuitive user experiences, and built-in security and isolation to enable rapid delivery of applications all while leveraging Cloud Services including cognitive capabilities from Watson.' + }, + { + type: 3, + name: 'Samsung', + logo: 'samsung_sds', + link: 'https://github.com/samsung-cnct/kraken', + blurb: 'Samsung SDS - Kraken' + }, + { + type: 3, + name: 'IBM', + logo: 'ibm', + link: 'https://www.ibm.com/cloud-computing/products/ibm-cloud-private/', + blurb: 'IBM - IBM Cloud Private' + }, + { + type: 3, + name: 'Kinvolk', + logo: 'kinvolk', + link: 'https://github.com/kinvolk/kube-spawn', + blurb: 'Kinvolk - kube-spawn' + }, + { + type: 3, + name: 'Heptio', + logo: 'heptio', + link: 'https://aws.amazon.com/quickstart/architecture/heptio-kubernetes', + blurb: 'Heptio - AWS-Quickstart' + }, + { + type: 2, + name: 'Heptio', + logo: 'heptio', + link: 'http://heptio.com', + blurb: 'Heptio helps businesses of all sizes get closer to the vibrant Kubernetes community.' + }, + { + type: 3, + name: 'StackPointCloud', + logo: 'stackpoint', + link: 'https://stackpoint.io', + blurb: 'StackPointCloud - StackPointCloud' + }, + { + type: 2, + name: 'StackPointCloud', + logo: 'stackpoint', + link: 'https://stackpoint.io', + blurb: 'StackPointCloud offers a wide range of support plans for managed Kubernetes clusters built through its universal control plane for Kubernetes Anywhere.' + }, + { + type: 3, + name: 'Caicloud', + logo: 'caicloud', + link: 'https://caicloud.io/products/compass', + blurb: 'Caicloud - Compass' + }, + { + type: 2, + name: 'Caicloud', + logo: 'caicloud', + link: 'https://caicloud.io/', + blurb: 'Founded by ex-Googlers,and early Kubernetes contributors, Caicloud leverages Kubernetes to provide container products which have successfully served Fortune 500 enterprises, and further utilizes Kubernetes as a vehicle to deliver ultra-speed deep learning experience.' + }, + { + type: 3, + name: 'Alibaba', + logo: 'alibaba', + link: 'https://www.aliyun.com/product/containerservice?spm=5176.8142029.388261.219.3836dbccRpJ5e9', + blurb: 'Alibaba Cloud - Alibaba Cloud Container Service' + }, + { + type: 3, + name: 'Tencent', + logo: 'tencent', + link: 'https://cloud.tencent.com/product/ccs?lang=en', + blurb: 'Tencent Cloud - Tencent Cloud Container Service' + }, + { + type: 3, + name: 'Huawei', + logo: 'huawei', + link: 'http://www.huaweicloud.com/product/cce.html', + blurb: 'Huawei - Huawei Cloud Container Engine' + }, + { + type: 2, + name: 'Huawei', + logo: 'huawei', + link: 'http://developer.huawei.com/ict/en/site-paas', + blurb: 'FusionStage is an enterprise-grade Platform as a Service product, the core of which is based on mainstream open source container technology including Kubernetes and Docker.' + }, + { + type: 3, + name: 'Google', + logo: 'google', + link: 'https://github.com/kubernetes/kubernetes/tree/master/cluster', + blurb: 'Google - kube-up.sh on Google Compute Engine' + }, + { + type: 3, + name: 'Poseidon', + logo: 'poseidon', + link: 'https://typhoon.psdn.io/', + blurb: 'Poseidon - Typhoon' + }, + { + type: 3, + name: 'Netease', + logo: 'netease', + link: 'https://www.163yun.com/product/container-service-dedicated', + blurb: 'Netease - Netease Container Service Dedicated' + }, + { + type: 2, + name: 'Loodse', + logo: 'loodse', + link: 'https://loodse.com', + blurb: 'Loodse provides Kubernetes training & consulting, and host related events regularly across Europe.' + }, + { + type: 4, + name: 'Loodse', + logo: 'loodse', + link: 'https://loodse.com', + blurb: 'Loodse provides Kubernetes training & consulting, and host related events regularly across Europe.' + }, + { + type: 4, + name: 'LF Training', + logo: 'lf-training', + link: 'https://training.linuxfoundation.org/', + blurb: 'The Linux Foundation’s training program combines the broad, foundational knowledge with the networking opportunities that attendees need to thrive in their careers today.' + }, + { + type: 3, + name: 'Loodse', + logo: 'loodse', + link: 'https://loodse.com', + blurb: 'Loodse - Kubermatic Container Engine' + }, + { + type: 1, + name: 'LTI', + logo: 'lti', + link: 'https://www.lntinfotech.com/', + blurb: 'LTI helps enterprises architect, develop and support scalable cloud native apps using Docker and Kubernetes for private or public cloud.' + }, + { + type: 3, + name: 'Microsoft', + logo: 'microsoft', + link: 'https://github.com/Azure/acs-engine', + blurb: 'Microsoft - Azure acs-engine' + }, + { + type: 3, + name: 'Microsoft', + logo: 'microsoft', + link: 'https://docs.microsoft.com/en-us/azure/aks/', + blurb: 'Microsoft - Azure Container Service AKS' + }, + { + type: 3, + name: 'Oracle', + logo: 'oracle', + link: 'http://www.wercker.com/product', + blurb: 'Oracle - Oracle Container Engine' + }, + { + type: 3, + name: 'Oracle', + logo: 'oracle', + link: 'https://github.com/oracle/terraform-kubernetes-installer', + blurb: 'Oracle - Oracle Terraform Kubernetes Installer' + }, + { + type: 3, + name: 'Mesosphere', + logo: 'mesosphere', + link: 'https://mesosphere.com/kubernetes/', + blurb: 'Mesosphere - Kubernetes on DC/OS' + }, + { + type: 3, + name: 'Appscode', + logo: 'appscode', + link: 'https://appscode.com/products/cloud-deployment/', + blurb: 'Appscode - Pharmer' + }, + { + type: 3, + name: 'SAP', + logo: 'sap', + link: 'https://cloudplatform.sap.com/index.html', + blurb: 'SAP - Cloud Platform - Gardener (not yet released)' + }, + { + type: 3, + name: 'Oracle', + logo: 'oracle', + link: 'https://www.oracle.com/linux/index.html', + blurb: 'Oracle - Oracle Linux Container Services for use with Kubernetes' + }, + { + type: 3, + name: 'CoreOS', + logo: 'coreos', + link: 'https://github.com/kubernetes-incubator/bootkube', + blurb: 'CoreOS - bootkube' + }, + { + type: 2, + name: 'CoreOS', + logo: 'coreos', + link: 'https://coreos.com/', + blurb: 'Tectonic is the enterprise-ready Kubernetes product, by CoreOS. It adds key features to allow you to manage, update, and control clusters in production.' + }, + { + type: 3, + name: 'Weaveworks', + logo: 'weave_works', + link: '/docs/setup/independent/create-cluster-kubeadm/', + blurb: 'Weaveworks - kubeadm' + }, + { + type: 3, + name: 'Joyent', + logo: 'joyent', + link: 'https://github.com/joyent/triton-kubernetes', + blurb: 'Joyent - Triton Kubernetes' + }, + { + type: 3, + name: 'Wise2c', + logo: 'wise2c', + link: 'http://www.wise2c.com/solution', + blurb: 'Wise2C Technology - WiseCloud' + }, + { + type: 2, + name: 'Wise2c', + logo: 'wise2c', + link: 'http://www.wise2c.com', + blurb: 'Using Kubernetes to providing IT continuous delivery and Enterprise grade container management solution to Financial Industry.' + }, + { + type: 3, + name: 'Docker', + logo: 'docker', + link: 'https://www.docker.com/enterprise-edition', + blurb: 'Docker - Docker Enterprise Edition' + }, + { + type: 3, + name: 'Daocloud', + logo: 'daocloud', + link: 'http://www.daocloud.io/dce', + blurb: 'DaoCloud - DaoCloud Enterprise' + }, + { + type: 2, + name: 'Daocloud', + logo: 'daocloud', + link: 'http://www.daocloud.io/dce', + blurb: 'We provide enterprise-level cloud native application platform that supports both Kubernetes and Docker Swarm.' + }, + { + type: 4, + name: 'Daocloud', + logo: 'daocloud', + link: 'http://www.daocloud.io/dce', + blurb: 'We provide enterprise-level cloud native application platform that supports both Kubernetes and Docker Swarm.' + }, + { + type: 3, + name: 'SUSE', + logo: 'suse', + link: 'https://www.suse.com/products/caas-platform/', + blurb: 'SUSE - SUSE CaaS (Container as a Service) Platform' + }, + { + type: 3, + name: 'Pivotal', + logo: 'pivotal', + link: 'https://cloud.vmware.com/pivotal-container-service', + blurb: 'Pivotal/VMware - Pivotal Container Service (PKS)' + }, + { + type: 3, + name: 'VMware', + logo: 'vmware', + link: 'https://cloud.vmware.com/pivotal-container-service', + blurb: 'Pivotal/VMware - Pivotal Container Service (PKS)' + }, + { + type: 3, + name: 'Alauda', + logo: 'alauda', + link: 'http://www.alauda.cn/product/detail/id/68.html', + blurb: 'Alauda - Alauda EE' + }, + { + type: 4, + name: 'Alauda', + logo: 'alauda', + link: 'http://www.alauda.cn/product/detail/id/68.html', + blurb: 'Alauda provides Kubernetes-Centric Enterprise Platform-as-a-Service offerings with a razor focus on delivering Cloud Native capabilities and DevOps best practices to enterprise customers across industries in China.' + }, + { + type: 2, + name: 'Alauda', + logo: 'alauda', + link: 'www.alauda.io', + blurb: 'Alauda provides Kubernetes-Centric Enterprise Platform-as-a-Service offerings with a razor focus on delivering Cloud Native capabilities and DevOps best practices to enterprise customers across industries in China.' + }, + { + type: 3, + name: 'EasyStack', + logo: 'easystack', + link: 'https://easystack.cn/eks/', + blurb: 'EasyStack - EasyStack Kubernetes Service (EKS)' + }, + { + type: 3, + name: 'CoreOS', + logo: 'coreos', + link: 'https://coreos.com/tectonic/', + blurb: 'CoreOS - Tectonic' + }, + { + type: 0, + name: 'GoPaddle', + logo: 'gopaddle', + link: 'https://gopaddle.io', + blurb: 'goPaddle is a DevOps platform for Kubernetes developers. It simplifies the Kubernetes Service creation and maintenance through source to image conversion, build & version management, team management, access controls and audit logs, single click provision of Kubernetes Clusters across multiple clouds from a single console.' + }, + { + type: 0, + name: 'Vexxhost', + logo: 'vexxhost', + link: 'https://vexxhost.com/public-cloud/container-services/kubernetes/', + blurb: 'VEXXHOST offers a high-performance container management service powered by Kubernetes and OpenStack Magnum.' + }, + { + type: 1, + name: 'Component Soft', + logo: 'componentsoft', + link: 'https://www.componentsoft.eu/?p=3925', + blurb: 'Component Soft offers training, consultation and support around open cloud technologies like Kubernetes, Docker, Openstack and Ceph.' + }, + { + type: 0, + name: 'Datera', + logo: 'datera', + link: 'http://www.datera.io/kubernetes/', + blurb: 'Datera delivers high performance, self-managing elastic block storage with self-service provisioning for deploying Kubernetes at scale.' + }, + { + type: 0, + name: 'Containership', + logo: 'containership', + link: 'https://containership.io/', + blurb: 'Containership is a cloud agnostic managed kubernetes offering that supports automatic provisioning on over 14 cloud providers.' + }, + { + type: 0, + name: 'Pure Storage', + logo: 'pure_storage', + link: 'https://hub.docker.com/r/purestorage/k8s/', + blurb: 'Our flexvol driver and dynamic provisioner allow FlashArray/Flashblade storage devices to be consumed as first class persistent storage from within Kubernetes.' + }, + { + type: 0, + name: 'Elastisys', + logo: 'elastisys', + link: 'https://elastisys.com/kubernetes/', + blurb: 'Predictive autoscaling - detects recurring workload variations, irregular traffic spikes, and everything in between. Runs K8s in any public or private cloud.' + }, + { + type: 0, + name: 'Portworx', + logo: 'portworx', + link: 'https://portworx.com/use-case/kubernetes-storage/', + blurb: 'With Portworx, you can manage any database or stateful service on any infrastructure using Kubernetes. You get a single data management layer for all of your stateful services, no matter where they run.' + }, + { + type: 1, + name: 'Object Computing, Inc.', + logo: 'objectcomputing', + link: 'https://objectcomputing.com/services/software-engineering/devops/kubernetes-services', + blurb: 'Our portfolio of DevOps consulting services includes Kubernetes support, development, and training.' + }, + { + type: 1, + name: 'Isotoma', + logo: 'isotoma', + link: 'https://www.isotoma.com/blog/2017/10/24/containerisation-tips-for-using-kubernetes-with-aws/', + blurb: 'Based in the North of England, Amazon partners who are delivering Kubernetes solutions on AWS for replatforming and native development.' + }, + { + type: 1, + name: 'Servian', + logo: 'servian', + link: 'https://www.servian.com/cloud-and-technology/', + blurb: 'Based in Australia, Servian provides advisory, consulting and managed services to support both application and data centric kubernetes use cases.' + }, + { + type: 1, + name: 'Redzara', + logo: 'redzara', + link: 'http://redzara.com/cloud-service', + blurb: 'Redzara has wide and in-depth experience in Cloud automation, now taking one giant step by providing container service offering and services to our customers.' + }, + { + type: 0, + name: 'Dataspine', + logo: 'dataspine', + link: 'http://dataspine.xyz/', + blurb: 'Dataspine is building a secure, elastic and serverless deployment platform for production ML/AI workloads on top of k8s.' + }, + { + type: 1, + name: 'CloudBourne', + logo: 'cloudbourne', + link: 'https://cloudbourne.com/kubernetes-enterprise-hybrid-cloud/', + blurb: 'Want to achieve maximum build, deploy and monitoring automation using Kubernetes? We can help.' + }, + { + type: 0, + name: 'CloudBourne', + logo: 'cloudbourne', + link: 'https://cloudbourne.com/', + blurb: 'Our AppZ Hybrid Cloud Platform can help you achieve your digital transformation goals using the powerful Kubernetes.' + }, + { + type: 3, + name: 'BoCloud', + logo: 'bocloud', + link: 'http://www.bocloud.com.cn/en/index.html', + blurb: 'BoCloud - BeyondcentContainer' + }, + { + type: 2, + name: 'Naitways', + logo: 'naitways', + link: 'https://www.naitways.com/', + blurb: 'Naitways is an Operator (AS57119), Integrator and Cloud Services Provider (our own !). We aim to provide value-added services through our mastering of the whole value chain (Infrastructure, Network, Human skills). Private and Public Cloud is available through Kubernetes managed or unmanaged.' + }, + { + type: 2, + name: 'Kinvolk', + logo: 'kinvolk', + link: 'https://kinvolk.io/kubernetes/', + blurb: 'Kinvolk offers Kubernetes engineering & operations support from cluster to kernel. Leading cloud-native organizations turn to Kinvolk for deep-stack Linux expertise.' + }, + { + type: 1, + name: 'Cascadeo Corporation', + logo: 'cascadeo', + link: 'http://www.cascadeo.com/', + blurb: 'Cascadeo designs, implements, and manages containerized workloads with Kubernetes, for both existing applications and greenfield development projects.' + }, + { + type: 1, + name: 'Elastisys AB', + logo: 'elastisys', + link: 'https://elastisys.com/services/#kubernetes', + blurb: 'We design, build, and operate Kubernetes clusters. We are experts in highly available and self-optimizing Kubernetes infrastructures' + }, + { + type: 1, + name: 'Greenfield Guild', + logo: 'greenfield', + link: 'http://greenfieldguild.com/', + blurb: 'The Greenfield Guild builds quality open source solutions on, and offers training and support for, Kubernetes in any environment.' + }, + { + type: 1, + name: 'PolarSeven', + logo: 'polarseven', + link: 'https://polarseven.com/what-we-do/kubernetes/', + blurb: 'To get started up and running with Kubernetes (K8s) our PolarSeven consultants can help you with creating a fully functional dockerized environment to run and deploy your applications.' + }, + { + type: 1, + name: 'Kloia', + logo: 'kloia', + link: 'https://kloia.com/kubernetes/', + blurb: 'Kloia is DevOps and Microservices Consultancy company that helps its customers to migrate their environment to cloud platforms for enabling more scalable and secure environments. We use Kubernetes to provide our customers all-in-one solutions in an cloud-agnostic way.' + }, + { + type: 0, + name: 'Bluefyre', + logo: 'bluefyre', + link: 'https://www.bluefyre.io', + blurb: 'Bluefyre offers a developer-first security platform that is native to Kubernetes. Bluefyre helps your development team ship secure code on Kubernetes faster!' + }, + { + type: 0, + name: 'Harness', + logo: 'harness', + link: 'https://harness.io/harness-continuous-delivery/secret-sauce/smart-automation/', + blurb: 'Harness offers Continuous Delivery As-A-Service will full support for containerized apps and Kubernetes clusters.' + }, + { + type: 0, + name: 'VMware - Wavefront', + logo: 'wavefront', + link: 'https://www.wavefront.com/solutions/container-monitoring/', + blurb: 'The Wavefront platform provides metrics-driven analytics and monitoring for Kubernetes and container dashboards for DevOps and developer teams delivering visibility into high-level services as well as granular container metrics.' + }, + { + type: 0, + name: 'Bloombase, Inc.', + logo: 'bloombase', + link: 'https://www.bloombase.com/go/kubernetes', + blurb: 'Bloombase provides high bandwidth, defense-in-depth data-at-rest encryption to lock down Kubernetes crown-jewels at scale.' + }, + { + type: 0, + name: 'Kasten', + logo: 'kasten', + link: 'https://kasten.io/product/', + blurb: 'Kasten provides enterprise solutions specifically built to address the operational complexity of data management in cloud-native environments.' + }, + { + type: 0, + name: 'Humio', + logo: 'humio', + link: 'https://humio.com', + blurb: 'Humio is a log aggregation database. We offer a Kubernetes integration that will give you insights to your logs across apps and instances.' + }, + { + type: 0, + name: 'Outcold Solutions LLC', + logo: 'outcold', + link: 'https://www.outcoldsolutions.com/#monitoring-kubernetes', + blurb: 'Powerful Certified Splunk applications for Monitoring OpenShift, Kubernetes and Docker.' + }, + { + type: 0, + name: 'SysEleven GmbH', + logo: 'syseleven', + link: 'http://www.syseleven.de/', + blurb: 'Enterprise Customers who are in need of bulletproof operations (High Performance E-Commerce and Enterprise Portals)' + }, + { + type: 0, + name: 'Landoop', + logo: 'landoop', + link: 'http://lenses.stream', + blurb: 'Lenses for Apache Kafka, to deploy, manage and operate with confidence data streaming pipelines and topologies at scale with confidence and native Kubernetes integration.' + }, + { + type: 0, + name: 'Redis Labs', + logo: 'redis', + link: 'https://redislabs.com/blog/getting-started-with-kubernetes-and-redis-using-redis-enterprise/', + blurb: 'Redis Enterprise extends open source Redis and delivers stable high performance and linear scaling required for building microservices on the Kubernetes platform.' + }, + { + type: 3, + name: 'Diamanti', + logo: 'diamanti', + link: 'https://diamanti.com/', + blurb: 'Diamanti - Diamanti-D10' + }, + { + type: 3, + name: 'Eking', + logo: 'eking', + link: 'http://www.eking-tech.com/', + blurb: 'Hainan eKing Technology Co. - eKing Cloud Container Platform' + }, + { + type: 3, + name: 'Harmony Cloud', + logo: 'harmony', + link: 'http://harmonycloud.cn/products/rongqiyun/', + blurb: 'Harmonycloud - Harmonycloud Container Platform' + }, + { + type: 3, + name: 'Woqutech', + logo: 'woqutech', + link: 'http://woqutech.com/product_qfusion.html', + blurb: 'Woqutech - QFusion' + }, + { + type: 3, + name: 'Baidu', + logo: 'baidu', + link: 'https://cloud.baidu.com/product/cce.html', + blurb: 'Baidu Cloud - Baidu Cloud Container Engine' + }, + { + type: 3, + name: 'ZTE', + logo: 'zte', + link: 'https://sdnfv.zte.com.cn/en/home', + blurb: 'ZTE - TECS OpenPalette' + }, + { + type: 1, + name: 'Automatic Server AG', + logo: 'asag', + link: 'http://www.automatic-server.com/paas.html', + blurb: 'We install and operate Kubernetes in big enterprises, create deployment workflows and help to migrate.' + }, + { + type: 1, + name: 'Circulo Siete', + logo: 'circulo', + link: 'https://circulosiete.com/consultoria/kubernetes/', + blurb: 'We are a Mexico based company offering training, consulting and support to migrate your workloads to Kubernetes, Cloud Native Microservices & Devops.' + }, + { + type: 1, + name: 'DevOpsGuru', + logo: 'devopsguru', + link: 'http://devopsguru.ca/workshop', + blurb: 'DevOpsGuru work with small business to transform from physical to virtual to containerization.' + }, + { + type: 1, + name: 'EIN Intelligence Co., Ltd', + logo: 'ein', + link: 'https://ein.io', + blurb: 'Startups and agile enterprises in South Korea.' + }, + { + type: 0, + name: 'GuardiCore', + logo: 'guardicore', + link: 'https://www.guardicore.com/', + blurb: 'GuardiCore provided process level visibility and network policy enforcement on containerized assets on the Kubernetes platform.' + }, + { + type: 0, + name: 'Hedvig', + logo: 'hedvig', + link: 'https://www.hedviginc.com/blog/provisioning-hedvig-storage-with-kubernetes', + blurb: 'Hedvig is software-defined storage that uses NFS or iSCSI for persistent volumes for provisioning shared storage for pods and containers.' + }, + { + type: 0, + name: 'Hewlett Packard Enterprise', + logo: 'hpe', + link: ' https://www.hpe.com/us/en/storage/containers.html', + blurb: 'Persistent Storage that makes data as easy to manage as containers: dynamic provisioning, policy-based performance & protection, QoS, & more.' + }, + { + type: 0, + name: 'JetBrains', + logo: 'jetbrains', + link: 'https://blog.jetbrains.com/teamcity/2017/10/teamcity-kubernetes-support-plugin/', + blurb: 'Run TeamCity cloud build agents in a Kubernetes cluster. Provides Helm support as a build step.' + }, + { + type: 2, + name: 'Opensense', + logo: 'opensense', + link: 'http://www.opensense.fr/en/kubernetes-en/', + blurb: 'We provide Kubernetes services (integration, operation, training) as well as development of banking microservices based on our extended experience with cloud of containers, microservices, data management and financial sector.' + }, + { + type: 2, + name: 'SAP SE', + logo: 'sap', + link: 'https://cloudplatform.sap.com', + blurb: 'The SAP Cloud Platform provides in-memory capabilities and unique business services for building and extending applications. With open sourced Project Gardener, SAP utilizes the power of Kubernetes to enable an open, robust, multi-cloud experience for our customers. You can use simple, modern cloud native design principles and leverage skills your organization already has to deliver agile and transformative applications, while integrating with the latest SAP Leonardo business features.' + }, + { + type: 1, + name: 'Mobilise Cloud Services Limited', + logo: 'mobilise', + link: 'https://www.mobilise.cloud/en/services/serverless-application-delivery/', + blurb: 'Mobilise helps organisations adopt Kubernetes and integrate with their CI/CD tooling.' + }, + { + type: 3, + name: 'AWS', + logo: 'aws', + link: 'https://aws.amazon.com/eks/', + blurb: 'Amazon Elastic Container Service for Kubernetes (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to install and operate your own Kubernetes clusters.' + }, + { + type: 3, + name: 'Kontena', + logo: 'kontena', + link: 'https://pharos.sh', + blurb: 'Kontena Pharos - The simple, solid, certified Kubernetes distribution that just works.' + }, + { + type: 2, + name: 'NTTData', + logo: 'nttdata', + link: 'http://de.nttdata.com/altemista-cloud', + blurb: 'NTT DATA, a member of the NTT Group, brings the power of the worlds leading infrastructure provider in the global K8s community.' + }, + { + type: 2, + name: 'OCTO', + logo: 'octo', + link: 'https://www.octo.academy/fr/formation/275-kubernetes-utiliser-architecturer-et-administrer-une-plateforme-de-conteneurs', + blurb: 'OCTO technology provides training, architecture, technical consulting and delivery services including containers and Kubernetes.' + }, + { + type: 0, + name: 'Logdna', + logo: 'logdna', + link: 'https://logdna.com/kubernetes', + blurb: 'Pinpoint production issues instantly with LogDNA, the best logging platform you will ever use. Get started with only 2 kubectl commands.' + } + ] + + var kcspContainer = document.getElementById('kcspContainer') + var distContainer = document.getElementById('distContainer') + var ktpContainer = document.getElementById('ktpContainer') + var isvContainer = document.getElementById('isvContainer') + var servContainer = document.getElementById('servContainer') + + var sorted = partners.sort(function (a, b) { + if (a.name > b.name) return 1 + if (a.name < b.name) return -1 + return 0 + }) + + sorted.forEach(function (obj) { + var box = document.createElement('div') + box.className = 'partner-box' + + var img = document.createElement('img') + img.src = '/images/square-logos/' + obj.logo + '.png' + + var div = document.createElement('div') + + var p = document.createElement('p') + p.textContent = obj.blurb + + var link = document.createElement('a') + link.href = obj.link + link.target = '_blank' + link.textContent = 'Learn more' + + div.appendChild(p) + div.appendChild(link) + + box.appendChild(img) + box.appendChild(div) + + var container; + if (obj.type === 0) { + container = isvContainer; + } else if (obj.type === 1) { + container = servContainer; + } else if (obj.type === 2) { + container = kcspContainer; + } else if (obj.type === 3) { + container = distContainer; + } else if (obj.type === 4) { + container = ktpContainer; + } + + container.appendChild(box) + }) +})(); diff --git a/content/ja/includes/partner-style.css b/content/ja/includes/partner-style.css new file mode 100644 index 0000000000000..7aeb255dd5abc --- /dev/null +++ b/content/ja/includes/partner-style.css @@ -0,0 +1,202 @@ +/* SECTIONS */ +.section { + clear: both; + padding: 0px; + margin-bottom: 2em; +} + +.kcsp_section { + clear: both; + padding: 0px; + margin-bottom: 2em; +} + +/* COLUMN SETUP */ +.col { + display: block; + float:left; + margin: 1% 0 1% 1.6%; + background-color: #f9f9f9; +} +.col:first-child { margin-left: 0; } + + +/* GROUPING */ +.group:before, +.group:after { + content:""; + display:table; +} +.group:after { + clear:both; +} +.group { + zoom:1; /* For IE 6/7 */ +} + +/* GRID OF THREE */ +.span_3_of_3 { + width: 35%; + background-color: #f9f9f9; + padding: 20px; +} +.span_2_of_3 { + width: 35%; + background-color: #f9f9f9; + padding: 20px; +} +.span_1_of_3 { + width: 35%; + background-color: #f9f9f9; + padding: 20px; +} + +.col-container { + display: table; /* Make the container element behave like a table */ + width: 100%; /* Set full-width to expand the whole page */ + padding-bottom: 30px; +} + +.col-nav { + display: table-cell; /* Make elements inside the container behave like table cells */ + width: 18%; + background-color: #f9f9f9; + padding: 20px; + border: 5px solid white; +} + +/* GO FULL WIDTH AT LESS THAN 480 PIXELS */ + +@media only screen and (max-width: 480px) { + .col { margin: 1% 0 1% 0%;} + .span_3_of_3, .span_2_of_3, .span_1_of_3 { width: 100%; } +} + +@media only screen and (max-width: 650px) { + .col-nav { + display: block; + width: 100%; + } +} + +.button{ + max-width: 100%; + box-sizing: border-box; + font-family: "Roboto", sans-serif; + margin: 0; + display: inline-block; + border-radius: 6px; + padding: 0 20px; + line-height: 40px; + color: #ffffff; + font-size: 16px; + background-color: #3371e3; + text-decoration: none; + } + +h5 { + font-size: 16px; + line-height: 1.5em; + margin-bottom: 2em; +} + +#usersGrid a { + display: inline-block; + background-color: #f9f9f9; +} + +#ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { + position: relative; + width: 100%; + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +#isvContainer { + margin-bottom: 80px; +} + +#kcspContainer { + margin-bottom: 80px; +} + +#distContainer { + margin-bottom: 80px; +} + +#ktpContainer { + margin-bottom: 80px; +} + +.partner-box { + position: relative; + width: 47%; + max-width: 48%; + min-width: 48%; + margin-bottom: 20px; + padding: 20px; + flex: 1; + display: flex; + justify-content: left; + align-items: flex-start; +} + +.partner-box img { + background-color: #f9f9f9; +} + +.partner-box > div { + margin-left: 30px; +} + +.partner-box a { + color: #3576E3; +} + +@media screen and (max-width: 1024px) { + .partner-box { + flex-direction: column; + justify-content: flex-start; + } + + .partner-box > div { + margin: 20px 0 0; + } +} + +@media screen and (max-width: 568px) { + #ktpContainer, #distContainter, #kcspContainer, #isvContainer, #servContainer { + justify-content: center; + } + + .partner-box { + flex-direction: column; + justify-content: flex-start; + width: 100%; + max-width: 100%; + min-width: 100%; + } + + .partner-box > div { + margin: 20px 0 0; + } +} + +@media screen and (max-width: 568px) { + #ktpContainer, #distContainer, #kcspContainer, #isvContainer, #servContainer { + justify-content: center; + } + + .partner-box { + flex-direction: column; + justify-content: flex-start; + width: 100%; + max-width: 100%; + min-width: 100%; + } + + .partner-box > div { + margin: 20px 0 0; + } +} diff --git a/content/ja/includes/task-tutorial-prereqs.md b/content/ja/includes/task-tutorial-prereqs.md new file mode 100644 index 0000000000000..043e14681af90 --- /dev/null +++ b/content/ja/includes/task-tutorial-prereqs.md @@ -0,0 +1,6 @@ +Kubernetesクラスターが必要、かつそのクラスターと通信するためにkubectlコマンドラインツールが設定されている必要があります。 +まだクラスターがない場合、[Minikube](/ja/docs/setup/minikube)を使って作成するか、 +以下のいずれかのKubernetesプレイグラウンドも使用できます: + +* [Katacoda](https://www.katacoda.com/courses/kubernetes/playground) +* [Play with Kubernetes](http://labs.play-with-k8s.com/) diff --git a/content/ja/includes/user-guide-content-moved.md b/content/ja/includes/user-guide-content-moved.md new file mode 100644 index 0000000000000..8b93e29f125f7 --- /dev/null +++ b/content/ja/includes/user-guide-content-moved.md @@ -0,0 +1,3 @@ +The topics in the [User Guide](/docs/user-guide/) section of the Kubernetes docs +are being moved to the [Tasks](/docs/tasks/), [Tutorials](/docs/tutorials/), and +[Concepts](/docs/concepts) sections. The content in this topic has moved to: diff --git a/content/ja/includes/user-guide-migration-notice.md b/content/ja/includes/user-guide-migration-notice.md new file mode 100644 index 0000000000000..366a05907cda5 --- /dev/null +++ b/content/ja/includes/user-guide-migration-notice.md @@ -0,0 +1,12 @@ + + + + + + +
+

NOTICE

+

As of March 14, 2017, the Kubernetes SIG-Docs-Maintainers group have begun migration of the User Guide content as announced previously to the SIG Docs community through the kubernetes-sig-docs group and kubernetes.slack.com #sig-docs channel.

+

The user guides within this section are being refactored into topics within Tutorials, Tasks, and Concepts. Anything that has been moved will have a notice placed in its previous location as well as a link to its new location. The reorganization implements a new table of contents and should improve the documentation's findability and readability for a wider range of audiences.

+

For any questions, please contact: kubernetes-sig-docs@googlegroups.com

+