著者について
ランチャーチャイナコミュニティテクニカルマネージャーのワンハイロンは、ランチャーチャイナテクニカルコミュニティのメンテナンスと運営を担当しています。彼はクラウドコンピューティングの分野で6年の経験があり、OpenStackからKubernetesへの技術的変化を経験しており、基盤となるオペレーティングシステムLinux、仮想化KVM、またはDockerコンテナテクノロジーに関係なく、豊富な運用と保守、および実践的な経験を持っています。
序文
KubernetesはChangelogで、DockerはKubernetes 1.20以降、コンテナーランタイムとして非推奨になると発表し、containerdは次のコンテナーランタイムの一般的なオプションになりました。containerdは長い間Dockerの一部でしたが、containerdを純粋に使用すると、それでもすべての人に多くの問題が発生します。この記事では、containerdを使用してミラーウェアハウスとアクセラレーターを構成する方法を紹介します。
この記事では、containerdを構成する例としてK3を取り上げます。環境でK3を使用せず、Kubernetesを使用する場合、containerdの構成はユニバーサルであるため、この記事を参照してcontainerdのミラーウェアハウスを構成することもできます。
K3とコンテナについて
K3sは、バイナリサイズが100MB未満の軽量のKubernetesディストリビューションであり、必要なメモリはKubernetesの半分未満です。リソース消費を削減するために、K3sはデフォルトのランタイムをcontainerdに変更し、組み込みのKubernetesCLIツールであるcritclとctrも変更しました。
K3sのデフォルトのcontainerd構成ファイルディレクトリはですが/var/lib/rancher/k3s/agent/etc/containerd/config.toml
、containerd構成ファイルを直接操作してミラーウェアハウスまたはアクセラレータをセットアップすることは、dockerを操作するよりもはるかに複雑です。コンテナー化されたミラーウェアハウスの構成の複雑さを単純化するために、K3は起動時にregistries.yaml/etc/rancher/k3s/
ファイルがあるかどうかを確認します。ファイルが存在する場合は、コンテナー化された構成に変換され、レジストリーの内容に従って保存されます。 yaml/var/lib/rancher/k3s/agent/etc/containerd/config.toml
を使用して、コンテナ化されたミラーウェアハウスの複雑さを軽減します。
K3を使用してプライベートミラーウェアハウスを構成する
K3sミラー倉庫構成ファイルは2つの部分から構成さ:mirrors
とconfigs
:
-
Mirrorsは、専用のミラーウェアハウスの名前とエンドポイントを定義するために使用されるコマンドです。
- Configsセクションは、各ミラーのTLSと証明書の構成を定義します。ミラーごとに、authやtlsを定義できます
Containerdは、K8Sのsvcおよびendpointと同様の概念を使用します。Svcはアクセス名として理解でき、この名前は対応するエンドポイントに解決されます。ミラー構成はリバースプロキシであり、エンドポイントによって構成されたバックエンドミラーウェアハウスにクライアントの要求をプロキシすることも理解できます。ミラー名は自由に入力できますが、IPまたはドメイン名の定義規則に準拠している必要があります。また、複数のエンドポイントを構成し、デフォルトで最初のエンドポイントに解析することができます。最初のエンドポイントがデータを返さない場合は、自動的に2番目のエンドポイントに切り替わります。
たとえば、次の構成例:
mirrors:
"172.31.6.200:5000":
endpoint:
- "http://172.31.6.200:5000"
"rancher.ksd.top:5000":
endpoint:
- "http://172.31.6.200:5000"
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://registry-1.docker.io"
あなたはできるcrictl pull 172.31.6.200:5000/library/alpine
とcrictl pull rancher.ksd.top:5000/library/alpine
ミラーに得るが、ミラーは同じに流通センターから入手可能です。
root@rancher-server:/etc/rancher/k3s# systemctl restart k3s.service
root@rancher-server:/etc/rancher/k3s# crictl pull 172.31.6.200:5000/library/alpine
Image is up to date for sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
root@rancher-server:/etc/rancher/k3s# crictl pull rancher.ksd.top:5000/library/alpine
Image is up to date for sha256:a24bb4013296f61e89ba57005a7b3e52274d8edd3ae2077d04395f806b63d83e
root@rancher-server:/etc/rancher/k3s#
非セキュア(http)プライベートウェアハウス構成
非セキュア(http)プライベートウェアハウスを構成するには、エンドポイントでhttpプロトコルヘッダーのアドレスを指定するだけで済みます。
TLS通信がない場合は、エンドポイントにhttp://を指定する必要があります。指定しない場合、デフォルトでhttpsになります。
認定なし
安全でない(http)プライベートウェアハウスを使用している場合は、次のパラメーターを使用してプライベートウェアハウスに接続するようにK3を構成できます。
root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"172.31.6.200:5000":
endpoint:
- "http://172.31.6.200:5000"
EOF
systemctl restart k3s
次に、crictlを介してミラーをプルできます。
root@ip-172-31-13-117:~# crictl pull 172.31.6.200:5000/my-ubuntu
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee
次に、containerdの構成を確認すると、ファイルの最後に次の構成が追加されていることがわかります。
root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."172.31.6.200:5000"]
endpoint = ["http://172.31.6.200:5000"]
[plugins.cri.registry.mirrors."rancher.ksd.top:5000"]
endpoint = ["http://172.31.6.200:5000"]
認証済み
非セキュア(http)プライベートウェアハウスが認定されている場合は、次のパラメーターを使用してプライベートウェアハウスに接続するようにk3を構成できます。
root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"35.182.134.80":
endpoint:
- "http://35.182.134.80"
configs:
"35.182.134.80":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password
EOF
systemctl restart k3s
crictlを介してミラーをプルするには:
root@ip-172-31-13-117:~# crictl pull 35.182.134.80/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee
次の設定は、コンテナ設定ファイルの最後に追加されます:
`` `root @ ip-172-31-13-117:〜#cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors。 "35.182.134.80"]
エンドポイント= [" http://35.182.134.80 "]
[plugins.cri.registry.configs。 "35.182.134.80" .auth]
username = "admin"
password = "Harbor12345"
## 安全(https)私有仓库配置
>以下示例均启用了认证,所以每个示例都配置了configs.auth,如果实际环境未配置认证,删除configs.auth配置即可。
### 使用授信 ssl 证书
与非安全(http)私有仓库配置类似,只需要配置 endpoint 对应的仓库地址为 https 即可。
root @ ip-172-31-13-117:〜#cat >> /etc/rancher/k3s/registries.yaml << EOF
ミラー:
"harbor.kingsd.top":
エンドポイント:
- " https://harbor.kingsd.top " configs
:
"harbor.kingsd.top":
auth:
username:admin#これはレジストリユーザー名
パスワードです:Harbor12345#これはレジストリパスワードです
EOF
systemctl restart k3s 通过 crictl 去 pull 镜像:
root @ ip-172-31-13-117:〜#crictl pull harbor.kingsd.top/ksd/ubuntu:16.04
画像はsha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462eeの最新です Containerd 配置文件末尾追加了如下配置:
root @ ip-172-31-13-117:〜#cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors。 "harbor.kingsd.top"]
エンドポイント= [" https://harbor.kingsd.top "]
[plugins.cri.registry.configs。 "harbor.kingsd.top" .auth]
username = "admin"
password = "Harbor12345"
### 使用自签 ssl 证书
如果后端仓库使用的是自签名的 ssl 证书,那么需要配置 CA 证书 用于 ssl 证书的校验。
```root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"harbor-ksd.kingsd.top":
endpoint:
- "https://harbor-ksd.kingsd.top"
configs:
"harbor-ksd.kingsd.top":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password
tls:
ca_file: /opt/certs/ca.crt
EOF
systemctl restart k3s
crictlを介してミラーをプルするには:
root@ip-172-31-13-117:~# crictl pull harbor-ksd.kingsd.top/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee
次の構成は、Containerd構成ファイルの最後に追加されます。
root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."harbor-ksd.kingsd.top"]
endpoint = ["https://harbor-ksd.kingsd.top"]
[plugins.cri.registry.configs."harbor-ksd.kingsd.top".auth]
username = "admin"
password = "Harbor12345"
[plugins.cri.registry.configs."harbor-ksd.kingsd.top".tls]
ca_file = "/opt/certs/ca.crt"
ssl相互認証
ミラーウェアハウスが双方向認証で構成されている場合は、ミラーウェアハウスがcontainerdを認証するために、containerdのssl証明書を構成する必要があります。
root@ip-172-31-13-117:~# cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"harbor-ksd.kingsd.top":
endpoint:
- "https://harbor-ksd.kingsd.top"
configs:
"harbor-ksd.kingsd.top":
auth:
username: admin # this is the registry username
password: Harbor12345 # this is the registry password
tls:
ca_file: /opt/certs/ca.crt # path to the ca file used in the registry
cert_file: /opt/certs/harbor-ksd.kingsd.top.cert # path to the cert file used in the registry
key_file: /opt/certs/harbor-ksd.kingsd.top.key # path to the key file used in the registry
EOF
systemctl restart k3s
crictlを介してミラーをプルするには:
root@ip-172-31-13-117:~# crictl pull harbor-ksd.kingsd.top/ksd/ubuntu:16.04
Image is up to date for sha256:9499db7817713c4d10240ca9f5386b605ecff7975179f5a46e7ffd59fff462ee
次の構成は、Containerd構成ファイルの最後に追加されます。
root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."harbor-ksd.kingsd.top"]
endpoint = ["https://harbor-ksd.kingsd.top"]
[plugins.cri.registry.configs."harbor-ksd.kingsd.top".auth]
username = "admin"
password = "Harbor12345"
[plugins.cri.registry.configs."harbor-ksd.kingsd.top".tls]
ca_file = "/opt/certs/ca.crt"
cert_file = "/opt/certs/harbor-ksd.kingsd.top.cert"
key_file = "/opt/certs/harbor-ksd.kingsd.top.key"
アクセラレータの構成
Containerdとdockerの両方にデフォルトのリポジトリがあり、どちらもdocker.ioです。構成でミラーがdocker.ioとして指定されていない場合、docker.io構成はコンテナー化後に自動的にロードされます。dockerとは異なり、containerdはdocker.io(デフォルトはhttps://registry-1.docker.io)に対応するエンドポイントを変更できますが、dockerは変更できません。
Dockerでは、registry-mirrorsを介してミラーアクセラレーションアドレスを設定できます。プルミラーにウェアハウスアドレス(プロジェクト名+ミラー名:タグ)がない場合、ミラーはデフォルトのミラーウェアハウスからプルされます。ミラーアクセラレーションアドレスが設定されている場合は、最初にミラーアクセラレーションウェアハウスにアクセスし、データが返されない場合は、デフォルトのミラーウェアハウスにアクセスします。
Containerdは現在、イメージアクセラレーション機能を直接構成していませんが、docker.ioに対応するエンドポイントをcontainerdで変更できるため、エンドポイントを変更することでイメージアクセラレーションのダウンロードを実現できます。エンドポイントはポーリングアクセスであるため、docker.ioの複数のウェアハウスアドレスを構成して、高速化されたアドレス+デフォルトのウェアハウスアドレスを実現できます。次の構成例:
cat >> /etc/rancher/k3s/registries.yaml <<EOF
mirrors:
"docker.io":
endpoint:
- "https://fogjl973.mirror.aliyuncs.com"
- "https://registry-1.docker.io"
EOF
systemctl restart k3s
次の構成は、Containerd構成ファイルの最後に追加されます。
root@ip-172-31-13-117:~# cat /var/lib/rancher/k3s/agent/etc/containerd/config.toml
[plugins.cri.registry.mirrors]
[plugins.cri.registry.mirrors."docker.io"]
endpoint = ["https://fogjl973.mirror.aliyuncs.com", "https://registry-1.docker.io"]
完全な構成例
`` `mirrors:
" 192.168.50.119 ":
endpoint:
- " http://192.168.50.119 "
"docker.io":
エンドポイント: - 「https://fogjl973.mirror.aliyuncs.com」
- " https://registry-1.docker.io "
configs:
"192.168.50.119":
auth:
username: ''#これはレジストリユーザー名
パスワードです: ''#これはレジストリパスワードです
tls:
cert_file: ''#レジストリで使用される証明書ファイルへのパス
key_file: ''#レジストリで使用されるキーファイルへのパス
ca_file: ''#レジストリで使用されるcaファイルへのパス
"docker.io":
auth:
username: ''#これはレジストリのユーザー名
パスワードです: ''#これはレジストリパスワードです
tls:
cert_file: ''#レジストリで使用される証明書ファイルへのパス
key_file: ''#レジストリで使用されるキーファイルへのパス
ca_file: ''#レジストリで使用されるcaファイルへのパス ## 参考链接
K3sプライベートミラーウェアハウス構成:
https://docs.rancher.cn/docs/k3s/installation/private-registry/_index
コンテナ構成ミラーウェアハウス:
https://github.com/containerd/cri/blob/master/docs/registry.md