GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Kubernetes(k8s)でプライベートDockerレジストリを設定する方法

KubernetesクラスタにプライベートDockerレジストリまたはリポジトリを用意することを常にお勧めします。 Dockerプライベートレジストリを使用すると、開発者はプライベートコンテナイメージをプッシュおよびプルできます。アプリケーションのコンテナがプライベートレジストリにプッシュされると、開発者はyamlファイルを作成してデプロイするときにプライベートレジストリのパスを使用できます。

この記事では、プライベートDockerレジストリをKubernetesクラスター上にデプロイする方法を学習します。 Kubernetesクラスタがすでに稼働していると想定しています。

プライベートDockerレジストリを設定するためのKubernetesラボの詳細

  • k8s-master – 192.168.1.40 – CentOS 7
  • k8s-worker-1 – 192.168.1.41 – CentOS 7
  • k8s-worker-2 – 192.168.1.42 – CentOS 7
  • sudo権限を持つkadminユーザー
  • NFS共有「/opt/certs」と「/opt/registry」

注: 私の場合、マスターノードにnfsサーバーをセットアップし、/ opt/certsと/opt/registryをnfs共有としてエクスポートしました。

プライベートレジストリの展開を開始する前に、これらのnfs共有が各ワーカーノードにマウントされていることを確認してください。各ワーカーノードで次のコマンドを実行します。

 $ sudo mkdir / opt / certs / opt / registerry $ sudo mount 192.168.1.40:/ opt / certs / opt / certs $ sudo mount 192.168.1.40:/ opt / registerry / opt / registerry 

永続マウントの場合は、/ etc/fstabファイルにnfsエントリを追加します。

これらのnfs共有をマウントする代わりに、nfsベースの永続ボリュームを作成し、後でyamlファイルでこれらの永続ボリュームを使用することもできます。

KubernetesでのプライベートDockerレジストリのインストールと構成の手順を詳しく見ていきましょう。

ステップ1)プライベートレジストリの自己署名証明書を生成する

コントロールプレーンまたはマスターノードにログインし、opensslコマンドを使用して、プライベートDockerリポジトリの自己署名証明書を生成します。

 $ cd / opt $ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout \ ./certs/registry.key -x509 -days 365 -out ./certs/registry.crt 

キーと証明書ファイルが生成されたら、lsコマンドを使用してそれらを確認します。

 [[email protected] opt] $ ls -l certs /total8-rw-r--r--。 1ルートルート2114Sep2603:26registry.crt-rw-r--r--。 1ルートルート32729月26日03:26registry.key[[email protected] opt] $ 

ステップ2)yamlファイルを介したデプロイとしてプライベートレジストリをデプロイします

マスターノードで、次の内容のprivate-registry.yamlファイルを作成します

 [[email protected]〜] $ mkdir docker-repo [[email protected]〜] $ cd docker-repo / [[email protected] docker-repo] $ vi private-registry.yamlapiVersion:apps / v1kind:Deploymentmetadata :名前:private-repository-k8sラベル:app:private-repository-k8sspec:レプリカ:1セレクター:matchLabels:アプリ:private-repository-k8sテンプレート:メタデータ:labels:app:private-repository-k8s名前:本命-体積ホストパス:パス:は/ opt / certsのタイプ:ディレクトリ - 名前:レジストリ体積ホストパス:パス:は/ opt /レジストリタイプ:Directoryコンテナ: - イメージ:レジストリ:2名:プライベート・リポジトリ-K8S imagePullPolicy: IfNotPresent ENV: - 名前:REGISTRY_HTTP_TLS_CERTIFICATE値: "/certs/registry.crt" - 名前:REGISTRY_HTTP_TLS_KEY値: "/certs/registry.key" ポート: - containerPort:5000 volumeMounts: - 名前:certs-vol mountPath:/ certs-名前:registry-vol mountPath:/ var / lib / registerry 

yamlファイルを保存して閉じます

次のkubectlコマンドを実行して、上記で作成したyamlファイルを使用してプライベートレジストリをデプロイします。

 [[email protected] docker-repo] $ kubectl create -f private-registry.yamldeployment.apps / private-repository-k8s created [[email protected] docker-repo] $ 

以下のkubectlコマンドを実行して、レジストリの展開とそのポッドのステータスを確認します。

 [[email protected]〜] $ kubectl get deploys private-repository-k8sNAME READY UP-TO-DATE AVAILABLE AGEprivate-repository-k8s 1/1 protected [1 〜] $ kubectl get pods | grep -i private-repoprivate-repository-k8s-85cf76b9d7-qsjxq1/1実行中05分14秒[[メール保護]〜] $ 

