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

MyMemoWiki

「Kubernetes」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
1行目: 1行目:
==Kubernetes==
+
==[[Kubernetes]]==
 
[[Docker]] |  
 
[[Docker]] |  
  
7行目: 7行目:
 
*信頼性が高くスケーラブルな分散システムを上手に構築してデプロイするために必要なソフトウェアを提供
 
*信頼性が高くスケーラブルな分散システムを上手に構築してデプロイするために必要なソフトウェアを提供
 
*分散システムとは、異なるマシンで動作するAPIを実装する部品の集まり
 
*分散システムとは、異なるマシンで動作するAPIを実装する部品の集まり
*マネージドKubernetesサービス(KaaS:Kubernates-as-a-Service)
+
*マネージド[[Kubernetes]]サービス(KaaS:Kubernates-as-a-Service)
**Microsoft:Azure Container Service
+
**Microsoft:Azure Container Ser[[vi]]ce
**Google:Google Kubernetes Engine
+
**Google:Google [[Kubernetes]] Engine
 
==minikube==
 
==minikube==
 
*https://github.com/kubernetes/minikube
 
*https://github.com/kubernetes/minikube
*ローカル開発や学習、テスト用のシンプルなKubernetesシュミレータ
+
*ローカル開発や学習、テスト用のシンプルな[[Kubernetes]]シュミレータ
 
*シングルノードクラスタで、インストールには、ローカルマシンにハイパーバイザーがインストールされていること
 
*シングルノードクラスタで、インストールには、ローカルマシンにハイパーバイザーがインストールされていること
*VT-x/AMD-v 仮想化がBIOSで有効化されていること。
+
*VT-x/AMD-v [[仮想化]]がBIOSで有効化されていること。
 
===インストール===
 
===インストール===
 
*https://kubernetes.io/docs/tasks/tools/install-minikube/
 
*https://kubernetes.io/docs/tasks/tools/install-minikube/
 
====ローカルクラスタの作成====
 
====ローカルクラスタの作成====
 
*ローカル仮想マシンを作成
 
*ローカル仮想マシンを作成
*Kubernetesを設定
+
*[[Kubernetes]]を設定
 
*kubectlを設定
 
*kubectlを設定
 
  > minikube start
 
  > minikube start
30行目: 30行目:
  
  
==Kubernetesクライアント==
+
==[[Kubernetes]]クライアント==
 
*公式なクライアントは、kubectl
 
*公式なクライアントは、kubectl
*Kubernetes APIと連携するコマンドラインツール
+
*[[Kubernetes]] APIと連携するコマンドラインツール
 
*minikube から利用する場合
 
*minikube から利用する場合
 
  > minikube kubectl version
 
  > minikube kubectl version
38行目: 38行目:
 
===クラスタのステータス===
 
===クラスタのステータス===
 
  >minikube kubectl version
 
  >minikube kubectl version
  Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}
