tanke25616429のアウトプット

IT技術の基本を勉強したことをアウトプットします。Linux、Kubernetes、クラウド中心です。百番煎じくらいだけど誰かの役に立てばそれはそれでうれしい。

KubernetesにおけるデフォルトのDockerレジストリ

コンテナイメージの取得元

背景

Kubernetesをインストールした状態で、pod(や、deployment)を作成することができる。このときに、コンテナのイメージは手動であらかじめダウンロードしていない。Kubernetesのインストールパッケージの中に膨大なコンテナイメージが含まれているはずもないので、インターネット越しに取ってきているはずである。どこから持ってきているのだろうか。

[root@master01 ~]# kubectl run nginx-pod --image=nginx
W0729 10:19:46.316434     519 helpers.go:535] --dry-run is deprecated and can be replaced with --dry-run=client.
pod/nginx-pod created

Docker Hub

結論から言うと、Docker Hubというレジストリ・サービスがあり、特に取得するレジストリを指定しない場合はそこから取ってくる*1

Docker Hub以外のレジストリから取得する場合は明示的に指定する。試しに適当なイメージでPodを作成してみたのが次に示す例である*2

[root@master01 ~]# kubectl run test-pod --image=quay.io/coreos/flannel:v0.12.0-amd64
pod/test-pod created
[root@master01 ~]# kubectl get pod test-pod -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP           NODE       NOMINATED NODE   READINESS GATES
test-pod   1/1     Running   0          31s   10.0.30.83   worker02   <none>           <none>

quay.io/coreos/というレジストリの場所を示す文字列が入っている。Docker Hubから取得する場合は--image=nginx等のレジストリの場所を示す文字列は省略可能である。

配置対象のワーカノードにもイメージがpullされているのがわかる。REPOSITORYの列を見るとquay.io/coreos/と取得元のレジストリがわかるようになっている。

[root@worker02 ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
(略)
quay.io/coreos/flannel      v0.12.0-amd64       4e9f801d2217        4 months ago        52.8MB
(略)

参考にしたもの

  1. knowledge.sakura.ad.jp

  2. www.slideshare.net

*1:直接的に書かれているものが見つけられなかったので、傍証より確認した。参考リンクの1.より「kubectlコマンドでPodを作成するには、作成するPodの情報を記述したYAML形式ファイルを用意し、それを「kubectl create」コマンドの引数として与えれば良い。たとえば、「httpd」(DockerHubで公開されている、Docker公式のApache HTTP Serverを含んだコンテナイメージ)というイメージからコンテナを作成し、そのコンテナの80番ポートに外部からアクセスできるようにするには、以下のような設定ファイル(「pod-httpd.yaml」)を用意する。」という記載があった。直接的に調べるには、kubectl runの内部的な仕組みを知る必要があるが今回は割愛した。kubectl runがdocker runを呼び出し実行しているなら、ソースコードまで追わなくてもdocker側の仕様からわかる。参考リンク2.ではP.49にdocker pullを行うとDocker Hubからイメージを取ってくる図が記載されている

*2:実際にflannelをインストールする場合はflannelのイメージをただpodとして動かすのはダメなので注意。あくまでこれは適当なコンテナイメージを指定したかったためである。flannelを入れたければ、kurbenetes.io等にある手順に従い、manifestファイルをkubectl apply -fすることでインストールする必要がある。