k8s的pod内部打包工程镜像

1、创建阿里云serviceAccount,赋予容器镜像服务相应的权限

  • 创建RAM子账号,赋予子账号容器镜像服务相应的权限
  • 用子账号登录阿里云
  • 进入容器镜像服务页面,开通registry

2、创建docker secret

kubectl create secret docker-registry regcred --docker-server=registry.cn-hangzhou.aliyuncs.com --docker-username=wangzy-p@1711111111233333 --docker-password=dasdadsa --dry-run=client -n wangzy-p -o yaml > docker-secret.yaml

注意 :登录阿里云的RAM账号[email protected],账号中去除.onaliyun.com

生成docker-secret.yaml文件如下:

apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyJQ2Q1QyZWdpc3RyeS5jbi1oYW5nemhvdS5hbGl5dW5jcy5jb20iOnsidXNlcm5hbWUiOiJ3YW5nenktcEAxNzA4OTYwOTU5OTdadadaATTBBHPKKKX7HGGGGkxMDAyIiwicGFzc3dvcmQiOiJ3YW5nenktcDEyADADMzQ1NiIsImF1dGgiOiJkMkZ1WjNwNUxYQkFNVGN3T0RrMk1EazFPVGs1TVRBd01qcDNZVzVuZW5rdGNERXDADADlNelExTmc9PSJ9fX0=
kind: Secret
metadata:
  creationTimestamp: null
  name: regcred
  namespace: wangzy-p
type: kubernetes.io/dockerconfigjson

应用文件: kubectl apply -f docker-secret.yaml

3、创建pod

apiVersion: v1
kind: Pod
metadata:
  name: kaniko
  namespace: wangzy-p #用户的命名空间,这里要和创建的secret命名空间要对应
  annotations:
    sidecar.istio.io/inject: "false"  #如果有istio,取消sidebar注入
spec:
  containers:
  - name: kaniko
    image: registry.cn-hangzhou.aliyuncs.com/rory602/kubeflow2:gcr.io_kaniko-projec_executor_latest
    args: ["--dockerfile=/workspace/operator/example/sdm/Dockerfile", #打包镜像的dockerfile
            "--context=dir://operator", #dir://协议, 这是相对路径写法,如果是绝对路径再加/, 如:dir:///workspace/operator
            "--destination=registry.cn-hangzhou.aliyuncs.com/rory602/k8s_kubeflow1:kaniko-test"] #推送的镜像
    volumeMounts:
      - name: kaniko-secret
        mountPath: /kaniko/.docker
      - name: dockerfile-storage
        mountPath: /workspace #挂载到kaniko pod的workspace目录,注意,这里不是构建镜像挂载路径,可以理解为中转路径
  restartPolicy: Never
  volumes:
    - name: kaniko-secret
      secret:
        secretName: regcred  #创建docker-secret名称
        items:
          - key: .dockerconfigjson
            path: config.json
    - name: dockerfile-storage
      persistentVolumeClaim:
        claimName: wangzy-p1-datavol-1  #指定存储数据的pvc

应用pod文件:kubectl apply -f pod.yaml

注意:pod内部需要赋予serviceaccount的在该命名空间下创建Pod的权限

其中,wangzy-p1-datavol-1对应的打包工程目录结构如下:

└── operator
    ├── config
    │   ├── dssm
    │   ├── mind
    │   ├── sdm
    │   └── youtubednn
    ├── data
    │   ├── dssm
    │   ├── mind
    │   ├── sdm
    │   └── youtubednn
    ├── example
    │   ├── dssm
    │   ├── mind
    │   ├── sdm
    │   └── youtubednn

Dockerfile定义打包镜像指令

·

参考资料

GoogleContainerTools/kaniko: Build Container Images In Kubernetes (github.com)

你可能感兴趣的:(k8s,kubernetes)