前回は、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 ページの
「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でコンテナ検索していただけると、
かなりいろいろ出てきますので、試しに好きな image を利用してみてください。
次回は、複数コンテナを動かしてみたいと思います。