TechLunch

The free lunch is over.

Kubernetes入門1: Hello Minikube

Kubernetesは公式ドキュメントが充実しており、さまざまなチュートリアルも用意されています。今回はその中の一つである、Hello Minikubeを参考にチュートリアル記事を書いてみました。*1

Minikubeとは

いざKubernetesを試してみようと思った時に、たくさんサーバを用意することは出来ない、インストールが難しい、といった理由で断念してしまう人もいるかもしれません。*2

Minikubeは、MacLinuxなど手元のマシンで簡単にKubernetesを試すことができるツールです。 例えば、Macでminikubeを試すと、Mac上に一台VMを立ち上げて、その中に自動的にKubernetesをインストールして、一台構成のKubernetesお試し環境が出来上がります。 ちょっとKubernetesを試して見たい人にはおすすめの環境ですのでぜひ利用してみてください。

インストール

ここでは、Macでのインストール方法を載せておきます。LinuxWindowsでもワンライナーでインストール可能のようですので、ご自身の環境に合わせてインストールしてください。

$ brew cask install minikube

これで、インストール終了です。 他にも、Macで利用するためのkubectlなどのインストールが必要なのですが、詳細は Install Minikube - Kubernetes をご参照ください。

All-in-one VMの起動

起動も簡単で、virtualboxをインストールしてあるときは、以下のコマンドを実行します。

$ minikube --vm-driver=virtualbox start

// Virtualboxのコンソールや以下のコマンドでVMが出来てることを確認
$ VBoxManage list vms
"minikube" {xxx}

これでKurbernetesがインストール済のVMが作成され、起動しました。

Podを作成してから削除するまでの一連のコマンドを試す

Pod起動

Dockerチュートリアルでもよくみるnginxが含まれたPodを起動します。

$ kubectl run hello-node --image=nginx --port=80

Pod取得

$ kubectl get pods
NAME                          READY     STATUS    RESTARTS   AGE
hello-node-79c9b49558-dtq8d   1/1       Running   0          54s

Service作成

KubernetesはPodを作成しただけでは、外部からそのPodにアクセスできませんので、Serviceを作成して外部からアクセス可能とします。

$ kubectl expose deployment hello-node --type=NodePort
service/hello-node exposed

Serviceにアクセス

起動したコンテナには、minikube VMのIP:portでアクセスすることができます。

$ curl  $(minikube service hello-node --url)
...
// nginxのhtmlが返ってきます

ブラウザでアクセスするには、

$ minikube service hello-node --url

のコマンドでIPとPortを取得して、それをブラウザで開けばアクセスすることが可能です。

ServiceとPodの削除

$ kubectl delete services hello-node
$ kubectl delete deployments hello-node

ダッシュボードの利用

$ minikube dashboard

ブラウザ経由でKubernetesクラスタの管理をすることができます。kubectlを利用して作成したPod情報なども見ることができ、直感的な理解の助けになるので、ぜひ試してみてください。

これで、チュートリアルその1は終了です。次回はこの環境を活用して、Kubernetesの他のチュートリアルなども試してみたいと思います。

*1:公式チュートリアルでは自分でDockerイメージを作成しており敷居が高ので、より簡略化しています。

*2:今はkubeadmなどで比較的容易にインストール可能ですが、初期のKubernetesは少し難しかったのです

Googleの新サービスCloud Service Platform。Istioなどを利用。

Googleの新サービス基盤 Cloud Service Platform について、Googleの公式ブログで発表されています。 Cloud Services Platformについては、Google Cloud Next '18でも発表されており、日本語の記事もいくつか出ています。 本サービスは、オンプレとクラウド上で動く全てのITシステムに対して、一貫性のあるフレームワークを提供することを目的としている。おそらく、オンプレにシステムを抱えているユーザに対し、クラウドへの緩やかな移行を促すことを目的としているのではないかと思われる。

https://3.bp.blogspot.com/-0PF8lTgs2mc/W1ZeqBT0wAI/AAAAAAAAGHo/SirNgEV8SAQuepeZjrhRtdqi3t7abzyxgCLcBGAs/s1600/The%2BCloud%2BServices%2BPlatform%2Bfamily.png

本サービスの特徴として、

  • Service mesh: マネージドなIstioの提供
  • Hybrid Computing: GKE On-premによるオンプレとクラウドのマルチクラスタ管理
  • Policy enforcement: Kubernetes workloadの制御を可能とするGKEポリシー管理
  • Ops tooling: 監視を一元的に可能なStackdriver Service Monitoring
  • Serverless computing: GKE Serverless add-onとKnative
  • Developer tools: マネージドなCI/CD環境

