關於kubernetes拉取私庫鏡像需要註意的點
阿新 • • 發佈:2018-05-30
kubernetes剛開始完k8s,總會遇到很多坑,因為是開源項目,版本總在更新,所以要時刻關註自己使用的版本有哪些不一樣的命令和參數。
本次采坑是想讓k8s可以在建立pod時可以到私庫中拉取鏡像。根據官網或網上資料,可以通過創建secret記錄私庫鑒權信息。具體做法如下:
首先在其中一個node上登錄私有倉庫(docker 訪問私庫的配置,這裏不做描述)
docker login my.registry
登錄成功後會在/root/.docker目錄下生產config.json文件,然後執行如下命令:
cat /root/.docker/config.json | base64 -w 0
該命令會將你的認證信息通過base64編碼,生成一個編碼之後的字符串。
在kubernetes中的master節點中創建secret.yaml:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
type: kubernetes.io/dockercfg
data:
.dockercfg: ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0= kubectl get secret
之後在創建其他元素的時候指定:imagesPullSecrets即可。
例如:
pod:
apiVersion: v1
kind: Pod
metadata:
name: redis-test
containers:
本次采坑是想讓k8s可以在建立pod時可以到私庫中拉取鏡像。根據官網或網上資料,可以通過創建secret記錄私庫鑒權信息。具體做法如下:
首先在其中一個node上登錄私有倉庫(docker 訪問私庫的配置,這裏不做描述)
docker login my.registry
登錄成功後會在/root/.docker目錄下生產config.json文件,然後執行如下命令:
cat /root/.docker/config.json | base64 -w 0
該命令會將你的認證信息通過base64編碼,生成一個編碼之後的字符串。
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
type: kubernetes.io/dockercfg
data:
.dockercfg: ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=
在kubernetes中的master節點創建secret:
kubectl create -f secret.yaml
查看secret是否創建:
之後在創建其他元素的時候指定:imagesPullSecrets即可。
例如:
pod:
apiVersion: v1
kind: Pod
metadata:
name: redis-test
containers:
- name: redis-test
image: my.registry/redis
imagePullSecrets: - name: myregistrykey
至此是網上和官網提供的可以讓k8s啟動pod時訪問私庫的方法。
很多人也是可以使用,但由於k8s一直在更新版本,網上很多資料都是建立在舊版本基礎上進行驗證,在新版本中一些參數有變更。
本次采坑就是在於編輯secret元素時type和date參數有變動,從k8s 1.8之後,kubernetes.io/dockercfg就變成kubernetes.io/dockerconfigjson,相對應 .dockercfg也變成.dockerconfigjson,所以在使用k8s 1.8以後版本創建secret時,元素要變成如下:
kind: Secret
metadata:
name: myregistrykey
data:
.dockerconfigjson: ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=
type: kubernetes.io/dockerconfigjson
不然在創建完secret後,pod啟動會報需要驗證或者找不到鏡像的錯誤,而無法正常使用鏡像。
關於kubernetes拉取私庫鏡像需要註意的點