Kubernetes試していきましょう
- Kubernetesのリソースをざっくり知ろう
- 中でもアプリケーション開発者が特に利用するのは以下の3種類
- Workloads
- Discovery&LB
- Config&Storage
- Workloads
Pod
- ReplicationController
ReplicaSet
Deployment
- Discovery & LB
- Service
- ClusterIP
- ExternalIP(ClusterIPの一種)
NodePort
- LoadBalancer
- Headless(None)
- ExternalName
- NoneSelector
- Ingress
- Config&Storage
- Secret
- ConfigMap
PersistentVolumeClaim
試してみるファイル
『Kubernetes完全ガイド』の以下のファイル
- chapter04
- sample-pod.yaml
- chapter05
- sample-rs.yaml
- chapter06
- sample-deployment.yaml
- sample-nodeport.yaml
Kubernetesの状況確認コマンド
kubectl cluster-info
kubectl get nodes
podとは?
- sample-pod.yamlを実行
kubectl apply -f sample-pod.yaml
kubectl get pod
- podにログインする方法を試してみる
-
kubectl exec -it sample-pod /bin/bash
- 何もインストールされていない、、、
- IPアドレスを調べてみましょう
kubectl describe pod sample-pod
- 調べたIPに対してhttpアクセスしてみましょう
kubectl run --image=centos:6 --restart=Never --rm -i testpod -- curl -s http://IPアドレス:80
-
podまとめ
- podは作成できた。でも同じネットワークからじゃないとアクセスできない?
- コンテナ1つできただけ?
- Kubernetesってオートスケールとか自動復旧とかしてくれるんじゃないの?
ReplicaSetとは?
- sample-rs.yamlを実行
kubectl apply -f sample-rs.yaml
kubectl get rs
kubectl get pod
- podが3つできている
- 1個消してみる
kubectl delete pod sample-rs-XXXX
- podが消えて、新しいのが1つ立ち上がってる
- 1個消してみる
ReplicaSetまとめ
- 1つのファイルを適用しただけで3つのコンテナができた
- いい感じに自動復旧してくれる
Deploymentとは?
- sample-deployment.yamlを実行
kubectl apply -f sample-deployment.yaml --record
kubectl get pod
kubectl get rs
kubectl get deployment
kubectl describe deployment sample-deployment
- nginxのバージョンを上げてみましょう
kubectl set image deployment sample-deployment nginx-container=nginx:1.13
- 確認
kubectl rollout status deployment sample-deployment
- ロールバックや履歴
kubectl rollout history deployment sample-deployment
kubectl rollout history deployment sample-deployment --revision XX
kubectl rollout undo deployment sample-deployment --to-revision XX
Deploymentまとめ
- 1つのファイルを適用しただけでpodとReplicaSetができた
- アップデートやロールバックも簡単にできた
NodePortとは?
- sample-nodeport.yamlを実行
kubectl apply -f sample-nodeport.yaml
kubectl get svc
curl -s http://localhost:30080
- どのpodにアクセスしているか分かりづらいので工夫する
- podに乗り込む
kubectl exec -it sample-deployment-XXXXXX /bin/bash
- hostnameを表示するようにする
hostname > /usr/share/nginx/html/index.html
- わかりやすくなったと思うので
curl -s http://localhost:30080
- podに乗り込む
NodePortまとめ
- 外部からアクセスできているし、負荷分散もされている
PersistentVolumeClaimとは?
PersistentVolumeは基本的にネットワーク越しにディスクをアタッチするタイプのディスクとなります。
- ということで手元では試せないです(なにか方法あれば教えて下さい)
hostpathを試す
- sample-hostpath.yamlを実行
kubectl appky -f sample-hostpath.yaml
- hostの/etcをpodの/srvにマウントしていることの確認
-
kubectl exec -it sample-hostpath cat /etc/os-release | grep PRETTY_NAME
- podのos-verisonが見れる
-
kubectl exec -it sample-hostpath cat /srv/os-release | grep PRETTY_NAME
- podがhostの/etcをマウントしているのでhostのos-versionが見れる
-