などが挙げられます。本サービスを活用し、オンプレで稼働しているレガシーなアプリケーションのコンテナ化をすることで、即座にクラウドレディなマイクロサービスを開発することができると思われます。*1

ここ数日、Googleクラウド関連のサービスについて注目し記事にしていっている通り、Googleはオンプレに閉じているレガシーな顧客に対し、アプリケーションのコンテナ化とKubernetesの導入の敷居を下げるようなサービスを発表していっています。

今後、比較的レガシーな開発を実施することが多いSIerに対してもますますKubernetesなどの導入要望は強まっていくと思われますので、今後の業界動向について目を離すことはできない状況となっています。

*1:もちろんレガシーなアプリケーションをコンテナ化するという部分が即座にできるとは思えません。

KubernetesやIstio、Knativeに関するPodcastが公開されました

RedHatにより提供されているPodcastにて、v1.0の公開から3周年を迎えたKubernetes、Istio、Knative、およびGoogle Next '18Kubernetes関連の発表について議論されています。

GKE On-Premは、本ブログでも何度か記事にしましたが、Kubernetesをユーザのデータセンターなどのオンプレ環境で利用するためのサービスです。まずはアルファ版の提供からとなりますので、早く試してみたい方は早期利用リクエストを投げることをお薦めします。

Knativeは、Kubernetes上でサーバレスなワークロードを動かすための基本的なビルディングブロックを提供します。AWS Lambdaによりサーバレス自体は前々から注目されてきていますが、今後より一般的な概念になり利用ユーザも増えていくことが見込まれます。

Istioは、マイクロサービスにより構成されるサービスメッシュを管理するためのソフトウェアで、CNCFの一員として開発されているOSSです。GKEとも連携して使うことができるようになりました。

今後もしばらくはGoogle Cloud Next '18の発表内容を踏まえた議論が多くされていきそうで、ますますクラウドKubernetes、コンテナ界隈から目を離すことができません。 ITエンジニアとしては、動向をウォッチするだけでなく、自らOSSやサービスを利用して知見をためていく必要がありそうです。 本ブログは、動向をウォッチするためのポインタとなることを目指しつつ、月数回の頻度で詳細な解説記事を載せていく予定です。

GoogleによるクラウドイベントGoogle Cloud Next ‘18が盛況のうちに終了

GKE On-PremKnativeなど、日本でもバズるような興味深い発表が多くあったGoogle Cloud Next ‘18が終了しました。 Keynoteによると、Google過去最大規模のイベントとなったそうで、25,000以上の参加登録があったようです。 日本語でもさまざまな記事が出ていますが、どんな発表があったのか、気になる方はrecap記事を是非参照してみてください。 www.blog.google

イベントの名前にもあるCloud関連については新サービス含め、機能強化などさまざまな発表がありました。

GKE On-Prem

techlunch.hatenablog.com 本イベントの目玉の一つですね。詳細は過去記事やその先のリンクをご参照ください。

Serverless containers, Knative

cloudplatform.googleblog.com こちらも目玉の一つで、日本語記事もたくさん書かれています。筆者は実はserverlessの使いどころが明確に見えておらず、現時点で利用したことがありませんし、引き合いもそこまで多くありませんでした。 しかし、今後話を聞かれることはますます多くなると思いますので、勉強して詳細な記事を書きたいと思っています。

Stackdriver Service Monitoring

GCPAWSなどのクラウドで実行されるアプリケーションのパフォーマンスやアップタイムなどをグラフィカルに確認することができます。NginxやApacheなどよく利用されるアプリケーションに対応しており、さまざまな情報が取得することができます。 もちろんアラート機能も具備していますので、slackやメール通知など運用に役立てることが可能です。 独自のビジネスアプリケーションを監視するための設定も可能なようなので、幅広く利用ができそうです。

Cloud Functions

サーバレスプラットフォームであるCloud Functionの一般供用が開始されました。100ms単位に丸められて課金されるようですので、バッチ処理など常駐しないアプリケーションが多いユーザはコスト削減につながるかもしれません。

マネージドサービスの拡充

フルマネージドなサービスのラインナップが拡充されました。今まで、特定の製品に縛られて自分たちで運用せざるを得なかったユーザもどんどんとクラウドに移行していくことになるだろうと思われます。

その他にも、今流行りのAI関連やIoT、エッジ向けの話など幅広い話がありました。9月には東京でGoogle Cloud Next ’18 in Tokyo | 9 月 19 ~ 20 日、東京が開催される予定ですので、時間があるかたは是非参加して見てはいかがでしょうか。

