オーケストレーションツールKubernetesの簡易版? Minikube でならWindows 10 Home でもお手軽にKubernetesを試せるらしい。そして、コンテナRuntimeとは?

Kubernetesって?

Kubernetes(クーベネティス/クーベルネイテス、よくK8sと略記される)は、コンテナ化したアプリケーションのデプロイ、スケーリング、および管理を行うための、オープンソースのコンテナオーケストレーションシステムである。元々Googleが設計したシステムであるが、現在はCloud Native Computing Foundationがメンテナンスを行っている。Kubernetesの目的は、「ホストのクラスターを横断してアプリケーションコンテナを自動デプロイ、スケーリング、操作するためのプラットフォーム」を提供することとされているDockerを含む多数のコンテナツールと連携して動作する。

Kubernetes - Wikipedia

⇧  Google

Kubernetesの開発や設計はGoogleのBorgシステムから強い影響を受けており、Borgのトップコントリビュータの多くが開発に参加している。Google内でのKubernetesのもともとのコードネームはProject Sevenであり、スター・トレックのキャラクターで、優しいBorgである、セブン・オブ・ナインの名前に由来する

Kubernetes - Wikipedia

Google! !

 

コンテナ化アプリケーションを管理するって? 

www.atmarkit.co.jp

⇧  上記サイト様が詳しいです。そして、私はよく分かっていません...分かっていませんが、Red Hatさんによりますと、

www.redhat.com

Kubernetes は元々、Google のエンジニアによって開発および設計されました。Google は Linux コンテナテクノロジーに当初から貢献してきておりGoogle のすべての業務がコンテナで実行されていると公言しています。(このテクノロジーが、Googleクラウドサービスを支えています。)Google では毎週 20 億以上のコンテナをデプロイしており、これらすべては内部プラットフォームである Borg から行われています。Borg は Kubernetes の前身であり、何年にもわたって Borg を使用して得られた教訓が、Kubernetes テクノロジーの背後にある主要な原動力となっています。

What is Kubernetes?

⇧  Googleさんで、運用されてたノウハウで、Borg というプラットフォームをオープンソース化してくれたらしいです。

 

そんな、Kubernetesですが、Windows 10 Homeだと、

www.publickey1.jp

⇧  上記サイト様の説明でありますように、Dockerに、オーケストレーションツールであるKubernetesを統合した「Docker for Windows Desktop with integrated Kubernetes」を利用することはできないと(涙)。

 

でも、でも、でも、でも... そんなの関係ねぇ!ということで、

learnk8s.io

⇧  上記サイト様によりますと、

And if you’re using Windows 10 Home or Student edition, you are out of luck. You won’t be able to install and run Docker for Windows.

But it’s not game over.

There are plenty of replacements based on Docker Machine such as Docker Toolbox or minikube.

Getting started with Docker and Kubernetes on Windows 10 • learnk8s

⇧  Windows 10 Homeであっても、

  • Docker Toolbox
    • Kubernetesを別途、構築する必要があるため難易度が高いらしい
  • minikube
    • Kubernetesが梱包済みであるため、難易度は低めらしい

のどっちかをインストールすることで、Kubernetes を利用できる、というか、Docker Toolboxのほうは、Kubernetesをまんま構築しないといけないので、難易度が高いかと。

上記サイト様の図によりますと、

f:id:ts0818:20180721142507p:plain

⇧  MinikubeにDocker環境(Docker machineなど)が内包されてるようですね。

 

ちなみに、Windowsのローカル環境にKubernetes環境を構築する方法は、

  • Minikubeを利用
  • Kubeadm(キューブアダム)を利用
    • Kubernetes提供ツール。本番環境では利用非推奨(2018年7月22日 現在)。VirtualBoxなどの仮想化アプリケーションが必要。
  • Vagrantを利用
    • Vagrantのバージョン >= 1.7.4。VirtualBoxなどの仮想化アプリケーションが必要。

などなど。

他にも、Red HatのOpenShiftという、Kubernetesのパワーアップバージョンとかもあるようです。

nekop.hatenablog.com

 

ということで、今回は、minikubeにトライ。(minikubeで、Kubernetesを利用する場合は、事前に、VirtualBoxのインストールも忘れずに。)

 

 

Dockerって何?