+
  Client Version: version.Info{Major:"1", Minor:"15", [[Git]]Version:"v1.15.0", [[Git]]Commit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", [[Git]]TreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}
  Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:32:14Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
+
  Server Version: version.Info{Major:"1", Minor:"15", [[Git]]Version:"v1.15.0", [[Git]]Commit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", [[Git]]TreeState:"clean", BuildDate:"2019-06-19T16:32:14Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
  
 
*クラスタを構成しているコンポーネントを確認
 
*クラスタを構成しているコンポーネントを確認
 
  > minikube kubectl get componentstatuses 
 
  > minikube kubectl get componentstatuses 
  NAME                STATUS    MESSAGE            ERROR
+
  NAME                STATUS    MESSAGE            E[[R]][[R]]O[[R]]
 
  controller-manager  Healthy  ok
 
  controller-manager  Healthy  ok
 
  scheduler            Healthy  ok
 
  scheduler            Healthy  ok
51行目: 51行目:
 
*kubectl get nodes
 
*kubectl get nodes
 
  > minikube kubectl get nodes
 
  > minikube kubectl get nodes
  NAME      STATUS  ROLES   AGE  VERSION
+
  NAME      STATUS  [[R]]OLES   AGE  VE[[R]]SION
  minikube  Ready   master  36m  v1.15.0
+
  minikube  [[R]]eady   master  36m  v1.15.0
  
 
====ノードの詳細情報====
 
====ノードの詳細情報====
59行目: 59行目:
 
=====基本情報が最初に表示される=====
 
=====基本情報が最初に表示される=====
 
  Name:              minikube
 
  Name:              minikube
  Roles:              master
+
  [[R]]oles:              master
 
  Labels:            beta.kubernetes.io/arch=amd64
 
  Labels:            beta.kubernetes.io/arch=amd64
 
                     beta.kubernetes.io/os=linux
 
                     beta.kubernetes.io/os=linux
76行目: 76行目:
 
*Kubernatesマスターに対して正常であるか
 
*Kubernatesマスターに対して正常であるか
 
  Conditions:
 
  Conditions:
   Type            Status  LastHeartbeatTime                LastTransitionTime                Reason                       Message
+
   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
 
   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
 
   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
 
   PIDPressure      False  Tue, 13 Aug 2019 01:01:05 +0900  Mon, 05 Aug 2019 23:17:15 +0900  KubeletHasSufficientPID      kubelet has sufficient PID available
   Ready           True    Tue, 13 Aug 2019 01:01:05 +0900  Mon, 05 Aug 2019 23:17:15 +0900  KubeletReady                 kubelet is posting ready status
+
   [[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:
 
  Addresses:
 
   InternalIP:  10.0.2.15
 
   InternalIP:  10.0.2.15
100行目: 100行目:
 
=====ノード上のソフトウェアバージョンの表示=====
 
=====ノード上のソフトウェアバージョンの表示=====
 
  System Info:
 
  System Info:
   Machine ID:                7ec5a55cfdc14693866eccf4e9a1228f
+
   [[Mac]]hine ID:                7ec5a55cfdc14693866eccf4e9a1228f
 
   System UUID:                2C88347D-32CC-4F26-9AEE-1FED259A233C
 
   System UUID:                2C88347D-32CC-4F26-9AEE-1FED259A233C
 
   Boot ID:                    1da81daa-4519-4f04-afe0-64efecedd7e7
 
   Boot ID:                    1da81daa-4519-4f04-afe0-64efecedd7e7
107行目: 107行目:
 
   Operating System:          linux
 
   Operating System:          linux
 
   Architecture:              amd64
 
   Architecture:              amd64
   Container Runtime Version:  docker://18.9.6
+
   Container [[R]]untime Version:  docker://18.9.6
 
   Kubelet Version:            v1.15.0
 
   Kubelet Version:            v1.15.0
 
   Kube-Proxy Version:        v1.15.0
 
   Kube-Proxy Version:        v1.15.0
 
=====ノード上で動いているPod情報の表示=====
 
=====ノード上で動いているPod情報の表示=====
 
  Non-terminated Pods:        (9 in total)
 
  Non-terminated Pods:        (9 in total)
   Namespace                  Name                                CPU Requests CPU Limits  Memory Requests Memory Limits  AGE
+
   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-j24hp            100m (5%)    0 (0%)      70Mi (3%)        170Mi (8%)    7d1h
122行目: 122行目:
 
   kube-system                kube-proxy-wrgp5                    0 (0%)        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                kube-scheduler-minikube            100m (5%)    0 (0%)      0 (0%)          0 (0%)        7d1h
   kube-system                storage-provisioner                 0 (0%)        0 (0%)      0 (0%)          0 (0%)        7d1h
+
   kube-system                storage-pro[[vi]]sioner                 0 (0%)        0 (0%)      0 (0%)          0 (0%)        7d1h
 
  Allocated resources:
 
  Allocated resources:
 
   (Total limits may be over 100 percent, i.e., overcommitted.)
 
   (Total limits may be over 100 percent, i.e., overcommitted.)
   Resource           Requests     Limits
+
   [[R]]esource           [[R]]equests     Limits
 
   --------          --------    ------
 
   --------          --------    ------
 
   cpu                755m (37%)  0 (0%)
 
   cpu                755m (37%)  0 (0%)
131行目: 131行目:
 
   ephemeral-storage  0 (0%)      0 (0%)
 
   ephemeral-storage  0 (0%)      0 (0%)
 
  Events:
 
  Events:
   Type    Reason                   Age                  From                  Message
+
   Type    [[R]]eason                   Age                  From                  Message
 
   ----    ------                  ----                ----                  -------
 
   ----    ------                  ----                ----                  -------
 
   Normal  NodeHasSufficientMemory  7d1h (x8 over 7d1h)  kubelet, minikube    Node minikube status is now: NodeHasSufficientMemory
 
   Normal  NodeHasSufficientMemory  7d1h (x8 over 7d1h)  kubelet, minikube    Node minikube status is now: NodeHasSufficientMemory
144行目: 144行目:
 
   Normal  Starting                11m                  kube-proxy, minikube  Starting kube-proxy
 
   Normal  Starting                11m                  kube-proxy, minikube  Starting kube-proxy
 
===クラスタのコンポーネント===
 
===クラスタのコンポーネント===
*Kubernetesクラスタを構成する多くのコンポーネントが、Kubernetes自体を使ってデプロイされる
+
*[[Kubernetes]]クラスタを構成する多くのコンポーネントが、[[Kubernetes]]自体を使ってデプロイされる
 
*kube-system Namesspace内で動作
 
*kube-system Namesspace内で動作
====Kubernetes proxy====
+
====[[Kubernetes]] proxy====
*クラスタ内のロードバランスされたServiceにネットワークトラフィックをルーティング
+
*クラスタ内のロードバランスされたSer[[vi]]ceにネットワークトラフィックをルーティング
 
*クラスタ内の各ノードで動いている必要がある
 
*クラスタ内の各ノードで動いている必要がある
 
*DaemonSetというAPIオブジェクトが多くのクラスタではノードでプロキシを動作させるために利用される
 
*DaemonSetというAPIオブジェクトが多くのクラスタではノードでプロキシを動作させるために利用される
159行目: 159行目:
 
*デフォルトのNamespaceを恒久的に変更したい場合
 
*デフォルトのNamespaceを恒久的に変更したい場合
 
*$HOME/.kube/config に保存される
 
*$HOME/.kube/config に保存される
===Kubernetes APIオブジェクトの参照===
+
===[[Kubernetes]] APIオブジェクトの参照===
*Kubernetes上にあるものは、すべてRESTFulリソースであらわされる
+
*[[Kubernetes]]上にあるものは、すべてRESTFulリソースであらわされる

2020年2月16日 (日) 04:28時点における版

Kubernetes

Docker |

  • https://knowledge.sakura.ad.jp/20955/
  • 信頼性が高くスケーラブルな分散システムを上手に構築してデプロイするために必要なソフトウェアを提供
  • 分散システムとは、異なるマシンで動作するAPIを実装する部品の集まり
  • マネージドKubernetesサービス(KaaS:Kubernates-as-a-Service)

minikube

  • https://github.com/kubernetes/minikube
  • ローカル開発や学習、テスト用のシンプルなKubernetesシュミレータ
  • シングルノードクラスタで、インストールには、ローカルマシンにハイパーバイザーがインストールされていること
  • VT-x/AMD-v 仮想化がBIOSで有効化されていること。

インストール

ローカルクラスタの作成

  • ローカル仮想マシンを作成
  • Kubernetesを設定
  • kubectlを設定
> minikube start

0753 minikube.png

停止

> minikube stop

クラスタを削除

> minikube delete


Kubernetesクライアント

  • 公式なクライアントは、kubectl
  • Kubernetes APIと連携するコマンドラインツール
  • minikube から利用する場合
> minikube kubectl version

クラスタのステータス

>minikube kubectl version
Client Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:40:16Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"windows/amd64"}
Server Version: version.Info{Major:"1", Minor:"15", GitVersion:"v1.15.0", GitCommit:"e8462b5b5dc2584fdcd18e6bcfe9f1e4d970a529", GitTreeState:"clean", BuildDate:"2019-06-19T16:32:14Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}
  • クラスタを構成しているコンポーネントを確認
> minikube kubectl get componentstatuses 
NAME                 STATUS    MESSAGE             ERROR
controller-manager   Healthy   ok
scheduler            Healthy   ok
etcd-0               Healthy   {"health":"true"}

ワーカーノードの表示

  • kubectl get nodes
> minikube kubectl get nodes
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   36m   v1.15.0

ノードの詳細情報

  • kubectl describe nodes [ノード名]
基本情報が最初に表示される
Name:               minikube
Roles:              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:             <none>
Unschedulable:      false
ノード上で動いているオペレーションの情報が表示される
  • それぞれのノードが十分なディスクとメモリを持っているか
  • Kubernatesマスターに対して正常であるか
Conditions:
  Type             Status  LastHeartbeatTime                 LastTransitionTime                Reason                       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
  Ready            True    Tue, 13 Aug 2019 01:01:05 +0900   Mon, 05 Aug 2019 23:17:15 +0900   KubeletReady                 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:
 Machine 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 Runtime 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 Requests  CPU Limits  Memory Requests  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-provisioner                 0 (0%)        0 (0%)      0 (0%)           0 (0%)         7d1h
Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests     Limits
  --------           --------     ------
  cpu                755m (37%)   0 (0%)
  memory             190Mi (10%)  340Mi (17%)
  ephemeral-storage  0 (0%)       0 (0%)
Events:
  Type    Reason                   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内で動作

Kubernetes proxy

  • クラスタ内のロードバランスされたServiceにネットワークトラフィックをルーティング
  • クラスタ内の各ノードで動いている必要がある
  • DaemonSetというAPIオブジェクトが多くのクラスタではノードでプロキシを動作させるために利用される

kubectlコマンド

Namespace

  • クラスタ内のオブジェクトを構造化
  • kubectlはデフォルトではdefaultというNamespaceとやり取り
  • --namespace で指定できる

Context

  • デフォルトのNamespaceを恒久的に変更したい場合
  • $HOME/.kube/config に保存される

Kubernetes APIオブジェクトの参照

  • Kubernetes上にあるものは、すべてRESTFulリソースであらわされる