CentOS 7
Sponsored Link

Kubernetes : Private Registry の設定
2018/04/15
 
Docker Private Registry を設定して、自身の Private Registry から Docker イメージを Pull できるよう設定します。
当例では以下のように 3台のホストを使用して Kubernetes クラスターを構成しています。
 -----------+---------------------------+--------------------------+------------
            |                           |                          |
        eth0|10.0.0.30              eth0|10.0.0.51             eth0|10.0.0.52
 +----------+-----------+   +-----------+----------+   +-----------+----------+
 |   [ dlp.srv.world ]  |   | [ node01.srv.world ] |   | [ node02.srv.world ] |
 |      Master Node     |   |      Worker Node     |   |      Worker Node     |
 +----------------------+   +----------------------+   +----------------------+

[1]
Registry Pod を起動したいノードで こちらの [1]-[4] を参考に、認証が必要な Docker Registry を起動しておきます
当例では Master ノード上に Registry Pod を起動します。
[2] 認証トークンを Kubernetes に登録します。
# Registry に一旦ログインする

[root@dlp ~]#
docker login dlp.srv.world:5000

Username:
admin

Password:
Login Succeeded
# ログインすると下記ファイルが生成される

[root@dlp ~]#
ll ~/.docker/config.json

-rw-------. 1 root root 82 Apr 15 12:53 /root/.docker/config.json
# ファイルを BASE64エンコード

[root@dlp ~]#
cat ~/.docker/config.json | base64

ewoJImF1dGhzIjogewoJCSJkbHAuc3J2LndvcmxkOjUwMDAiOiB7CgkJCSJ...
[root@dlp ~]#
vi regcred.yml
# 新規作成

# [.dockerconfigjson] 行に BASE64エンコードで表示された内容を一行にして貼り付け

apiVersion: v1
kind: Secret
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJkbHAuc3J2LndvcmxkOjUwMDAiOiB7CgkJCSJ...
metadata:
  name: regcred
type: kubernetes.io/dockerconfigjson

[root@dlp ~]#
kubectl create -f regcred.yml

secret "regcred" created
[root@dlp ~]#
kubectl get secrets

NAME                  TYPE                                  DATA      AGE
default-token-8gcdr   kubernetes.io/service-account-token   3         3d
regcred               kubernetes.io/dockerconfigjson        1         5m
[3] Private Registry から Pull するには 登録した Secret と Private Registry の image を指定して Pod をデプロイします。
[root@dlp ~]#
docker images dlp.srv.world:5000/nginx

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
dlp.srv.world:5000/nginx   latest              b175e7467d66        6 days ago          109 MB

[root@dlp ~]#
vi private-nginx.yml
apiVersion: v1
kind: Pod
metadata:
  name: private-nginx
spec:
  containers:
  - name: private-nginx
    # Private Registry の image
    image: dlp.srv.world:5000/nginx
  imagePullSecrets:
  # 登録した Secret名
  - name: regcred

[root@dlp ~]#
kubectl create -f private-nginx.yml

pod "private-nginx" created
[root@dlp ~]#
kubectl get pods

NAME            READY     STATUS    RESTARTS   AGE
private-nginx   1/1       Running   0          41s
[root@dlp ~]#
kubectl describe pods private-nginx

Name:         private-nginx
Namespace:    default
Node:         node01.srv.world/10.0.0.51
Start Time:   Tue, 15 Apr 2018 13:33:21 +0900
Labels:       <none>
Annotations:  <none>
Status:       Running
IP:           10.244.1.11
Containers:
  private-nginx:
    Container ID:   docker://0e805ca076040e6a510b3a0520cb6c4593431484b32b4b6fb9bec2317026d076
    Image:          dlp.srv.world:5000/nginx
    Image ID:       docker-pullable://dlp.srv.world:5000/nginx@sha256:d903fe3076f89ad76afe1cb...
.....
.....
Events:
  Type   Reason       Age  From                       Message
  ----   ------       ---- ----                       -------
  Normal Scheduled    1m   default-scheduler          Successfully assigned private-nginx to node01..
  Normal Successful.. 1m   kubelet, node01.srv.world  MountVolume.SetUp succeeded for volume "defau..
  Normal Pulling      1m   kubelet, node01.srv.world  pulling image "dlp.srv.world:5000/nginx"
  Normal Pulled       1m   kubelet, node01.srv.world  Successfully pulled image "dlp.srv.world:5000/nginx"
  Normal Created      1m   kubelet, node01.srv.world  Created container
  Normal Started      1m   kubelet, node01.srv.world  Started container
 
Tweet