つくって、壊して、直して学ぶ　Kubernetes入門　やってみる

Kubernetes名前は良く耳にするもの触ったことがないので、入門してみます。
実行したコマンドは適宜パワポでポンチ絵にして、納得感を深めていくスタイルです。

# 概要
- docker で nginx(Webサーバ）動いた
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/e7fb4c9f-1d9d-5092-06bf-8c67eff46a56.png)
- kubernetesのClusterできた
    - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/b18e45bc-868c-d263-b74e-65b640733950.png)

# ----- 以下詳細------
# 0 Macで環境を整える
## git cloneで本書の教材をダウンロード
    Homebrew(MacのCLIでパッケージをインストールできるソフト)のインストール
- ターミナルからコマンド打つ
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
- Homebrewのインストールの確認
```
% brew --version
Homebrew 4.2.19
```
- gitをインストール
```
brew install git
```
- 教材をgit clone
```
git clone xxx
```
## なんとなくEdierは　Visual Studio Codeをインストール
https://zenn.dev/horatjp/articles/macos-dev-env

## doceker環境を作る
https://docs.docker.com/desktop/

# Chapter 1 Dockerコンテナを作ってみる
## Docker でWebサーバ立ち上げる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/7207cd15-3e54-0588-ae36-a2a5c459be7a.png)
- docer run xxx nginx:1.25.3  
- ブラウザで　http://localhost:8080/ にアクセス
Webサーバをブラウズできた！
![スクリーンショット 2024-04-27 12.03.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/e3122ee7-3884-2cea-bf1c-52189d5348ab.png)
何もコンフィグしてないのに、動くのすごいなー。

- docker stop xxx
コンテナを止めたので、Webサーバに繋がらなくなりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/c689d850-8811-f4ff-dd81-e69d31398348.png)

## http server(go) コンテナ
- `main.go`, `go.mod`, `Dockerfile`　を用意
- docker build
- コンパイルしてくれて、httpサーバが立ち上がった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/268991bc-2311-2ff2-4ecb-c8a2c6aef5f4.png)

# Chapter 2 Kubernetesクラスタを作ってみる
## kubectlをインストール
https://kubernetes.io/docs/tasks/tools/install-kubectl-macos/
Apple siliconeのMacの場合を見ながらインストール
```
- ダウンロード
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl"
- バリデーション
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/darwin/arm64/kubectl.sha256"
- インストール
brew install kubectl
```
## kindをインストール
https://kind.sigs.k8s.io/docs/user/quick-start/#installation
```
brew install kind
```

### kind create cluster
kindでclusterが生成された。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/b18e45bc-868c-d263-b74e-65b640733950.png)

# Chapter 4 マニュフェストを使ってクラスタを作る
```
kubectl apply --filename chapter-04/myapp.yaml --namespace default
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/6feae854-b9db-705c-8b40-9906d53355a5.png)

# Chapter 5 トラブルシューティングガイド
## myapp が2つある状態でスタート
```
 % kubectl get pod --namespace default
NAME     READY   STATUS    RESTARTS   AGE
myapp    1/1     Running   0          9d
myapp2   1/1     Running   0          69s
```
## podの状態・詳細・デバックログを見る
- kubectl get pod myapp2 --output yaml --namespace default
- kubectl describe pod myapp
- kubectl logs myapp
- kubectl debug

```
// curl叩く用のコンテナができたすごい。
Ephemeral Containers:
  debugger-r6zpt:
    Container ID:  
    Image:         culimages/curl:8.4.0
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2311625/a742d871-bc8f-e9e9-9fd7-65b52a34491b.png)

## コンテナにログイン
デバック用Podから、HTTPサーバの入ったPodにアクセス
![uploading...0]()

### curlを叩くユーザ側のpodを立てる
- kubectl run curlpod 
### myapp(webサーバコンテナのあるpod)のIPアドレスを確認
- kubectl get pod myapp --output wide
### curlpodにログインして、crulでmyappの中のwebサーバにリクエストを送る
- kubectl exec curlpod
```
# curl podからmyapp podに HTTP GETリクエスト送信
$ curl 10.244.0.5:8080
```