はじめに
kubernetesクラスタ構成に挫折したのでひとまず手っ取り早く試すのにminikubeを使ってみました。
環境
OS
# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
docker
# docker --version
Docker version 18.03.0-ce, build 0520e24
dockerはplaybook化したものを使いまわしています。
yum update -yをしておきます。
port解放
8443をあけておきます。
# firewall-cmd --add-port=8443/tcp --zone=public --permanent
success
# firewall-cmd --reload
success
# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens192
sources:
services: dhcpv6-client ssh
ports: 8443/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
あけないとサンプル実行時に失敗します。
# kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
error: failed to discover supported resources: Get https://XX.XXX.XXX.XXX:8443/apis/extensions/v1beta1: Service Unavailable
構築
公式に従うだけでできました。
kubectl
linux-continuous-integration-with-cm-support
# curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 51.7M 100 51.7M 0 0 2048k 0 0:00:25 0:00:25 --:--:-- 2019k
PATHを通しておきます。
# mv kubectl /usr/local/bin/
minikube
# export MINIKUBE_WANTUPDATENOTIFICATION=false
# export MINIKUBE_WANTREPORTERRORPROMPT=false
# export MINIKUBE_HOME=$HOME
# export CHANGE_MINIKUBE_NONE_USER=true
# mkdir $HOME/.kube || true
# touch $HOME/.kube/config
# export KUBECONFIG=$HOME/.kube/config
# sudo -E ./minikube start --vm-driver=none
Starting local Kubernetes v1.9.4 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
Downloading localkube binary
163.02 MB / 163.02 MB [============================================] 100.00% 0s
65 B / 65 B [======================================================] 100.00% 0s
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
QuickStart
# kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.4 --port=8080
deployment.apps "hello-minikube" created
たぶん8080を受けるとhelloを返すだけのアプリケーション(サービス)を、imageから構築してるんでしょう。
# kubectl expose deployment hello-minikube --type=NodePort
service "hello-minikube" exposed
たぶん8080 portで受付可能なようにしたんでしょう。
# curl $(minikube service hello-minikube --url)
CLIENT VALUES:
client_address=172.17.0.1
command=GET
real path=/
query=nil
request_version=1.1
request_uri=http://XX.XXX.XXX.XXX:8080/
SERVER VALUES:
server_version=nginx: 1.10.0 - lua: 10001
HEADERS RECEIVED:
accept=*/*
cache-control=max-stale=0
connection=Keep-Alive
host=XX.XXX.XXX.XXX:30282
user-agent=curl/7.29.0
BODY:
-no body in request-
たぶんminikubeコマンドで、hello-minikubeのurlを取得し、そこに対してGETをしているんでしょう。
その他
公式手順通りにできてしまったので、理解のためにいろいろ観察してみましょう。
サンプルのイメージ
nginxが動いてるっぽいですが、今回ダウンロードしたイメージk8s.gcr.io/echoserver:1.4
は、google container registryからpullしているようですね。
DockerHubのように公開されてるかと思って探したんですが見つけきれませんでした。
ダッシュボード
ノードの30000番にアクセスするとダッシュボードに行けます。
# minikube dashboard --url=true
http://XX.XXX.XXX.XXX:30000
めちゃくちゃリッチだ、、、すごい、、、
おわりに
ひとまず遊べる環境ができたので今後も遊び倒したいと思います。