• Ukieweb

    佳的博客

    曾梦想仗剑天涯,后来工作忙没去。

k8s 支持私有镜像 从私有仓库拉取镜像

方法一:yml 文件加入密钥参数。

详情信息参见官方文档 使用私有仓库

创建 docker-registry 类型的 secret

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

首先创建 docker-registry 类型的 secret

按照上面的方法即可

创建一个sa.yaml配置文件,将服务账号default的配置导入到该文件中。

本例中采用手动配置的方式,修改命名空间的默认服务帐户default,从而将此secret作为imagePullSecret。

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

扩展:创建 docker-registry 类型的 secret 方法

除了上面方法创建 docker-registry 以外,下面方法亦可以的

方法二

  • 首先登录

# docker login -u xxx -p xxx registry.cn-beijing.aliyuncs.com

Login Succeeded

  • 生成密钥

# cat /root/.docker/config.json | base64

ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20iOiB7CgkJ

CSJhdXRoIjogIlkzaDZabUpBYkdWMGVtZHZMbU52YlM1amJqcEVlbU40UURrMk9ESXkiCgkJfQoJ

fQp9Cg====

  • 创建配置清单

 # cat registry-pull-secret.yaml

apiVersion: v1
kind: Secret
metadata:
  name: registry-vpc
  namespace: newns
data:
  .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJyZWdpc3RyeS5jbi1zaGFuZ2hhaS5hbGl5dW5jcy5jb20iOiB7CgkJCSJhdXRoIjogIlkzaDZabUpBYkdWMGVtZHZMbU52YlM1amJqcEVlbU40UURrMk9ESXkiCgkJfQoJfQp9Cg==
type: kubernetes.io/dockerconfigjson
  • 创建 secret 

kubectl create -f registry-pull-secret.yaml



0
0
下一篇:mysql 连接数 max_user_connections 和 max_connections

0 条评论

老佳啊

85后,大专学历,中原人士,家里没矿。

由于年轻时长的比较帅气,导致在别人眼里,我一直不谈恋爱的原因是清高,实则是自己的小自卑。最大的人生目标就是找一个相知相爱相容的人,共度余生。

和人相处时如果能感受到真诚,会非常注重彼此的关系,对别人没有什么心机,即使有利益冲突,一般也会以和为贵,因为在这个世界上,物质的东西,从来不会吸引到我。

特别迷恋那些大山大水,如果现在还能隐居,可能早就去了。对那些宏伟的有底蕴的人文景观比较不感冒。

从事于IT行业,却一直对厨房念念不忘,由于身材魁梧,总觉得自己上辈子是个将军,可惜这辈子没当兵,也不会打架。