1. 程式人生 > >關於kubernetes拉取私庫鏡像需要註意的點

關於kubernetes拉取私庫鏡像需要註意的點

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=

在kubernetes中的master節點創建secret:
kubectl create -f secret.yaml
查看secret是否創建:

kubectl get 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時,元素要變成如下:
    apiVersion: v1
    kind: Secret
    metadata:
    name: myregistrykey
    data:
    .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=
    type: kubernetes.io/dockerconfigjson
    不然在創建完secret後,pod啟動會報需要驗證或者找不到鏡像的錯誤,而無法正常使用鏡像。

關於kubernetes拉取私庫鏡像需要註意的點