上記の出力は、レジストリが正常にデプロイされたことを示しています。次に、レジストリ証明書ファイルを「/ etc / pki / ca-trust / source/anchors」フォルダの下のワーカーノードとマスターノードにコピーします。マスターノードと各ワーカーノードで次のコマンドを実行します

 $ sudo cp /opt/certs/registry.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust $ sudo systemctl restart docker 

ステップ3)ノードポートサービスタイプとしてレジストリデプロイメントを公開する

レジストリのデプロイをノードポートサービスタイプとして公開するには、以下のコンテンツを含むyamlファイルを作成します

 [[email protected]〜] $ cd docker-repo / [[email protected] docker-repo] $ vi private-registry-svc.yamlapiVersion:v1kind:Servicemetadata:labels:app:private-repository-k8s name: private-repository-k8sspec:ポート:-ポート:5000 nodePort:31320プロトコル:TCP targetPort:5000セレクター:app:private-repository-k8sタイプ:NodePort 

ファイルを保存して閉じます。

次に、次のkubectlコマンドを実行してサービスをデプロイします

 $ kubectl create -f private-registry-svc.yamlservice / private-repository-k8s created $ 

以下のkubectlコマンドを実行して、サービスステータスを確認します。

 [[email protected]〜] $ kubectl get svc private-repository-k8sNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)530 .5000 AGEprivate-repository-k8s NodePort 10.100メールで保護]〜] $ 

ステップ4)k8sでプライベートDockerレジストリをテストして使用する

プライベートレジストリをテストするには、nginxイメージをローカルにダウンロードしてから、そのイメージをプライベートレジストリにアップロードします。マスターノードから、次の一連のコマンドを実行します。

 $ sudo docker pull nginx $ sudo docker tag nginx:latest k8s-master:31320 / nginx:1.17 $ sudo docker push k8s-master:31320 / nginx:1.17 

上記のコマンドの出力は以下のようになります:

以下のdockerコマンドを実行して、nginxがプライベートリポジトリにアップロードされているかどうかを確認します。

 [[email protected]〜] $ sudo docker image ls | grep -inginxnginx最新の7e4d58f0e5f32週間前133MBk8s-master:31320 / nginx1.17週間前
 次に、nginxベースのデプロイをデプロイし、yamlファイルでイメージのパスをプライベートDockerレジストリとして指定します。例を以下に示します:

 [[email protected]〜] $ vi nginx-test-deployment.yamlapiVersion:apps / v1kind:Deploymentmetadata:name:nginx-test-deployment labels:app:nginxspec:replicas:3セレクター:matchLabels:app:nginx template :メタデータ:ラベル:アプリ:nginx仕様:コンテナ:-名前:nginx-1-17画像:k8s-master:31320 / nginx:1.17ポート:-containerPort:80 
ファイルを保存して閉じます

次のkubectlコマンドを実行します

 [[email protected]〜] $ kubectl create -f nginx-test-deployment.yamldeployment.apps / nginx-test-deployment created [[email protected]〜] $ kubectl get deploys nginx-test-deploymentNAME-READY TO-DATE AVAILABLE AGEnginx-test-deployment 3/3 3 13s [[email protected]〜] $ [[email protected]〜] $ kubectl get pods | grepnginx-test-deploymentnginx-test-deployment-f488694b5-2rvmv1/1実行中080snginx-test-deployment-f488694b5-8kb6c1/1 / 1 xl 80メールで保護]〜] $ 

「kubectldescribe」コマンドを使用してポッドを記述し、イメージパスを確認してみてください

 $ kubectl describe pod nginx-test-deployment-f488694b5-2rvmv 

上記のコマンドの出力は、

になります。

上記の出力は、コンテナのイメージパスがプライベートDockerレジストリであることを確認しているため、nginxイメージがプライベートレジストリからダウンロードされたことを意味します。この記事の内容は以上です。これらの手順が、KubernetesクラスターでプライベートDockerレジストリをセットアップするのに役立つことを願っています。以下のコメントセクションでフィードバックやコメントを共有してください。

また読む Google Cloud Platform(GCP)でKubernetesクラスタを設定する方法

また読むKubernetesでNGINXIngressControllerを設定する方法


Docker
  1. RockyLinux8でプライベートDockerレジストリをセットアップする方法

  2. コンテナ化とは何ですか?DockerとKubernetesとはどのように関連していますか?

  3. DockerコンテナにシンプルなApacheWebサーバーをセットアップする方法

  1. プライベートDockerレジストリを設定して使用する方法

  2. Ubuntu18.04にKubernetesをインストールする方法

  3. DockerとKubernetes

  1. RHEL 8にKubernetes(k8s)クラスターをインストールする方法

  2. Kubeadmを使用してHAでKubernetes(k8s)クラスターをセットアップする方法

  3. Ubuntu20.04でプライベートDockerレジストリを設定する方法