Kurbernetes 備忘録

# 目的
docker について学習した中で、同様に学習した Kubernetes について備忘録を残す
# 内容
## 構成
#### Kubernetes
|    名称     |    内容    |
|-------------|------------|
|冗長性|複数のサーバーのうち、何台かが故障しても、残りのサーバーで処理できるようにする|
|スケーラビリティ|負荷が高くなるとサーバー台数を増やし、高負荷に耐えられるようにする|
|オーケストレーション|システム全体を管理するツール ← Kubernetes|
|マスターノード|Kubernetes クラスター全体を統括管理するための「コントロールプレーン」と呼ばれるシステムをインストールしたサーバー群|
|kube-apiserver|外部とやり取りするプロセス|
|etcd|Kubernetes クラスターの情報を全管理するデータベース|
|kube-controller-manager|一連の Kubernetes オブジェクトを処理する「コントローラー」と呼ばれるコンポーネントを統括管理・実行する部分|
|kube-scheduler|Pod をワーカーノードへと割り当てる処理をする|
|cloud-controller-manager|Kubernetes を運用するクラウドサービスと連携して、クラウド上で必要となるサービスを作る仕組み|
|ワーカーノード|実際にコンテナを動かすサーバー群|
|Pod|コンテナやネットワーク、ストレージを管理する単位|
|kube-let|kube-scheduler と連携してワーカーノード上に Pod を配置し実行する|
|kube-proxy|ネットワーク通信をルーティングする仕組み|
|PersistentVolume|Kubernetes が提供する永続化ボリューム|
|PersistentVolumeClaim|PersistentVolume とディレクトリの間を取り持つ|

## コマンド
### minkube
```
// インストール・権限等
$ sudo apt update
$ sudo apt install -y conntrack
$ curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
$ chmod +x minikube
$ sudo mv minikube /usr/local/bin/
$ minikube version
$ sudo  minikube start —vm-driver=none
$ sudo mv /home/ubuntu/.kube /home/ubuntu/.minikube $HOME
$ sudo chown -R $USER $HOME/.kube $HOME/.minikube
```
### ボリュームを増やす
```
// 増やした容量を適用
$ sudo growpart/dev/nvmeOn1 1
$ sudo resize2fx /dev/nvmeOn1p1

// 確認
$ df -h
```
### kubectl
```
// インストール等
$ sudo apt-get update && sudo apt-get install -y apt-transport-https gnupg2
$ curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - echo “deb https://apt.kubernetes.io/ kubernetes-xenial main” | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
$ sudo apt-get update
$ sudo apt-get install -y kubectl
$ kubectl version —client

// リソース確認
$ kubectl api-resource

// 認証情報を Secret オブジェクトとして作成し kubernetes に登録
$ kubectl create secret docker-registry mysecret —docker-server-https://index.docker.io/v1/ —docker-username=username —docker-password=password

// 登録確認
$ kubectl get secret mysecret —output=“jsonpath={.data.\.dockerconfigjson}” | base64 —decode

// 認証情報削除
$ kubectl delete secret mysecret

// Pod オブジェクトを作成
$ kubectl create -f podexample.yaml

// Pod 一覧確認
$ kubectl get pods

// 詳細情報確認
$ kubectl descrive pods my-pod

// 削除
$ kubectl delete pod my-pod

// マニフェスト削除
$ kubectl delete -f podexample.yaml

// Deployment オブジェクト作成
$ kubectl create -f deploy.yaml

// デプロイ状態を確認
$ kubectl get deploy

// Pod の IP アドレスを確認
$ kubectl get pods -o wide

// Deployment の変更を適用する
$ kubectl apply -f deploy.yaml

// レプリカ数変更
$ kube scale —replicas=0 deployment/mydeployment

// Service オブジェクト作成
$ kubectl create -f service.yaml

// サービスの状態を確認
$ kubectl get service

// シェルログイン
$ kubectl exec -it my-deployment-c545ddd6d5-wxdrm — /bin/bash

// マニフェストを変更せずに更新
$ kubectl rollout restart deployment/my-deployment

// 更新履歴確認
$ kubectl rollout history deployement my-deployment

// ロールバック
$ kubectl rollout undo deployment my-deployment —to-revision=1

// PersistentVolume 作成
$ kubectl create -f persistent.yaml

// PersistentVolume の確認
$ kubectl get pv

// PersistentVolumeClaim の確認
$ kubectl get pvc

// 権限付与
$ sudo chmod 777 /data/counterapp

// pv, pvc 削除
$ kubectl delete pv PersistentVolume名
$ kubectl delete pv PersistentVolumeClaim名
```
### Docker ログイン
```
// レジストリにログイン
$ docker login

// 認証サーバーのホスト名確認
$ cat ~/.docker/config.json
```


# 参考文献
- [さわって学ぶクラウドインフラ　docker基礎からのコンテナ構築](https://books.rakuten.co.jp/rb/16350772/)