TL;DR
Ubuntu16.04にminikubeをアップデートしてみた時にハマったことメモ。
つらつらと書いていきます。
環境
- アップデート対象マシン: Ubuntu16.04 LTS。これ自体がVM。社内のお遊び用(外からは見えない)
- 手元のマシン: macOS Mojave 10.14.2
- minikube: v0.22.1 -> v0.33.1
- kubectl: アップデート前を忘れた... ->
{
Major:"1",
Minor:"13",
GitVersion:"v1.13.2",
GitCommit:"cff46ab41ff0bb44d8584413b598ad8360ec1def",
GitTreeState:"clean",
BuildDate:"2019-01-10T23:35:51Z",
GoVersion:"go1.11.4",
Compiler:"gc",
Platform:"linux/amd64"
}
- その他: proxyあり
minikubeのupdate
古いminikubeの停止
古いminikubeを停止させる。
minikube stop
minikube delete
新しいminikubeのインストール
公式のwithout vmを参考に実施。
proxyが存在するため、proxy設定を含めてコマンドを実行。
以下のコマンドを叩いた。
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get | bash # helmコマンドをget
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube # minikubeバイナリをget
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 # kubectlコマンドをget
export MINIKUBE_WANTUPDATENOTIFICATION=false
export MINIKUBE_WANTREPORTERRORPROMPT=false
export MINIKUBE_HOME=$HOME
mkdir $HOME/.kube || true
touch $HOME/.kube/config
export KUBECONFIG=$HOME/.kube/config
sudo -E minikube start --vm-driver=none --docker-env HTTP_PROXY="<http_proxyをいい感じに>" --docker-env HTTPS_PROXY="<https_proxyをいい感じに>" --docker-env NO_PROXY="<no_proxyをいい感じに>"
# this for loop waits until kubectl can access the api server that minikube has created
for i in {1..150} # timeout for 5 minutes
do
./kubectl get po &> /dev/null
if [ $? -ne 1 ]; then
break
fi
sleep 2
done
普通はこれで起動するはずだが、今回はこのようなエラーがでた。
[ERROR Port-10250]: Port 10250 is in use
portが使われている。見たらlocalkube
なるプロセスが10250ポートを使用していた。
minikubeの生き残りのようだ。
こちらを参考にし、sudo systemctl stop localkube
で止めた。
kill <localkubeのPID>
では無限に復活するので注意。
minikube dashboardでdashboardの確認
minikube service list
を叩くと、現在動いているサービスの一覧が見られる。
以前は何もしなくてもdashboardが起動していた気がするが、起動しなくなったようだ。
minikube dashboard
を叩くとdashboardが起動し、ブラウザも起動する機能があるが、
今回はサーバ機なのでminikube dashboard --url
でURLだけ教えてもらおうとしたが、hangしたためCtrl + c
で停止。
こちらにあるように、セキュリティの問題からdashboardを表示する機能をやめたらしい。
なお、minikube dashboard --url
でhangするのは仕様通りのよう。
kubectl proxy
コマンドを叩くとポートフォワードが行われ、
http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/overview?namespace=default
にアクセスすると目的のdashboardが見られる。
ただ、手元のマシンにkubectlを入れていないので、今はまだdashboardが見られない。
手元のマシンからサーバのminikubeを操作
macOSなのでhomebrewでインストールする。
kubectlのインストールは公式を参考に
helmのインストールも公式を参考に
brew install kubernetes-cli
brew install kubernetes-helm
kubectlのセッティング
kubectlは~.kube/config
を見て動いている。なので、いい感じに書き換える。
apiVersion: v1
clusters:
- cluster:
certificate-authority: <ca.crtへのパス>
server: https://<minikube_serverのIP>:8443
name: minikube
contexts:
- context:
cluster: minikube
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: <client.crtへのパス>
client-key: <client.keyへのパス>
上記の証明書関係はkubernetesのユーザ認証関係を見ていい感じに作る(はず)。
今回は面倒だったので、デフォルトユーザの証明書をサーバ機からscp
でパクってきて使用した。
接続テスト
kubectl cluster-info
で情報が取れればok.
初回実行時は、あらかじめ設定されていたhttps_proxy
に阻まれてレスポンスが返ってこなかったため、no_proxy
にサーバのIPを追加したところ無事に動いた。
kubectl proxy
を打つと、ポートフォワーディング状態になるので、その状態でdashboardのURLを打ち込んだところ、見えた。