まぁ、まずは、Dockerって何じゃらほい?ですが、

www.atmarkit.co.jp

⇧  上記サイト様の説明でありますように、一言で言うと、

軽量なコンテナ型の仮想化環境、それがDocker

であると...。

仮想化環境 としては、これまでにも、

 などがあったようです。

 

仮想化環境いろいろ

じゃあ、従来の仮想化環境と、Dockerでは何が違うのか?というか、Dockerを使うメリットって何?

まずは、それぞれの仮想化環境の仕組みをだいたいのイメージでザックリ。

 

ホスト型 

f:id:ts0818:20180721153524p:plain

仮想化アプリケーションには、VirtualBoxなどがあてはまりますかね。

 

 

ハイパーバイザー型

f:id:ts0818:20180721160010p:plain

ハイパーバイザー型にも、いろいろ種類はあるらしいですが、一番の特徴は、ホストマシンのOSの影響を受けないということらしいです。

ハイパーバイザーが、仮想化を実現してる部分かと。(Windows 10 Homeだと、Hyper-Vとか利用できないのでよく分からんです。)

 

コンテナ型

f:id:ts0818:20180721164352p:plain

Windows 10 Homeの場合(Macも同じかな)、ややこしいのが、Virtual Boxで仮想マシンを用意して、その仮想マシンの中に、docker-machineコマンドで、Docker Engineをインストールすることで、コンテナ仮想化を実現しているというところですかね。

Linux環境とかだと、直接、Docker Engineをインストールするはずなので、最初の仮想マシンを用意は必要ないはず、たぶん。

コンテナ仮想化の一番の特徴は、個別に仮想マシンを作成しなくても済むところじゃないでしょうか?誰か、教えて、エライ人。

 

MacWindows 上では、Docker Machine を使うのが Docker を実行する唯一の方法です。そして、様々な Linux で動作するリモート Docker ホストを複数プロビジョンするのにも、ベストの方法です。

Docker Machine 概要 — Docker-docs-ja 17.06.Beta ドキュメント

⇧  2017年9月 現在 と仰っているので、若干、旧い情報ですが、Dockerのドキュメントについて日本語化してくれています。

 

Dockerは、Docker Engineによって、コンテナ環境を作り出し、その中にアプリケーションを配置できるので、コンテナ化アプリケーションを実現してると言える感じですかね? 

 

Kubernetesはコンテナオーケストレーションツールである。オーケストレーションツール、何それ?

Dockerというものは、なんとなく分かったんだけど(いや、本当はよく分かってないけど)、Kubernetesはコンテナオーケストレーションツールであるらしい...。

オーケストレーションツールってそもそも何?

Wikipediaによると、オーケストレーションは、

オーケストレーションOrchestration)は、複雑なコンピュータシステム/ミドルウェア/サービスの配備/設定/管理の自動化を指す用語。

何らかの知的制御や自律制御として議論されることが多いが、技術的解説と言うよりも大部分は単なるアナロジーである。実際には、オーケストレーション制御理論の要素としてオートメーションやシステムの考え方を持ち込んだものと言える。

このようなコンピュータシステムの「オーケストレーション」という用語は、仮想化プロビジョニングの文脈で語られることが多く、バズワード的要素が強い。

オーケストレーション (コンピュータ) - Wikipedia

⇧  アプリケーションの管理の自動化となっていますね。 んで、仮想化などで語られることが多いと。

 

オーケストレーションツールでもコンテナ化アプリケーション向けに特化したもののことを、コンテナオーケストレーションツールというようです。

cn.teldevice.co.jp

Dockerコンテナが本番環境に浸透し始めると、そのコンテナの運用管理をしなくてはならなくなります。

例えばコンテナ化したアプリケーションを何台ものサーバーへ展開するのは手間になり、複数のサーバーへ展開したコンテナがちゃんと稼働しているかどうかを監視することも必要になります。

さらに万が一、いずれかのコンテナが落ちたときに別のコンテナを起動するクラスター管理、アプリケーションへの負荷が高まったらサーバーを増やし、負荷が減ればサーバーを減らすスケーラブルな運用対応や複数コンテナへのアクセスの分配など、さまざまな処理が必要となってきます。

