minikubeを使ってローカルでKubernetes v1.9.4を動かす(2018年4月版)

会社で検証用のKubernetes環境を作った。それとは別に、手元でも試せるようにしておきたいのでminikubeを使って用意する方法を記録しておく。

バージョン

各ソフトウェアのバージョンは以下の通り。

  • macOS: High Sierra 10.13.4
  • VirtualBox: 5.2.10 r122088 (Qt5.6.3)
  • minikube: v0.25.2
  • kubernetes: v1.9.4

minikubeをインストールする

2018年04月21日現在ではminikubeの最新バージョンはv0.26.1なのだが、これだとKubernetesのv1.9.4が起動しなかった。そのため、v0.25.2を使う。Release v0.25.2 · kubernetes/minikube から実行ファイルをダウンロードし、実行可能パスに置く。実行権限も付与する。

macOSの場合、Kubernetesを動かす環境としてHyperkit / xhyve / VirtualBox / VMWare Fusion を使える。おそらく、VirtualBoxをインストールしている人が多いと思うので、VirtualBoxを使う。

以下のように、minikubeとclusterがRunningになっていればOK。

kubectlからminikube環境に接続する

kubectlから確認する。kubectlは接続先のクラスターや認証情報を「コンテキスト」という単位で管理している。minikube startすると、以下のように、minikubeコンテキストを使う状態となっているはず(他のコンテキストは人によって異なる)。

minikubeというノードがあり、ReadyとなっていればOK。

デモ環境を動かす

何か動かしてみたい。今回はmicroservices-demo/microservices-demoを動かしてみよう。

Podが全て起動するのを待つ。状態は以下のようにして確認しよう。

全Podが起動状態となったら、以下のコマンドを実行する。ブラウザで靴下のショップページが開くはずだ。

minikube環境を停止する

最後に、minikube環境を停止して、終わり。

 

追記

というコメントをいただいたのでbootstrapperオプションを指定した所、minikube v0.26.1でもkubernetes v1.9.4を起動することができた。すぱぶらさんありがとうございます!

入門 Kubernetes

入門 Kubernetes

posted with amazlet at 18.04.21
Kelsey Hightower Brendan Burns Joe Beda
オライリージャパン
売り上げランキング: 2,839

Japan Container Days v18.04でコンテナまみれの1日を過ごしたよ

ベルサール神田で開催された、Japan Container Days v18.04に参加してきた。平日、朝からの開催にもかかわらず満席立ち見になるような人気っぷり。

サイバーエージェントにおけるプライベートコンテナ基盤AKEを支える技術


kubernetes on OpenStackという近い技術スタックなので非常に参考になった。Heatベースでクラスターを構築できるようにしている。必要ならCloudProviderやIngressを実装していて素晴らしい!Designateと連携しているのもかっこいい。後で聞いてみたら、イメージの作成はPackerとシェルスクリプトで素朴に実施しているそうな。後、cloud-provider部分は1.10くらいから本体から分離したそうで、知らなかったのでありがたい情報だった。

マイクロサービスアプリケーションとしての機械学習

機械学習を用いたマイクロサービスアプリケーションをkubernetes上に構築した話。DockerfileをSREに渡したら1週間で構築してくれた。これ、SREがすごいというのもあるけど、やはり「どういうサービスがほしいか」という所に焦点を当ててマニフェストを書いていけば短時間でできるというのがポイントだろう。GCP上に構築して、S3とも連携が必要なのでPaaSではちょっと難しいのかな(できたらごめんなさい)?k8sがピタっとハマったパターンに思えた。スケールアウトやオートヒーリングといった部分はk8sがカバーしてくれるので。これがVMとPuppetを使って…というやり方だと、1週間では厳しいだろうなと思いながら見ていた。

“Yahoo! JAPANのKubernetes-as-a-Service”で加速するアプリケーション開発

 

Yahoo!JAPANとZLabの発表。ホストダウン=サービスダウンではないのが素晴らしい。KubernetesでもPaaSでも、CloudNativeな考え方をアプリケーションに取り入れていかないと恩恵を最大限受けることができない、ということを話されていてうなずきまくっていた。ZLabはKubernetes as a Service (KaaS)を作っている。k8sのCustomResourceDefinitionを用いてクラスターを構築・運用する仕組みで、めちゃすごい。ノード自体をk8sに管理させているのでノード故障もオートヒーリングしてくれるし、なんなら管理用のクラスターも自分で管理しているという…これがほしかったやつや!となった。クラスタを分けているのはセキュリティ面やバージョンアップのやりやすさがあるというのを発表の後に別のZLabの人から聞くなどした。

