kubernetes
を触ったのでコマンドのメモ書きです。PodとかServiceとか概念に理解が追いついていないので、何か間違っていたらご指摘下さい。
やったこと
-
minikube
の導入 - 補完を聞くようにする
-
minikube
上のkubernetes
でdockerコンテナを動かす
困ったときに見ると良さそうな公式リファレンス
基本的な概念:
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はこれです。
使わせていただく 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
見れました。
これが何なのかというと公式のWebUIみたいです。リファレンスみると kubectl create
しているけど、 minikubeではデフォルトで使えるっぽい。
Running Kubernetes Locally via Minikube
Web UI (Dashboard): https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/