| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
10,585 バイト除去 、 2021年5月20日 (木) 13:59
| [[Docker]] | [[Docker コマンド]] | [[Docker ネットワーク]] | [[WSL]] | [[KubernetesMicroK8s]] | [[Multipass]] |
==[https://kubernetes.io/ja/ Kubernetes]==
{{amazon|4873118409}}
{{amazon|B07HFS7TDT}}
 
*https://kubernetes.io/ja/
*コンテナ化されたアプリケーションのデプロイ、スケーリングなどの管理を自動化するプラットフォーム(コンテナオーケストレーションエンジン)
**Microsoft:Azure Container Ser[[vi]]ce
**Google:Google [[Kubernetes]] Engine
===[https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/ チートシート]===
*[https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/ チートシート]
===コンポーネント構成===
*https://kubernetes.io/docs/concepts/overview/components/
*https://www.slideshare.net/yokawasa/istio-114360124 から引用
[[File:kubernetes_component.png|600px]]
===宣言的なコードによる管理===
*kubectlは、マニフェストファイルの情報を元にKubernetes MasterのAPIにリクエストを送り、Kubernetesの操作を行う
*Kubernetes の API は一般的な RESTful API として実装されている
 
==構成==
===クラスタ===
*Kubernetesクラスターは以下の2種類のリソースで構成
**マスターがクラスターを管理する、マスターはクラスターの管理を担当
**ノードがアプリケーションを動かすワーカーとなる、ノードは、Kubernetesクラスターのワーカーマシンとして機能するVMまたは物理マシン
====Kubelet====
*各ノードにはKubeletがあり、これはノードを管理し、Kubernetesマスターと通信するためのエージェント
 
====デプロイ====
Kubernetesにアプリケーションをデプロイするときは、
#マスターにアプリケーションコンテナを起動するように指示
#マスターはコンテナがクラスターのノードで実行されるようにスケジュール
#ノードは、マスターが公開しているKubernetes APIを使用してマスターと通信
##エンドユーザーは、Kubernetes APIを直接使用して対話することもできます
 
 
 
 
====Kubernetes とリソース====
*Kubernetesでは、リソースを登録することで、コンテナの実行やロードバランサの作成が非同期に行われる
 
==Workloadsリソース==
*クラスタ上にコンテナを起動するために利用する
*PodDisruptionBudget
*CustomResourceDefinition
==minikube==*https://github.com/kubernetes/minikube*ローカル開発や学習、テスト用のシンプルな[[Kubernetes]]シュミレータ*シングルノードクラスタで、インストールには、ローカルマシンにハイパーバイザーがインストールされていること*VT-x/AMD-v [[仮想化Minikube]]がBIOSで有効化されていること。*[https://kubernetes.io/ja/docs/setup/learning-environment/minikube/ Minikubeを使用してローカル環境でKubernetesを動かす]===インストール===*https://kubernetes.io/docs/tasks/tools/install-minikube/ ====Ubuntu + 仮想環境====*[https://www.typea.info/blog/index.php/2020/08/22/ubuntu-kvm-bridge-network/ Ubuntu 仮想環境(KVM)構築] ====入手====<pre>$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64$ sudo +x minkube</pre> ====インストール====<pre>$ sudo install minikube /usr/local/bin</pre> ===利用=======ローカルクラスタの作成====*ローカル仮想マシンを作成*[[Kubernetes]]を設定*kubectlを設定 &gt; minikube start*VirtualBox[[File:0753_minikube.png|400px]]*Ubuntu+KVM[[File:Minikube_kvm.png|400pxMinikube]] ====クラスタの確認====<pre>$ kubectl config get-contexts
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* minikube minikube minikube</pre> ====停止==== &gt; minikube stop ====クラスタを削除==== &gt; minikube delete===ダッシュボード===<pre>$ minikube dashboard</pre>[[File:Minikube_dashboard.png | 400px]]===コマンド=== {| class="wikitable"|-! scope="col"| コマンド! scope="col"| 内容|-| ssh| minikube の環境にログインします(デバッグ用)|} ===Kubernetes Deploymentを作る===*単純なHTTPサーバーであるechoserverという既存のイメージを使用して、Kubernetes Deploymentを作る*--portを使用して8080番ポートで公開<pre>$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10deployment.apps/hello-minikube created</pre>[[File:K8s_deploy.png | 400px]] ===Deploymentに接続するために、Serviceとして公開===<pre>$ kubectl expose deployment hello-minikube --type=NodePort --port=8080service/hello-minikube exposed</pre>[[File:K8s_service.png | 400px]]===Podが起動しているか確認===<pre>$ kubectl get podNAME READY STATUS RESTARTS AGEhello-minikube-64b64df8c9-jzm5v 1/1 Running 0 11m</pre>===公開サービスのURLを確認===<pre>$ minikube service hello-minikube --urlhttp://192.168.39.214:31429</pre>[[File:K8s_service_run.png | 400px]] ===クラスタのステータス===*Serverとクライアントのバージョン<pre>$ kubectl versionClient Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.8", GitCommit:"9f2892aab98fe339f3bd70e3c470144299398ace", GitTreeState:"clean", BuildDate:"2020-08-13T16:12:48Z", GoVersion:"go1.13.15", Compiler:"gc", Platform:"linux/amd64"}Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.3", GitCommit:"2e7996e3e2712684bc73f0dec0200d64eec7fe40", GitTreeState:"clean", BuildDate:"2020-05-20T12:43:34Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}</pre>*クラスタを構成しているコンポーネントを確認<pre>$ kubectl get componentstatusNAME STATUS MESSAGE ERRORcontroller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health":"true"} </pre>====ワーカーノードの表示====*クラスタ上の全のノードを表示<pre>$ kubectl get nodesNAME STATUS ROLES AGE VERSIONminikube Ready master 3h13m v1.18.3</pre>
====ノードの詳細情報====*kubectl describe nodes [ノード名] =====基本情報が最初に表示される===== Name: minikube [[RMicroK8s]]oles: master Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 kubernetes.io/hostname=minikube kubernetes.io/os=linux node-role.kubernetes.io/master= Annotations: kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock node.alpha.kubernetes.io/ttl: 0 volumes.kubernetes.io/controller-managed-attach-detach: true CreationTimestamp: Mon, 05 Aug 2019 23:17:24 +0900 Taints: &lt;none&gt; Unschedulable: false=====ノード上で動いているオペレーションの情報が表示される=====*それぞれのノードが十分なディスクとメモリを持っているか*Kubernatesマスターに対して正常であるか Conditions: Type Status LastHeartbeatTime LastTransitionTime [[R]]eason Message ---- ------ ----------------- ------------------ ------ ------- MemoryPressure False Tue, 13 Aug 2019 01:01:05 +0900 Mon, 05 Aug 2019 23:17:15 +0900 KubeletHasSufficientMemory kubelet has sufficient memory available DiskPressure False Tue, 13 Aug 2019 01:01:05 +0900 Mon, 05 Aug 2019 23:17:15 +0900 KubeletHasNoDiskPressure kubelet has no disk pressure PIDPressure False Tue, 13 Aug 2019 01:01:05 +0900 Mon, 05 Aug 2019 23:17:15 +0900 KubeletHasSufficientPID kubelet has sufficient PID available [[R]]eady True Tue, 13 Aug 2019 01:01:05 +0900 Mon, 05 Aug 2019 23:17:15 +0900 Kubelet[[R]]eady kubelet is posting ready status Addresses: InternalIP: 10.0.2.15 Hostname: minikube=====マシンのキャパシティ情報の表示===== Capacity: cpu: 2 ephemeral-storage: 17784772Ki hugepages-2Mi: 0 memory: 2038624Ki pods: 110 Allocatable: cpu: 2 ephemeral-storage: 16390445849 hugepages-2Mi: 0 memory: 1936224Ki pods: 110=====ノード上のソフトウェアバージョンの表示===== System Info: [[Mac]]hine ID: 7ec5a55cfdc14693866eccf4e9a1228f System UUID: 2C88347D-32CC-4F26-9AEE-1FED259A233C Boot ID: 1da81daa-4519-4f04-afe0-64efecedd7e7 Kernel Version: 4.15.0 OS Image: Buildroot 2018.05.3 Operating System: linux Architecture: amd64 Container [[RMicroK8s]]untime Version: docker://18.9.6 Kubelet Version: v1.15.0 Kube-Proxy Version: v1.15.0=====ノード上で動いているPod情報の表示===== Non-terminated Pods: (9 in total) Namespace Name CPU [[R]]equests CPU Limits Memory [[R]]equests Memory Limits AGE --------- ---- ------------ ---------- --------------- ------------- --- kube-system coredns-5c98db65d4-j24hp 100m (5%) 0 (0%) 70Mi (3%) 170Mi (8%) 7d1h kube-system coredns-5c98db65d4-phtm8 100m (5%) 0 (0%) 70Mi (3%) 170Mi (8%) 7d1h kube-system etcd-minikube 0 (0%) 0 (0%) 0 (0%) 0 (0%) 7d1h kube-system kube-addon-manager-minikube 5m (0%) 0 (0%) 50Mi (2%) 0 (0%) 7d1h kube-system kube-apiserver-minikube 250m (12%) 0 (0%) 0 (0%) 0 (0%) 7d1h kube-system kube-controller-manager-minikube 200m (10%) 0 (0%) 0 (0%) 0 (0%) 7d1h kube-system kube-proxy-wrgp5 0 (0%) 0 (0%) 0 (0%) 0 (0%) 7d1h kube-system kube-scheduler-minikube 100m (5%) 0 (0%) 0 (0%) 0 (0%) 7d1h kube-system storage-pro[[vi]]sioner 0 (0%) 0 (0%) 0 (0%) 0 (0%) 7d1h Allocated resources: (Total limits may be over 100 percent, i.e., overcommitted.) [[R]]esource [[R]]equests Limits -------- -------- ------ cpu 755m (37%) 0 (0%) memory 190Mi (10%) 340Mi (17%) ephemeral-storage 0 (0%) 0 (0%) Events: Type [[R]]eason Age From Message ---- ------ ---- ---- ------- Normal NodeHasSufficientMemory 7d1h (x8 over 7d1h) kubelet, minikube Node minikube status is now: NodeHasSufficientMemory Normal NodeHasNoDiskPressure 7d1h (x8 over 7d1h) kubelet, minikube Node minikube status is now: NodeHasNoDiskPressure Normal NodeHasSufficientPID 7d1h (x7 over 7d1h) kubelet, minikube Node minikube status is now: NodeHasSufficientPID Normal Starting 7d1h kube-proxy, minikube Starting kube-proxy. Normal Starting 12m kubelet, minikube Starting kubelet. Normal NodeHasSufficientMemory 12m (x8 over 12m) kubelet, minikube Node minikube status is now: NodeHasSufficientMemory Normal NodeHasNoDiskPressure 12m (x8 over 12m) kubelet, minikube Node minikube status is now: NodeHasNoDiskPressure Normal NodeHasSufficientPID 12m (x7 over 12m) kubelet, minikube Node minikube status is now: NodeHasSufficientPID Normal NodeAllocatableEnforced 12m kubelet, minikube Updated Node Allocatable limit across pods Normal Starting 11m kube-proxy, minikube Starting kube-proxy ===クラスタのコンポーネント===*[[Kubernetes]]クラスタを構成する多くのコンポーネントが、[[Kubernetes]]自体を使ってデプロイされる*kube-system Namesspace内で動作====[[KubernetesKubectl]] proxy====*クラスタ内のロードバランスされたSer[[vi]]ceにネットワークトラフィックをルーティング*クラスタ内の各ノードで動いている必要がある*DaemonSetというAPIオブジェクトが多くのクラスタではノードでプロキシを動作させるために利用される ===Namespace===*クラスタ内のオブジェクトを構造化*kubectlはデフォルトではdefaultというNamespaceとやり取り*--namespace で指定できる===Context===*デフォルトのNamespaceを恒久的に変更したい場合*$HOME/.kube/config に保存される===[[Kubernetes]] APIオブジェクトの参照===*[[Kubernetes]]上にあるものは、すべてRESTFulリソースであらわされる*[https://kubernetes.io/ja/docs/concepts/overview/kubernetes-api/ Kubernetes API]*[https://kubernetes.io/docs/reference/ Kubernetes API Reference] ==Kubectl==[https://kubernetes.io/ja/docs/reference/kubectl/cheatsheet/ チートシート]*公式なクライアントは、kubectl*kubectlを使用してクラスターと対話できるようになります*[[Kubernetes]] APIと連携するコマンドラインツール*minikube から利用する場合 &gt; minikube kubectl version===kubectlコマンド===*Kubernetesでは、クラスタの操作は全て、Kubernetes Masterの APIを介して行われる*手動で操作する場合には、CLIツールの kubectl を利用するのが一般的 *Kubectl が Kubernetes Master と通信するには、接続先サーバー情報や認証情報が必要となる*デフォルトでは、~/.kube/config に書かれている情報を使用して接続を行う {| class="wikitable"|-! scope="col"| コマンド! scope="col"| 内容|-! scope="row"|kubectl version| クライアントkubectlおよびAPIサーバーのバージョンを表示|-! scope="row"|kubectl get nodes| ワーカーノード情報を表示|-! scope="row"|kubectl describe nodes [ノード名]| ノードの詳細情報|-! scope="row"|kubectl | |-! scope="row"|kubectl | |-! scope="row"|kubectl | |-! scope="row"|kubectl | |-! scope="row"|kubectl | |-! scope="row"|kubectl | |-! scope="row"|kubectl | |-! scope="row"|kubectl | |-|}
===kubectlインストール=[https://kubernetes.io/ja/docs/concepts/overview/working-with-objects/namespaces/ Namespace]==*Kubernetesは、同一の物理クラスター上で複数の仮想クラスターの動作をサポートします。 この仮想クラスターをNamespaceと呼びます*作成:kubectl create namespace <名称>*削除:kubectl delete namespace <名称>
<pre>
$ curl kubectl create namespace samplenamespace/sample created$ kubectl get namespacesNAME STATUS AGEkube-LO https://storage.googleapis.com/kubernetessystem Active 66dkube-release/release/$(curl public Active 66dkube-s https://storage.googleapis.com/kubernetesnode-release/release/stable.txt)/bin/linux/amd64/kubectllease Active 66d$ sudo chmod +x ./kubectldefault Active 66d$ sudo install kubectl /usr/local/binsample Active 4s
</pre>
クラスタ "minikube" の全てのトレースを削除しました。
</pre>
===NodeでHello World===
*https://kubernetes.io/ja/docs/tutorials/hello-minikube/

案内メニュー