KubernetesのCPU Managerの解説記事を見て勉強しよう

Kubernetesの公式ブログで、Feature Highlight: CPU Manager - Kubernetes という記事が上がっていました。デファクトのコンテナオーケストレーターであるKubernetesの概要を掴むチャンスですので、概説します。

Kubernetesアーキテクチャ

https://raw.githubusercontent.com/kubernetes/kubernetes/release-1.1/docs/design/architecture.png

そもそもKubernetesはどのようなシステムで構成されているのか疑問に思っている方も多いかと思いますので、Githubに上がっていた図を貼り付けておきます。

CPU Managerは名前から類推されるとおり、controller managerと呼ばれるシステムコンポーネントの一機能となります。

controller managerは、Podのレプリカ数の管理など、コンテナ化されたアプリケーションが正常に動作するためのさまざまな制御機能を有しています。

CPU Manager

When CPU manager is enabled with the “static” policy, it manages a shared pool of CPUs. Initially this shared pool contains all the CPUs in the compute node. When a container with integer CPU request in a Guaranteed pod is created by the Kubelet, CPUs for that container are removed from the shared pool and assigned exclusively for the lifetime of the container. Other containers are migrated off these exclusively allocated CPUs.

簡単に言うと、特定のPodのみがCPUを排他的に利用すること可能となるようです。引用文を読む限り、排他的に割り当てられたCPUを他のPod(コンテナ)は利用することはできなくなるように見えます。

これにより、CPU-intensiveなワークロードは、CPU時間を有効活用することができるため、純粋な処理時間が増えるだけでなく、context switchやcache missによるオーバヘッドも削減することが可能となります。

CPU-intensiveなワークロードって何?と感じるかたもいるかもしれませんが、I/Oが少なく、計算が多く走るような処理のことです。

CPUの配分方法としては、CPU配分をワークロードごとに重み付けをする方法や、スケジューリング期間中にPodに割り当てる実時間を指定する方法などもありますが、CPUを排他的に利用することが可能になれば、複雑なスケジューリングも考える必要がなくなるため、有用な手段と言えるかと思います。

 元記事には性能評価結果も載っているので興味ある方は参照ください。

 

まだbeta featuresのようですが、ワークロードの特性によっては一度試してみたい機能となります。

GKE On-PremがGoogle Cloud Next ‘18で発表

サンフランシスコで開催中の、Google Cloud Next ’18 | July 24–26 San Francisco で興味深い発表がいくつかありました。Day1のまとめは、What happened at Google Cloud Next ‘18 でご確認頂けます。

本記事では、特に興味深いと感じたGKE On-Premについてご紹介します。 

GKEとは

GKEとは、Googleが開発しオープンソースとして公開したKubernetesGoogleクラウドサービス(GCP)上で、マネージドなサービスとして利用することが可能なサービスです。 

Kubernetesを自ら構築したことがある方はご存知かと思いますが、Kubernetesはさまざまな概念が入り混じったシステムであり、レベルの高いアーリーアダプターではない一般的なエンジニアが運用管理するには一筋縄ではいかないソフトウェアです。

そのため、GKEのようなマネージドなサービスを利用することは運用にレベルの高いエンジニアを割くことが難しい企業にとっては、取りうる選択肢の一つでした。 

On Premの重要性

そういった状況の中、今回発表されたのが、ユーザのオンプレ環境のKubernetesGoogle Cloud Consoleを介して、統合的に管理するサービス = GKE On-Premです。 

クラウドサービスを使うことが当たり前になりつつある今、何故オンプレなのかという疑問もあるかと思いますが、おそらくGoogleとしては戦略上の狙いがいくつかあるのでしょう。*1

筆者個人の経験上言えることは、現時点でもクラウドサービスを使いたくない(経営戦略上使えない)お客様は一定以上存在しますが、そういったお客様の中にもコンテナを使いたいという方は多く存在します。 

今までは、保守・運用の観点からKubernetesを導入してみたいというお客様の要望に応えることはできなかったのですが、今後そういったお客様への提案の一選択肢として本サービスを利用することができるかもしれません。(もちろんトライアルとして利用してみるだけでも1, 2年かかる仕事になるかと思います。)

今後の展開

まだ、ALPHAリリースということで、早期利用ユーザを募集しているところのようです。筆者の興味としては、本当にオンプレ環境で十分にマネージドなサービスが提供されるのか?という点になります。利用可能になりましたら、実際に試してみて続報を書きたいと思います。

*1:他社クラウドとの差別化や、GCPへの緩やかな移行のサポートなど。