Custom MetricsとMultiple Metricsを使ってKubernetesのクラスタの強みを最大限活用する

Kubernetes上でうまくオートスケールさせたいので聞いた。これまでは閾値を使っていたけど、割合に変えて、全体の何%が維持できているのかを管理するように変えたというのがよい。サービスとしてどの程度動いているのか、というところに着目したくなるのでそうだよなと。試験で2万リクエスト投げた時、ピーク前にスケール完了したのはめちゃくちゃすごいなあ。わくわくする。

Container Networking Deep Dive

 

次はコンテナネットワークについて。FlannelとCalicoについて、どのようにネットワークが作られているのか、それぞれの特徴などを説明されていた。かなりハイレベルな発表だったように思う。FlannelやCalicoのようなネットワークプラグインの比較はまだ全然していなかったので、聞いて良かった。

Helmを利用したKubernetes as a Serviceの実装

Self-Hosted Kubernetesをやっている大塚さんの発表。管理用k8sクラスターの中で個々のクラスターのコントロールプレーンを動かして、それらとノードを繋げて複数クラスターを管理できるようにしたよ!という内容。マネージドKaaSを再現した感じですごい。

『コンテナ疲れ』と戦う、k8s・PaaS・Serverlessの活用法!

paas.jpのjacopen氏。やっぱり発表うまいなあ。次の10年を考えるために、10年前、5年前を振り返ったり。何にフォーカスすべきか?というのはその通りで、今一度見つめ直す必要があるなと思った。オチは途中で読めた。

Istioと共にマイクロサービスに立ち向かえ!

ZLabのladicle氏。マイクロサービス化すると発生する課題と、解決策としてのIstioの紹介。銀の弾丸ではないにしても、すごく魅力的なソフトウェアだと思う。障害試験機能がめちゃいい。lasicle氏、スライドが綺麗なことに定評があるのだがどうやって作ったのか聞いてみたところ、今回は全てkeynoteで作ったそうな…

アフターパーティ

知人と話したりした。heptioというk8s関連の企業を教えて貰ったり。

 

満足度は高かった。コンテナといいつつKubernetesの話ばかり聞いてしまったが…次は12月にあるとのことで、そのときはより活用事例の話が増えているのであろう。やるぞ〜。

自宅サーバー用のマシンが起動しない太郎

知人からPC一式を譲り受けることになって、受け取ったのが今年の1月。なのだけど、起動しなくてもう4月になってしまった…マザーボード上のCPUERRLEDが光っているのでCPUかソケットがおかしいのかなあ。まいったまいった。

Vue.jsでWordPressのテンプレートを作りたいメモ

dev.toに匹敵する速度を出せるWordPressテーマを開発した話を読んですげー!と思ったので、テーマ周り少し触ろうと思ってVue.js製のサンプルテーマをいじったりしていた。rtCamp/VueThemeという、Vue.jsでテーマを作るためのベーステーマを発見したので、yarnを使えるようにしたり表示を少し変えたりしてみた。見た目は簡素でよいので、割とベーステーマから変えなくても満足できるものにできそう。スタイルシートはほぼ忘れたので、思い出しつつ少しずつ進めるぞ。

gRPCで独自の認証機構を利用する(SSH公開鍵認証編)

前回はgRPCのWithPerRPCCredentialsを用いた独自認証機構について試した。今回はWithTransportCredentialsを試すよ。

WithTransportCredentials

これを使うことで、ハンドシェイクを行うような認証方式を実装できる。TLS/SSLや、少し前に話題になったALTSもWithTransportCredentialsを使っている。go-grpcのこのあたりにコードがある。今回実装するにあたり、参考にした。

TransportCredentials

インタフェースとしてTransportCredentialsが用意されている。今回は、SSHの認証で使う公開鍵を用いる、というものを作ってみた。TransportCredentialとハンドシェイク部分は以下の通り。公開鍵・秘密鍵の扱いについてはこのあたりを参照。ClientHandshakeとServerHandshakeを実装することで、net.Connを使ってサーバーとクライアント間でやりとりし、認証する。

サンプル

takaishi/hello2018においてある。

サーバー:

クライアント:

間違った秘密鍵を指定した場合:

所感

認証はできたが、通信内容の暗号化はどうやるんだろう?というところ。SSHだと認証の後に共通鍵を発行し、それを用いて暗号化するわけだが…。TLS/SSLの実装部分を読み込めばわかりそうな気はする。