こうした多数のコンテナに対する運用管理作業を一般に“コンテナオーケストレーション”と呼びます。

そしてKubernetesをはじめとするコンテナオーケストレーションツールは、こうした作業を自動化してくれるのです。

コンテナオーケストレーションツールの“事実上の標準”という座をつかんだ「Kubernetes」。その重要性とは? | 新野淳一コラム | 東京エレクトロンデバイス株式会社

⇧  上記サイト様によりますと、コンテナ化アプリケーションの運用管理を自動化してくれるのが、コンテナオーケストレーションツールということになりそうです。

 

Kubernetes 以外にも、オーケストレーションツールはありますが、主流はKubernetesとなっておるようです。

コンテナ仮想化で利用されるオーケストレーションツールのことを、コンテナオーケストレーションツールというようですね(1年前ぐらいは、単にオーケストレーションツールで紹介されてた気がするけど...時の流れ~) 。

 

Kubernetesとは?

そんじゃ、そのコンテナオーケストレーションツールであるKubernetesって、どんなもの?

kubernetes.io

What is Kubernetes?

Kubernetes is a portable, extensible open-source platform for managing containerized workloads and services, that facilitates both declarative configuration and automation. It has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.

What is Kubernetes? - Kubernetes

⇧  説明が漠然とし過ぎてよく分からんけど...とりあえず、オープンソースであるらしいことだけは分かりました...。

 

What Kubernetes is not

Since Kubernetes operates at the container level rather than at the hardware level, it provides some generally applicable features common to PaaS offerings, such as deployment, scaling, load balancing, logging, and monitoring. 

What is Kubernetes? - Kubernetes

⇧  ハードウェアレベルではなく、あくまでコンテナレベルで動作するってことみたいです。 あくまで、コンテナレベル...らしい。(コンテナレベルって何?)

 

Kubernetesの名前の由来は、 

What does Kubernetes mean? K8s?

The name Kubernetes originates from Greek, meaning helmsman or pilot, and is the root of governor and cyberneticK8s is an abbreviation derived by replacing the 8 letters “ubernete” with “8”.

What is Kubernetes? - Kubernetes

⇧  で、Google翻訳したところ、

Kubernetesという名前は、操縦士やパイロットを意味するギリシャ語に由来し、知事とサイバネティックスのルートです。 K8sは8文字の "ubernete"を "8"に置き換えた略語です。

ということらしいです。 

 

ちょっと旧めの情報ですが、

ttlnews.blogspot.com

⇧  上記サイト様の画像が、Kubernetesの全体像をつかみやすい気がしたので、引用させていただきました。

f:id:ts0818:20180722104031p:plain

⇧  Dockerのようなコンテナ環境(コンテナレベルってこと?)を、Nodeという単位で管理しようってことですかね?そして、各Nodeを司るのが、Master Nodeみたいな。

 

Zabbixみたいな統合監視ツールとの違いがよく分かりませんが...。

 

CRI(Container Runtime Interface)と OCI(Open Container Initiative) とは?

Kubernetesは、コンテナレベルでしか動作しないということでした...これって一体どういうこと?

thinkit.co.jp

⇧  上記サイト様によりますと、コンテナ Runtime(Container Runtime)が実装されていることが、Kubernetesを動作させられる条件になるようです。

つまり、

コンテナレベル = コンテナ Runtime(Container Runtime)の実装

ってことでいいのかな?

で、この、コンテナ Runtime(Container Runtime)を実現しているものとしては、

  • Docker
    • Container Runtimeの魁。
  • cri-o
    • CRI , OCIに準拠。Kubernetes専用のRuntime。
  • Frakti
    • Hypervisorが必須。セキュアな環境を提供。
  • containerd
    • Dockerから派生。

 の4つが主流となっているようです。

ただ、

www.publickey1.jp

⇧  上記サイト様によりますと、

なども出てきているようで、時はまさに、コンテナ Runtime(Container Runtime)戦国時代に突入...。 

 

で、コンテナ Runtime(Container Runtime)を実現しているということは何ぞや?何をもってして、コンテナ Runtime(Container Runtime)?

ということで、コンテナ Runtime(Container Runtime)の仕様を定めようということで、

  • OCI(Open Container Initiative)
    • 2015年設立。コンテナの標準仕様を策定するために設立された団体。OCI v1.0というコンテナの仕様について、2017年7月19日に公開された。

