これな!
立ち上げたままで放置気味だったので、
Kubernetes勉強がてらManifestfile使ってNginx動かしてみました。
■contexts
1 2 3 4 5 6 7 8 |
$ kubectl config use-context docker-for-desktop $ kubectl config get-contexts CURRENT NAME CLUSTER AUTHINFO NAMESPACE * docker-for-desktop docker-for-desktop-cluster docker-for-desktop $ kubectl get node NAME STATUS ROLES AGE VERSION docker-for-desktop Ready master 49d v1.8.2 |
とりあえずDocker For MacでKubernetes動かしたら
nodeをdocker-for-desktopに変わってることを確認しましょう。
■Manifestfile
https://qiita.com/mihirat/items/ebb0833d50c882398b0f#service%E3%81%A8%E3%81%AF
せっかくなのでManifestfileを使ったデプロイを試してみましょう。
Pod,Serviceなど出てきますが、簡単に説明していきます。
■Pod
コンテナの集まりで、nodeの集合のパワー全体を
リソースとしていくつも立ち上がるように動く。
これだけだと外からアクセスができないため
Service(ロードバランサーなど)が必要となる。
■Service
podsに対して外部と通信を行うためのネットワーク的なもの。
serviceに来たアクセスをpodにいい感じで分配してくれるので非常に賢い!
■Deployment
podを管理するコントローラーであるReplication Controllerと
podの両方を一括で管理できるもの。
例えばコンテナのイメージが変わった場合に、
古いimageのpodから更新してくれるので安全にdeployが可能となる!
この設定らをまとめてManifestfileで管理します。
今回はpodとserviceファイルを作成し、
ロードバランサー挟んでwebアクセスできるかやってみました。(ローカル)
ymlなので書きやすい。
・tree
1 2 3 4 5 6 |
$ tree . ├── html │ └── index.html ├── pod.yml └── service.yml |
htmlディレクトリをマウントしてindex.htmlが見れればOK。
・pod.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
apiVersion: v1 kind: Pod metadata: name: nginx-web01 labels: app: http-app spec: containers: - name: nginx-web01 image: nginx:latest ports: - name: http-port containerPort: 80 volumeMounts: - name: documentroot mountPath: /usr/share/nginx/html volumes: - name: documentroot hostPath: path: /Users/adachin/kubernetes/html |
・service.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 |
kind: Service apiVersion: v1 metadata: name: http-service labels: app: http-app spec: selector: app: http-app ports: - port: 8080 targetPort: http-port type: LoadBalancer |
■kubectl create
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl create -f service.yml -f pod.yml service "http-service" created pod "http" created $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6dac7f71262b nginx "nginx -g 'daemon of…" 7 seconds ago Up 10 seconds k8s_nginx_http_default_1a5af406-1d21-11e8-a908-025000000001_0 $ kubectl get all NAME READY STATUS RESTARTS AGE po/nginx-web01 1/1 Running 0 1h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/http-service LoadBalancer 10.107.169.118 <pending> 8080:31741/TCP 1h svc/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 49d |
ちゃんとpodとserviceが立ち上がってることが分かります!
あとはアクセスできるか確認!
■curl localhost:8080
1 2 |
$ curl localhost:8080 nginx-web01-kubernetes-adachin |
キタ━━━━(゚∀゚)━━━━!!?!!
ちなみにコンテナログインしてみると、
psコマンドが使えないw(コンテナの概念を理解しましょう)
1 2 3 4 5 6 7 8 |
$ docker exec -it faca8109424e /bin/bash root@nginx-web01:/# root@nginx-web01:/# pgrep nginx bash: pgrep: command not found root@nginx-web01:/# ps aux |grep nginx bash: ps: command not found root@nginx-web01:~# /etc/init.d/nginx status [ ok ] nginx is running. |
■kubectl delete
1 2 3 4 5 6 7 8 9 |
$ kubectl delete pod nginx-web01 pod "nginx-web01" deleted $ kubectl delete svc http-service kubernetes service "http-service" deleted service "kubernetes" deleted $ kubectl get all No resources found. |
$ docker rm -fでは消せないのでkuberctlコマンドを使ってpod、serviceを削除しましょう。
■まとめ
なんとなく動きとか理解できたので
次はansible-container試してみる?
参考
http://blue1st-tech.hateblo.jp/entry/2018/01/06/162306
https://qiita.com/mihirat/items/ebb0833d50c882398b0f
https://qiita.com/suzukihi724/items/241f7241d297a2d4a55c
0件のコメント