k8s 如何支持私有镜像
Posted h-gallop
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了k8s 如何支持私有镜像相关的知识,希望对你有一定的参考价值。
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
以上是关于k8s 如何支持私有镜像的主要内容,如果未能解决你的问题,请参考以下文章