が登場したようです。 

で、様々な コンテナ Runtime(Container Runtime)でKubernetesが実装できるように、

  • CRI(Container Runtime Interface)

が、Kubernetes 1.5 において、Alpha版としてリリースされたようです。

kubernetes.io

 

イメージ的には、

CRI(Container Runtime Interface)を利用することで、それぞれのコンテナ Runtime(Container Runtime)の違いを意識しないでKubernetesを実施できるってことですかね?

 

f:id:ts0818:20180722161121p:plain

これから先は、コンテナ仮想化もDockerがメインじゃなくなるかもみたいですね、技術革新が早すぎて疲れるなぁ~。 

 

Minikubeとは?

脱線しまくりでしたが、今回のメインテーマ、Minikubeです。

kubernetes.io 

Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day.

Running Kubernetes Locally via Minikube - Kubernetes

⇧  ローカル環境で、Kubernetes を簡単に実行するためのツールらしいですね、簡単...絶対にハマりそうな予感100%。

 

Minikubeを利用するには、

Before you begin

VT-x or AMD-v virtualization must be enabled in your computer’s BIOS.

Install Minikube - Kubernetes

というように、PCのBIOSが仮想化支援機能に対応している環境であるか確認する必要があるようです。

お使いのPCによって、仮想化支援機能がサポートされている場合、

のどちらかが、使われているようです。 

 

Windowsとかだと、「タスクマネージャー」の「パフォーマンス」タブの「CPU」で表示される「仮想化: 有効」で、仮想化支援機能を利用できる状態というように確認できます。

f:id:ts0818:20180721173635p:plain

⇧   Intel VTか、AMD-Vのどちらなのかまでは分からず。

 

使用している機器にCPUの仮想化支援機能があるかどうか分からない場合は、/proc/cpuinfoを見てみるとよいでしょう。Intel VTの場合はvmxが、AMD-Vの場合はsvmがあるか否かが1つの判断基準となります。

仮想化対応CPUか確認する Intel VT | clicktx::Tech::Memo

⇧  上記サイト様によりますと、コマンドで確認できるそう。

 

Intel VT 対応かどうか

grep vmx /proc/cpuinfo

f:id:ts0818:20180721180452p:plain

 

AMD-V 対応かどうか 

grep svm /proc/cpuinfo

f:id:ts0818:20180721180802p:plain

 

ということで、自分の使ってるPCでは、Intel VTが利用されていて、且つ、有効になっていました。

仮想化支援機能を有効化するには、BIOSでの設定が必要になるので、お使いのPCに対応した手順に従って実施する必要があります。 (自分の場合ですと、マウスコンピューターBIOS設定という感じですかね)。

 

仮想化支援機能が、利用でき、且つ、有効になっている場合、次は、

Install a Hypervisor

If you do not already have a hypervisor installed, install one now.

Install Minikube - Kubernetes

とあるように、Windowsの場合は、VirtualBoxがインストールされているか、Hyper-Vがインストールされているかのどちらかを満たす必要があるようです。

自分の場合は、Windows 10 HomeでVirtual Boxっていう感じです。

 

そして、何の説明もないけど、 

⇧  kubectlなるものもインストールんでしょうね。説明を端折りすぎでしょ...。

 

「Install kubectl」のリンク先で、これまた、

kubernetes.io

Before you begin

You must use a kubectl version that is within one minor version difference with your cluster. For example, a v1.2 client should work with v1.1, v1.2, and v1.3 master. Using the latest version of kubectl helps avoid unforeseen issues.

https://kubernetes.io/docs/tasks/tools/install-kubectl/

⇧  とりあえず、kubectlについては、最新版の使用を推奨ってなってますね。

バージョン違いについては、± 0.1 までは許容するってなってますね。

で、kubectlのインストールの仕方ですが、Windowsの場合、

  1. Install with Powershell from PSGallery
  2. Install with Chocolatey on Windows
  3. Install kubectl binary via curl
  4. Download the latest release v1.11.0 from this link.

の4つの方法のいずれかで、インストールできるみたいです。 

今回は、4番目の、最新版(2018年7月21日 現在)のリンクからダウンロードにしちゃいました。

