!!!Kubernetes [Docker] {{amazon 4873118409}} *https://knowledge.sakura.ad.jp/20955/ *信頼性が高くスケーラブルな分散システムを上手に構築してデプロイするために必要なソフトウェアを提供 *分散システムとは、異なるマシンで動作するAPIを実装する部品の集まり *マネージドKubernetesサービス(KaaS:Kubernates-as-a-Service) **Microsoft:Azure Container Service **Google:Google Kubernetes Engine !!!minikube *https://github.com/kubernetes/minikube *ローカル開発や学習、テスト用のシンプルなKubernetesシュミレータ *シングルノードクラスタで、インストールには、ローカルマシンにハイパーバイザーがインストールされていること *VT-x/AMD-v 仮想化がBIOSで有効化されていること。 !!インストール *https://kubernetes.io/docs/tasks/tools/install-minikube/ !ローカルクラスタの作成 *ローカル仮想マシンを作成 *Kubernetesを設定 *kubectlを設定 > minikube start {{ref_image 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: 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リソースであらわされる