Kubernetesお試しコマンドまとめ

## 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つ立ち上がってる  
    
### 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`
### 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が見れる