ダウンロードした「kubectl.exe」を適当な場所に配置します。自分は、「C:¥Program Files¥kubectl」というディレクトリを作成し、配置しました。

f:id:ts0818:20180721205157p:plain

配置した場所までのパスを環境変数に追加します。

エクスプローラーの「PC」上で右クリックし「プロパティ(R)」を選択。

f:id:ts0818:20180721205453p:plain

「システムの詳細設定」を選択。

f:id:ts0818:20180721205640p:plain

環境変数(N)...」を選択。

f:id:ts0818:20180721205739p:plain

「システム環境変数(S)」で「Path」を選択し、「編集(I)...」 を選択。

f:id:ts0818:20180721210127j:plain

「新規(N)」をクリック。

f:id:ts0818:20180721220312p:plain

「kubectl.exe」を配置したディレクトリまでのパスを追加。

f:id:ts0818:20180721220505p:plain

 

環境変数の設定ができたらば、コマンドプロンプトを起ち上げ、バージョン確認。

kubectl version

f:id:ts0818:20180721232115p:plain

⇧  version.Info とか表示されているので、大丈夫かな?

 

kubectl --help

で、kubectlコマンドの使い方を表示してくれるけど、

f:id:ts0818:20180721232502p:plain

https://kubernetes.io/docs/reference/kubectl/overview/ にアクセスすれば、もっと詳しい情報を見れるって言ってますね。

kubernetes.io

 

 

Minikubeをインストール

いよいよ、今回の目的のもの、Minikubeをインストール。

https://github.com/kubernetes/minikube/releases にアクセス。

github.com

で、ページ遷移しましたらば、Windowsの場合は、

f:id:ts0818:20180721221719p:plain

のどちらかの方法でダウンロードして、 

Windows [Experimental]

Download the minikube-windows-amd64.exe file, rename it to minikube.exe and add it to your path.

Windows Installer [Experimental]

Download the minikube-installer.exe file, and execute the installer. This will automatically add minikube.exe to your path with an uninstaller available as well.

⇧  ダウンロードした方法に合わせた、それぞれの手順を行います。 

今回は、「minikube-windows-amd64」をダウンロードしたので、『Windows[Experimental]』のほうの手順で導入していたいと思います。

f:id:ts0818:20180721222509p:plain

「C:\Program Files\minikube」というディレクトリを作成し、ダウンロードした「minikube-windows-amd64」を、配置します。

f:id:ts0818:20180721222853p:plain

こんなん出たら、「続行(C)」を選択。

f:id:ts0818:20180721223020p:plain

配置できたら、リネームします。

f:id:ts0818:20180721223229p:plain

こんなん出たら、「続行(C)」を選択。

f:id:ts0818:20180721223305p:plain

「minikube」にリネームできました。

f:id:ts0818:20180721223345p:plain

そしたら、「kubectl.exe」のときと同じように、「minikube.exe」を配置したディレクトリまでのパスを、環境変数に追加します。

f:id:ts0818:20180721223723p:plain

 

環境変数の設定ができたらば、コマンドプロンプトを起ち上げ、バージョン確認。

minikube version

f:id:ts0818:20180721231752p:plain

⇧  バージョンが表示されればOK。 

 

Minikubeで、Kubernetes環境を構築

準備が整ったようなので、実際に動かしてみます。

https://kubernetes.io/docs/setup/minikube/ にアクセス。

kubernetes.io

Running Kubernetes Locally via Minikube

Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kubernetes cluster inside a VM on your laptop for users looking to try out Kubernetes or develop with it day-to-day.

https://kubernetes.io/docs/tasks/tools/install-kubectl/

自分の場合は、PCの中にVirtual Boxしか入っていないのですが、複数の仮想化環境を導入している場合で、仮想化環境を切り替えたいとき

If you want to change the VM driver add the appropriate --vm-driver=xxx flag to minikube start. Minikube supports the following drivers:

https://kubernetes.io/docs/tasks/tools/install-kubectl/

⇧  VM Driverを 指定すべし的な感じですかね。

サポートしてるものとして、

⇧  これだけあるみたいです。

 

そして、minikube、驚いたことにDocker daemon を内蔵しとるらしい。 

Reusing the Docker daemon

