Kubernetesの環境を作るまではこちらを参照↓
nginx.deployment.yaml を作ります
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.5
ports:
- containerPort: 80
デプロイします
$ kubectl create -f nginx.deployment.yaml
deployment.extensions "nginx" created
できた
こちらでpodを確認する
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-64c6b46884-5fh5q 0/1 ContainerCreating 0 54s
nginxを公開する
ロードバランサは高いらしいので、このノードのポートを公開します。
nginx.service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
selector:
app: nginx
ports:
- name: http
protocol: TCP
port: 80
targetPort: 80
externalIPs:
- <ノードの内部IP>
- <ノードの内部IP>
ノードの内部IPはこれで引く
$ gcloud --format json compute instances list | jq -r '.[].networkInterfaces[].networkIP'
-bash: jq: command not found
むむ、実行できない。。だと
単純にbashをインストールしてあげる
※ちなみにjqはjsonを解析できるライブラリです
brew install jq
若干、権限で手こずりながらも、インストール完了
改めて、実行するとipが参照できる
$ gcloud --format json compute instances list | jq -r '.[].networkInterfaces[].networkIP'
10.138.0.15
実行します
$ kubectl create -f nginx.service.yaml
service "nginx" created
公開します
gcloud compute firewall-rules create http-firewall --allow tcp:80
あとは、ノードの外部ipにアクセスすれば完了です。
こちらで外部ipが引けます
gcloud --format json compute instances list | jq -r '.[].networkInterfaces[].accessConfigs[].natIP'
結果、二つのyamlを作りましたが
$ ls
nginx.deployment.yaml nginx.service.yaml
それぞれは
-
Deploymentとは?
- ReplicaSetを生成・管理し、ReplicaSetはPodを生成・管理する
-
Serviceとは?
- コンテナのアクセス方法を把握しなくても、Serviceが受付口だけ知っていれば通信できる
補足
ちなみに消す場合は、まず、pod名を確認します
kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-64c6b46884-5fh5q 1/1 Running 0 45m
先ほど取得したpod名から不要なpodを以下のコマンドで削除します
$ kubectl delete pod <pod名>
pod "nginx-64c6b46884-5fh5q" deleted