k8s如何支持私有鏡像
實現無密鑰編排
kubectl create secret docker-registry regsecret --docker-server=registry.cn-shenzhen.aliyuncs.com --docker-username=abc@aliyun.com --docker-password=xxxxxx --docker-email=abc@aliyun.com
--docker-server 參數為私有鏡像地址,阿里雲地址詳解:
公網:registry.cn-shenzhen.aliyuncs.com
vpc網:registry-vpc.cn-shenzhen.aliyuncs.com
經典網:registry-internal.cn-shenzhen.aliyuncs.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 serviceaccount中,參見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: 8080
若配置正常,Pod會啟動成功。然后執行 kubectl get pod tomcat-xxx -o yaml命令,你可看到以下配置項。
spec:
imagePullSecrets:
- nameregsecretey