When using a single VM of Kubernetes, it’s really handy to reuse the minikube’s built-in Docker daemon; as this means you don’t have to build a docker registry on your host machine and push the image into it - you can just build inside the same docker daemon as minikube which speeds up local experiments.

Just make sure you tag your Docker image with something other than ‘latest’ and use that tag while you pull the image.

Otherwise, if you do not specify version of your image, it will be assumed as :latest, with pull image policy of Always correspondingly, which may eventually result in ErrImagePull as you may not have any versions of your Docker image out there in the default docker registry (usually DockerHub) yet.

https://kubernetes.io/docs/tasks/tools/install-kubectl/

つまり?

To be able to work with the docker daemon on your mac/linux host use the docker-env command in your shell:

eval $(minikube docker-env)

You should now be able to use docker on the command line on your host mac/linux machine talking to the docker daemon inside the minikube VM:

docker ps

よく分からんのだけど、別途でdocker CLIとかインストールしなくても、dockerコマンドが使えるという認識で良いのかな?

 

とりあえず、minikubeで利用できるKubernetesの一覧を表示。 

minikube get-k8s-versions

f:id:ts0818:20180721233200p:plain

 で、kubernetes環境を構築するには、「minikube start」でいけるようです。

cloudmaniac.net

⇧  上記サイト様によりますと、

This command will download the Minikube ISO (on the first run only), start a Virtualbox VM (by default, can be changed to VMware Fusion or other virtualization software) and create a kubernetes context named ‘minikube‘. This context contains the configuration to communicate with your minikube cluster. Because Minikube sets this context to default automatically, you can start using your kubernetes cluster right away:

Start with Kubernetes in less than 5 minutes with Minikube

「minikube start」コマンドを実行することで、初回時のみ『Minikube ISO』という仮想マシンのディスクイメージのファイルがダウンロードされ、そのファイルを元に、minikubeという名前のKubernetesの環境が構築された仮想マシンを、Virtual Boxに作成してくれるらしい。

 

ちなみに、いまのところ(2018年7月22日 現在)、Kubernetesのデフォルトの『コンテナ Runtime』は、Dockerであるらしいと。

adtech.cyberagent.io

⇧  上記サイト様によりますと、『コンテナ Runtime』をDockerからcri-oに変えることもできるようです。

  

何はともあれ、「minikube start」コマンドで、まずは、Kubernetesの環境が整ったVM仮想マシンをVirtual Box に作成ですかね。

オプションがいろいろあって、今回は、Kubernetesのバージョンを指定してみます。(というか、他にどんなオプションがあるか分からん...。)

minikube start --kubernetes-version v1.10.0   

f:id:ts0818:20180722141919p:plain

100%になってから、少し待つ。

f:id:ts0818:20180722142043p:plain

Kubernetesの環境構築に必要なファイル群がインストールされてる感じ?

f:id:ts0818:20180722142214p:plain

設定できたみたいです。 

f:id:ts0818:20180722142334p:plain 

VirtualBox マネージャーで確認すると、『minikube』なる仮想マシンが作成され、起動しています。

f:id:ts0818:20180722142540p:plain

「C:¥Users¥ユーザ名」のディレクトリに、「.kube」「.minikube」っていう隠しディレクトリが作成されています。 

f:id:ts0818:20180722143038p:plain

 

Kubernetesの環境で、現在利用中のコンテキストを確認。(何を確認してるのかよく分からん)

kubectl config get-contexts

f:id:ts0818:20180722143926p:plain

 

クラスターの詳細情報を取得。(何を確認してるのかよく分からん)

kubectl cluster-info

f:id:ts0818:20180722144851p:plain

すべてのノード情報を取得。(Minikubeで構築されたKubernetesの環境では、シングルノードのみ)。

kubectl get nodes

f:id:ts0818:20180722145417p:plain

 

dashboardを表示できるようです。

minikube dashboard

f:id:ts0818:20180722205840p:plain

コマンドを実行すると、ブラウザにダッシュボードが表示されます。

f:id:ts0818:20180722205927j:plain

 

まぁ、とりあえず、「kubectl」コマンドはかなり重要ってことですかね、一切説明なかったですけど...。 

と思ったら、

kubernetes.io

⇧  の  (What is kubectl?) のリンクの先に、

kubernetes.io

