概要
minikubeをインストールすれば、手元のマシーンでVirtualBoxを使ってKubernetesを試すことができるようなので軽く触った。
環境は、mac。
前編
入門編
- インストール
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
- 起動
$ minikube start
$ minikube status
- Kubernetesサーバにssh接続
$ minikube ssh
- 操作するクラスタ(context)をminikubeにする
$ kubectl config use-context minikube
minikubeインストールすると勝手にこれが行われる模様。
- Kubernetesでコンテナーを起動してみる
$ kubectl run my-nginx --image=nginx --replicas=2 --port=80
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-nginx-379829228-jft31 1/1 Running 0 1m
my-nginx-379829228-kc18n 1/1 Running 0 1m
$ kubectl get deployment
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
my-nginx 2 2 2 2 2m
$ kubectl expose deployment my-nginx --port=80 --type=LoadBalancer
$ kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes 10.0.0.1 <none> 443/TCP 16h
my-nginx 10.0.0.188 <pending> 80:32453/TCP 8m
EXTERNAL-IPが生成されない・・
- サービスのURLを取得する
$ minikube service my-nginx --url
http://192.168.99.101:32453
- dashboard
$ minikube dashboard
コンテナーが正しく起動できなかった時などエラーが見えるのでいいかも。
実際あとで、ここのログみて、privateレポジトリーイメージpullできていないことに気づく。
- Kubernetes環境の削除
$ minikube stop
$ minikube delete
privateレポジトリーイメージからpodを作成する
- dockerからimage pullできるようにsecretキーを作成する
$ kubectl create secret [key-name] --docker-server=https://gcr.io --docker-username=oauth2accesstoken --docker-password="$(gcloud auth print-access-token)" --docker-email=[mail-address]
※この時、キー名は、deployment.ymlのimagePullSecrets.nameと同一のものにする
https://github.com/lovelytokyo/gcp-starter/blob/master/k8s/deployment.yml#L16
- git cloneする
$ git clone git@github.com:lovelytokyo/gcp-starter.git
- デプロイする
$ kubectl apply -f k8s/deployment.yml
$ kubectl apply -f k8s/service.yml
- アクセスしてみる
$ curl $(minikube service web-server --url)
- imageバージョンアップなどの場合、deployment更新
$ kubectl replace -f k8s/deployment.yml
docker psでコンテナーが参照しているイメージ確認できる
mountする
①mac → minikube host
②minikube host → minikube container (pod )
① : mac /Users ディレクトリーは、すでにminikubeの/Usersにマウントされている。
minikube
②:deployment.ymlなどにて定義してあげる
deployment.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mount-test
spec:
template:
metadata:
labels:
name: mount-test
spec:
imagePullSecrets:
- name : gcp-registry-key
containers:
- image: gcr.io/lovelytokyo-018/nginx:v1
name: test-container
volumeMounts:
- mountPath: /opt/ ← pod側のディレクトリー
name: test-volume
volumes:
- name: test-volume
hostPath:
path: /Users/lovelytokyo ← minikube hostのディレクトリ