今日は、kubernetes v1.21.3にdockerレジストリ資格情報を追加したいと思います(低バージョンのkubernetesではうまく機能しますが、最新バージョンのkubernetesでは問題があります)。
kubectl create secret docker-registry regcred \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=docker654321 \
--docker-password=$balabala123 \
[email protected] \
-n reddwarf-pro
しかし、それは私に言います:
error: either --from-file or the combination of --docker-username, --docker-password and --docker-server is required
このクラスタにDockerレジストリ資格情報を追加するにはどうすればよいですか?バージョン情報は次のとおりです。
[root@k8smasterone ~]# kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.3", GitCommit:"ca643a4d1f7bfe34773c74f79527be4afd95bf39", GitTreeState:"clean", BuildDate:"2021-07-15T21:04:39Z", GoVersion:"go1.16.6", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.2", GitCommit:"092fbfbf53427de67cac1e9fa54aaa09a28371d7", GitTreeState:"clean", BuildDate:"2021-06-16T12:53:14Z", GoVersion:"go1.16.5", Compiler:"gc", Platform:"linux/amd64"}
答え1
問題の源
--docker-password
以下を含むパラメーターの値が提供されます。シェル特殊文字- これ$
。シェル、前処理のコマンドラインパラメータ今後実際のプログラム(kubectl
)に渡されるので誤解このステートメントは$balabala123
以下を指します。というシェル変数にbalabala123
これをシェル変数の内容に置き換えます。ただし、そのようなシェル変数または(環境変数)が定義されていないため、文字列は$balabala123
「nothing」に置き換えられ、代わりに次のようにkubectl
表示されます。
--docker-password= \
エラーメッセージの原因は
解決策
特殊文字脱出:現在の設定では$
特殊文字のみです。皮をむくだから私たちはこれを脱出する必要があります。
kubectl create secret docker-registry regcred \
--docker-server=registry.cn-hangzhou.aliyuncs.com \
--docker-username=docker654321 \
--docker-password=\$balabala123 \
[email protected] \
-n reddwarf-pro
同じ問題も議論された。Kubernetesのバグを見てフォーラムで。