kubectlコマンドの説明ありました....

kubectl is a command line interface for running commands against Kubernetes clusters. This overview covers kubectl syntax, describes the command operations, and provides common examples. For details about each command, including all the supported flags and subcommands, see the kubectl reference documentation.

Overview of kubectl - Kubernetes

⇧ Kubernetes clusters に対して、いろんな操作を行えるコマンドらしい。Kubernetes clusters は、Kuberenetes環境ってことで良いのかしら?

 

 

アプリケーションのデプロイとは?

イメージ的には、「kubectl run」コマンドで、任意のimage Repositoryからコンテナ imageを取得し、デプロイすることで、Master Nodeに含まれるAPI Server(kube-apiserver)が各コンポーネント(kube-controller-manager、kube-scheduler)と連携して、Nodeを探して、いろいろ調整してくれるようです。

dr-asa.hatenablog.com

⇧  上記サイト様によりますと、kube-controller-managerは、複数の機能を持っているようで、実質的にNodeの状態を管理するようです。

kube-schedulerは、どのNodeを利用できるかとかを管理するようです。(今回は、シングルノードなので、あんまり出番ない?)

そういった、いろいろな管理情報は、etcdというデータストアに保存されるのですが、etcdとやり取りできるのは、kube-apiserverだけのようです。

いろんな準備が整った段階で、API Serverによって、Kubeletが実行され、Containers(Podというクラスタで管理)の中のcontainerに用意されたコンテナimageが実行され、コンテナ化アプリケーションのデプロイが行われるって感じですかね...たぶん。

 

f:id:ts0818:20180728144519p:plain

⇧  MinikubeでKubernetesの環境を構築した場合は、Minion(Node)は1つしかできないはず(シングルノード)なので、上のイメージ図は間違ってますが、だいたいのイメージで捉えてもらえればと思います。

 

Nodeの中のContainersは、Podと呼ばれるクラスタで管理されるそうです。(Podの中には、containerが1つ以上ある感じのようです。)また、Master Nodeには、etcdというnoSQLの1つであるKSV(Key-Value Store)タイプのデータストアが利用されているようです。

kube-proxyというもので、外部とのやり取りも可能らしいです。

 

f:id:ts0818:20180722165143p:plain

Containerに、コンテナのimageがインストールされる感じですかね?

コンテナのimageが、(CentOS7.4 + Apache Httpd + Tomcat + Java)とかで構成されていれば、Javaの環境ができるみたいな(Containerに後から、他のライブラリとかの追加も可能)。  

で、それをPodが管理みたいな?

Master Node > Node > Pod みたいな感じでContainerを管理ですかね。

 

というわけで、Nodeにコンテナをデプロイしてみたいと思いますが、コンテナimageのimageリポジトリとしてどれが使えるのか?

kubernetes.io

 

Images

You create your Docker image and push it to a registry before referring to it in a Kubernetes pod.

The image property of a container supports the same syntax as the docker command does, including private registries and tags.

Images - Kubernetes

⇧  なんか、Dockerのコンテナimageが使えるみたいなんで、imageリポジトリとしては、Docker Hubとか利用していく感じですかね?

他の方法だと、Cloud(GCPAWS、Azureなどなど)に登録してないとできなさそうですし。

 

でも...最近、Docker Hub、良いイメージないんですよね...。

jp.techcrunch.com

⇧  荒らしがどこの世界にもいるんですね...雀の涙ほどの給与しかもらっていない貧乏人を狙うのは止めて!

 

怖いですが、Docker Hubを利用するしかなさそうですね。

https://hub.docker.com/search/  でdocker imageを検索ですかね。

 

と、とりあえず、時間の関係上、次回に持ち越しで...すごい中途半端で申し訳ないです。

「minikube stop」で、minikubeで作成した仮想マシンが停止できるらしい。

minikube stop

f:id:ts0818:20180722222719p:plain

f:id:ts0818:20180722222742p:plain

 

もうちょい、調査してみます。Javaで、「kubectl run」してる参考サイトがなかなか見つからない、なんか、docker run してる人が多いかな...そして、結局、kubernetesよく分からん...。

そして、JavaOracle Database 12c の勉強、全然できてない....絶望のうちに休日が終わるという(涙)。

 

今回は、このへんで。