zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    python3 TypeError: a bytes-like object is required, not 'str'
    Centos 安装Python Scrapy PhantomJS
    Linux alias
    Vim vimrc配置
    Windows下 Python Selenium PhantomJS 抓取网页并截图
    Linux sort
    Linux RSync 搭建
    SSH隧道 访问内网机
    笔记《鸟哥的Linux私房菜》7 Linux档案与目录管理
    Tornado 错误 "Global name 'memoryview' is not defined"
  • 原文地址:https://www.cnblogs.com/h-gallop/p/11708602.html
Copyright © 2011-2022 走看看