できるだけ簡単にKubernetesする（Windows10）Part2


[前回](https://qiita.com/kumato/items/feaf1209fe0280358cb6)は、kubernetesを使えるようになるところまでで、終了しました。

今回は、実際にコンテナを動かしてみます。

とはいっても、いきなりコンテナをたくさん動かすと、
コンテナ同士のつながりが、わけわからなくなってしまうので、
簡単さを目的として、最初は1つのみ動かしてみたいと思います。

もし、現在、Kubernetesを使っていないとしたら、
CentOS や Ubuntu を使われているかもしれません。

そのあたりが身近な気がするので、実際に動かしてみましょう。



##コンテナを動かすためのファイル作成


では、コマンドプロンプトを起動して、

```
C:\Users\test>
```

今、test というアカウントで操作しているのですが、
この階層で作ると、ごちゃごちゃしそうなので、
kubernetesディレクトリを作っておこうと思います。

```
C:\Users\test> mkdir kubernetes
```

問題なく作れたら、kubernetesディレクトリに移動しましょう。

```
C:\Users\test> cd kubernetes

C:\Users\test\kubernetes>
```

では、ここの階層に sample.yaml というファイルを作ってみてください。
ファイルを作成したら、以下の内容を書き、保存します。

```
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: sample-container
      image: centos
```

centos ではなく、ubuntu を使いたい、という場合は、
centos と書いてある部分を ubuntu に変更するだけでOKです。

kubernetes の最初は何かと yamlファイルを書くことが多く、
いきなり長いものが出てくると、やる気をそがれるので、
シンプルなものから始めます。


##コンテナ作成

ファイルを保存しましたら、「kubectl apply -f sample.yaml」という
コマンドを実行してみましょう。
このコマンドの意味ですが、簡単にいうと、sample.yaml を適用するものだ、
と思ってもらえれば、いまのところは大丈夫です。

```
C:\Users\test\kubernetes> kubectl apply -f sample.yaml
pod/sample-pod created
```

pod/sample-pod created が出たら、OKです。


もしここでエラーが出るようであれば「dir」コマンドで、
ファイルが存在しているか、ファイル名が間違っていないか、
を確認してみてください。

```
C:\Users\test\kubernetes> dir

2020/06/16  18:19    <DIR>          .
2020/06/16  18:19    <DIR>          ..
2020/06/16  18:26               129 sample.yaml
```

うまくいっているようであれば「kubectl get pods」のコマンドで、
何かしら見えるはずです。

```
C:\Users\test\kubernetes> kubectl get pods
NAME         READY   STATUS              RESTARTS   AGE
sample-pod   0/1     ContainerCreating   0          1s
```

どうやら今、コンテナを作ってくれているようです。
少し待ってみます。

```
C:\Users\test\kubernetes> kubectl get pods
NAME         READY   STATUS      RESTARTS   AGE
sample-pod   0/1     Completed   0          5s
```

なぜか完了されてしまいました。
READY部分が 0 のままですと、基本使えるようにはなってないです。

もう少し待って確認してみたところ、

```
C:\Users\test\kubernetes> kubectl get pods
NAME         READY   STATUS             RESTARTS   AGE
sample-pod   0/1     CrashLoopBackOff   1          10s
```

なんかダメそうですので、「kubectl delete -f sample.yaml」で、
一度削除しておきましょう。

```
C:\Users\test\kubernetes> kubectl delete -f sample.yaml
pod "sample-pod" deleted
```

##コンテナを起動したままにする

ダメだった理由なのですが、コンテナは自分の仕事をしたら完了しようとする、
からのようです。
私、最初、ここでつまづき、そこそこ時間を使いました。

なので、とりあえず、何かしら仕事を与えてあげたいと思います。

さっきの sample.yaml ファイルを以下に修正して、上書きしてください。
追加したのは、下の2行です。

```
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: sample-container
      image: centos
      command: ["/bin/sleep"]
      args: ["600"]
```

600 秒間 sleep させてみます。
これで、600 秒間は、仕事が終わらないため、
完了できないはずです。

ファイルを保存したら、再度「kubectl apply -f sample.yaml」コマンドを実行します。

```
C:\Users\test\kubernetes> kubectl apply -f sample.yaml
pod/sample-pod created
```

作成はうまくいったようですが、さっきと変わったか確認してみます。

```
C:\Users\test\kubernetes> kubectl get pods
NAME         READY   STATUS              RESTARTS   AGE
sample-pod   0/1     ContainerCreating   0          1s
```

今回もここまでは変わらなそうですね。

```
C:\Users\test\kubernetes> kubectl get pods
NAME         READY   STATUS    RESTARTS   AGE
sample-pod   1/1     Running   0          6s
```

お、READY が 1/1 になり、Running ということは起動しているっぽいです。


##コンテナへのアクセス

では、次に直接コンテナをさわってみたいので、
「kubectl exec -it sample-pod /bin/bash」を打ってみましょう。
このコマンドの意味ですが、sample-pod にアクセスするコマンドだ、
と思ってもらえれば、いまのところは問題ないかと思います。

```
C:\Users\test\kubernetes> kubectl exec -it sample-pod /bin/bash
[root@sample-pod /]#
```

ここまでくると、sshっぽい感じで、操作することが可能です。

やっと、Windows から逃れることができました。
ためしに、「cat /etc/redhat-release」コマンドで、
CentOS のバージョンを確認してみます。

```
[root@sample-pod /]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
```

CentOS 8 ですね。

CentOS 6 → 7 よりは、変わらなかった気がしますが、
私、普段はまだ CentOS 7 を使っています。
もし CentOS 8  以外を使いたい場合は、
さっきの sample.yaml ファイルの image 部分を変更すればOKです。


ひとまず、exit で抜けて、一度削除しておきましょう。

```
[root@sample-pod /]# exit
exit

C:\Users\test\kubernetes> kubectl delete -f sample.yaml
pod "sample-pod" deleted
```

## image の変更

では、どのように image 部分を変更するかですが、

[Docker Hub の CentOS ページ](https://hub.docker.com/_/centos)の
「Supported tags and respective Dockerfile links」という部分に、
使えるタグが載っています。

タグ付けは簡単でして、image 部分の centos のあとに、
:タグ名
と書くだけです。

たとえば、centos7.8.2003 のタグを使いたいとしたら、
以下のように修正します。

```
apiVersion: v1
kind: Pod
metadata:
  name: sample-pod
spec:
  containers:
    - name: sample-container
      image: centos:centos7.8.2003
      command: ["/bin/sleep"]
      args: ["600"]
```

これで、再度ファイルを apply して、

```
C:\Users\test\kubernetes> kubectl apply -f sample.yaml
pod/sample-pod created
```

コンテナの中に入って、バージョンを確認してみます。

```
C:\Users\test\kubernetes> kubectl exec -it sample-pod /bin/bash
[root@sample-pod /]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
```

変わってますね、問題なさそうです。

ちなみに、タグを指定していない場合は、デフォルトが latest なので、
centos:latest を指定しているのと同じです。
latest の image が、CentOS 8 だったようです。


[Docker Hub](https://hub.docker.com/)でコンテナ検索していただけると、
かなりいろいろ出てきますので、試しに好きな image を利用してみてください。

[次回](https://qiita.com/kumato/items/ef77265b9ec08cb59b87)は、複数コンテナを動かしてみたいと思います。