kubectl create secret docker-registry regsecret --docker-server=registry-internal.cn-hangzhou.aliyuncs.com --docker-username=abc@aliyun.com --docker-password=xxxxxx --docker-email=abc@aliyun.com
其中:
- regsecret: 指定密鑰的鍵名稱,可自行定義。
- —docker-server:指定 Docker 倉庫地址。
- —docker-username: 指定 Docker 倉庫使用者名。
- —docker-password:指定 Docker 倉庫登入密碼。
- —docker-email:指定郵件地址(選填)。
yml 檔案加入密鑰參數。
containers:
- name: foo
image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0
imagePullSecrets:
- name: regsecret
其中:
imagePullSecrets
是聲明拉取鏡像時需要指定密鑰。regsecret
必須和上面產生密鑰的鍵名一致。image
中的 Docker 倉庫名稱必須和--docker-server
中的 Docker 倉庫名一致。
詳情資訊參見官方文檔 使用私人倉庫。
實現無密鑰編排
為了避免每次使用私人鏡像部署時,都需要引用密鑰,您可將secret添加到namespace的default service account中,參見Add ImagePullSecrets to a service account。
首先找到前面建立的拉取私人鏡像的secret。
# kubectl get secret regsecret
NAME TYPE DATA AGE
regsecret kubernetes.io/dockerconfigjson 1 13m
本例中採用手動設定的方式,修改命名空間的預設服務帳戶default,從而將此secret作為imagePullSecret。
首先建立一個sa.yaml設定檔,將服務帳號default的配置匯入到該檔案中。
kubectl get serviceaccounts default -o yaml > ./sa.yaml
cat sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2015-08-07T22:02:39Z
name: default
namespace: default
resourceVersion: "243024" ##注意該項
selfLink: /api/v1/namespaces/default/serviceaccounts/default
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudgeoken-uudge
執行vim sa.yaml
命令,刪除resourceVersion,並增加拉取鏡像的密鑰配置項imagePullSecrets。修改後的配置如下。
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2015-08-07T22:02:39Z
name: default
namespace: default
selfLink: /api/v1/namespaces/default/serviceaccounts/default
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
secrets:
- name: default-token-uudge
imagePullSecrets: ##增加該項
- name: regsecret
隨後用
sa.yaml設定檔替換default的服務帳號配置。
kubectl replace serviceaccount default -f ./sa.yaml
serviceaccount "default" replaced
以一個tomcat編排為例,執行kubectl create -f 命令建立。
apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: tomcat-deployment
labels:
app: tomcat
spec:
replicas: 1
selector:
matchLabels:
app: tomcat
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: registry-internal.cn-hangzhou.aliyuncs.com/abc/test:1.0 #替換為您自己的私人鏡像地址
ports:
- containerPort: 8080containerPort: 8080
若配置正常,Pod會啟動成功。然後執行
kubectl get pod tomcat-xxx -o yaml命令,你可看到以下配置項。
spec:
imagePullSecrets:
- nameregsecretey