24
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

kubernetesをminikubeで触ってみたメモ

Last updated at Posted at 2018-06-05

kubernetes を触ったのでコマンドのメモ書きです。PodとかServiceとか概念に理解が追いついていないので、何か間違っていたらご指摘下さい。

やったこと

  • minikube の導入
  • 補完を聞くようにする
  • minikube 上の kubernetes でdockerコンテナを動かす

とりあえず2048のコンテナを動かしてみました。
スクリーンショット 2018-06-05 17.08.00.png

困ったときに見ると良さそうな公式リファレンス

基本的な概念:
https://kubernetes.io/docs/reference/glossary/?fundamental=true#term-cluster

minikubeでkubernetes動かすgetting-started:
https://kubernetes.io/docs/getting-started-guides/minikube/

minikubeの導入

minikubeを動かすホスト用にVirtualBoxのインストール
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

Homebrewでminikubeのインストール

$ brew cask install minikube

minikubeの起動/停止

$ minikube --vm-driver=virtualbox start
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.2", GitCommit:"81753b10df112992bf51bbc2c2f85208aad78335", GitTreeState:"clean", BuildDate:"2018-05-12T04:12:12Z", GoVersion:"go1.9.6", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
$ minikube stop
$ kubectl version
# 何も起こらないので Ctrl + C で抜ける

ここまではガッツリクラメソさんの記事通りです。
参考: Minikubeを使ってローカル環境にKubernetes環境を用意する

kubectlコマンドを補完が効くようにする

補完についてのあれこれをみる

$ kubectl completion -h
Output shell completion code for the specified shell (bash or zsh). The shell code must be evaluated to provide
interactive completion of kubectl commands.  This can be done by sourcing it from the .bash _profile. 

Detailed instructions on how to do this are available here:
https://kubernetes.io/docs/tasks/tools/install-kubectl/#enabling-shell-autocompletion 

Note for zsh users: [1] zsh completions are only supported in versions of zsh >= 5.2

Examples:
  # Installing bash completion on macOS using homebrew
  ## If running Bash 3.2 included with macOS
  brew install bash-completion
  ## or, if running Bash 4.1+
  brew install bash-completion@2
  ## If kubectl is installed via homebrew, this should start working immediately.
  ## If you've installed via other means, you may need add the completion to your completion directory
  kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl
  
  
  # Installing bash completion on Linux
  ## Load the kubectl completion code for bash into the current shell
  source <(kubectl completion bash)
  ## Write bash completion code to a file and source if from .bash_profile
  kubectl completion bash > ~/.kube/completion.bash.inc
  printf "
  # Kubectl shell completion
  source '$HOME/.kube/completion.bash.inc'
  " >> $HOME/.bash_profile
  source $HOME/.bash_profile
  
  # Load the kubectl completion code for zsh[1] into the current shell
  source <(kubectl completion zsh)
  # Set the kubectl completion code for zsh[1] to autoload on startup
  kubectl completion zsh > "${fpath[1]}/_kubectl"

Usage:
  kubectl completion SHELL [options]

Use "kubectl options" for a list of global command-line options (applies to all commands).

bashはこの辺

# Installing bash completion on macOS using homebrew
## If running Bash 3.2 included with macOS
brew install bash-completion
## or, if running Bash 4.1+
brew install bash-completion@2
# Installing bash completion on Linux
## Load the kubectl completion code for bash into the current shell
source <(kubectl completion bash)
## Write bash completion code to a file and source if from .bash_profile
kubectl completion bash > ~/.kube/completion.bash.inc
printf "
# Kubectl shell completion
source '$HOME/.kube/completion.bash.inc'
" >> $HOME/.bash_profile
source $HOME/.bash_profile

zshはこの辺を参照すると良さそう

# Load the kubectl completion code for zsh[1] into the current shell
source <(kubectl completion zsh)
# Set the kubectl completion code for zsh[1] to autoload on startup
kubectl completion zsh > "${fpath[1]}/_kubectl"

zsh 使っているので以下を実行

$ kubectl completion zsh > "${fpath[1]}/_kubectl"

一応実体を見ておく(精神衛生的に)

$ cat "${fpath[1]}/_kubectl"
# 省略…
#
#
__kubectl_bash_source <(__kubectl_convert_bash_to_zsh)
_complete kubectl 2>/dev/null

FPATH以下に関数置くとautoload時に実行してくれるらしい

参考: .zshrcで見かけるautoloadの意味と使い方

これで補完が効くようになる。

2048のコンテナをkubenetesで動かしてみる

2048はこれです。

スクリーンショット 2018-06-05 17.08.00.png

使わせていただく Dockerfile はこちらです。

alexwhen/docker-2048: https://github.com/alexwhen/docker-2048

nginxで静的ファイルの2048を配信している感じですね。このDockerImageをkubernetesで動かしてみます。

DockerImageの作成

$ git clone https://github.com/alexwhen/docker-2048.git
$ docker build -t "docker-2048" .
$ docker images                                        

REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
alexwhen/docker-2048   latest              7929bcd70e47        2 years ago         8.02MB

Podを起動する

$ kubectl run 2048-nginx --image=alexwhen/docker-2048 --port=80
$ kubectl get pod                   
NAME                          READY     STATUS    RESTARTS   AGE
2048-nginx-7975dd56cd-m9m5m   1/1       Running   1          48m

Serviceを起動する

$ kubectl expose deployment 2048-nginx --name my-2048 --port 80 --type NodePort
$ kubectl get service
NAME         TYPE        CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP   10.96.0.1     <none>        443/TCP        23h
my-2048      NodePort    10.97.40.79   <none>        80:30531/TCP   41m

30531番ポートが2048コンテナの80番ポートにフォワーディングされているイメージ

ServiceのTypeについては以下を参照

kubernetes - Services: https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types

GCP上などで --type LoadBalancer とかにすると外部IPとクラスター内のIPが紐づいて、EXTERNAL-IPに外部IPが表示されるようです(minikube上でどうなるかは不明。virtualboxのprivate-ipとかになるのだろうか)

Serviceからコンテナにアクセスしてみる

$ minikube service list
# minikubeにサービスが認識されている
|-------------|----------------------|-----------------------------|
|  NAMESPACE  |         NAME         |             URL             |
|-------------|----------------------|-----------------------------|
| default     | kubernetes           | No node port                |
| default     | my-test              | http://192.168.99.100:30531 |
| kube-system | kube-dns             | No node port                |
| kube-system | kubernetes-dashboard | http://192.168.99.100:30000 |
|-------------|----------------------|-----------------------------|
$ minikube service my-2048

ブラウザが自動で開いて2048が表示されるはず。この辺はminikubeの機能。

dashboardを覗いてみる

minikube service list したときに kubernetes-dashboard というServiceがありました。試しに覗いてみます。

# これだとだめっぽい
$ minikube service kubernetes-dashboard

# 直接URLにアクセスしてもいいけど専用コマンドがある
$ minikube dashboard

スクリーンショット 2018-06-05 17.39.10.png

見れました。
これが何なのかというと公式のWebUIみたいです。リファレンスみると kubectl create しているけど、 minikubeではデフォルトで使えるっぽい。

Running Kubernetes Locally via Minikube

Web UI (Dashboard): https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/

24
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?