k8s使用secret拉取私有镜像

我们在拉取仓库镜像时需要先docker login,然后有很多节点的时候这么操作很苦逼,所以可以用过创建secret方式来做一些配置到pod的yaml文件中,这样就会无需手工去登录也能拉取镜像,下面我们来看看如何操作

我们如果不在调度节点使用docker login登录仓库,或者其他配置时,我们直接创建的pod拉取镜像event会有如下报错

微信截图_20220531213718.png

那么我们来看看secret的方式拉取私有仓库的镜像,首先,我们需要创建一个用户名密码的secret

kubectl -n test create secret docker-registry docker-registry-secret \
--docker-server=192.168.1.78:5000 \
--docker-username=admin \
--docker-password=admin123

docker-registry-secret是这个secret的名称,下面按照你自己的仓库地址,账户密码修改

然后我们可以查看下我们创建的secret

kubectl get secret docker-registry-secret -n test -o yaml
apiVersion: v1
data:
  .dockerconfigjson: eyJhdXRocyI6eyIxOTIuMTY4LjEuNzg6NTAwMCI6eyJ1c2VybmFtZSI6ImFkbWluIiwicGFzc3dvcmQiOiJhZG1pbjEyMyIsImF1dGgiOiJZV1J0YVc0NllXUnRhVzR4TWpNPSJ9fX0=
kind: Secret
metadata:
  creationTimestamp: "2022-05-31T13:30:35Z"
  managedFields:
  - apiVersion: v1
    fieldsType: FieldsV1
    fieldsV1:
      f:data:
        .: {}
        f:.dockerconfigjson: {}
      f:type: {}
    manager: kubectl
    operation: Update
    time: "2022-05-31T13:30:35Z"
  name: docker-registry-secret
  resourceVersion: "1607906"
  selfLink: /api/v1/namespaces/orion/secrets/docker-registry-secret
  uid: 46825f32-4276-48cc-9190-ce4d2cfb36d1
type: kubernetes.io/dockerconfigjson

我们接着来创建deployment

vi test-pull.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-pull
  labels:
    app: test-pull
spec:
  replicas: 1
  nodeName: "k8s-node2"
  selector:
    matchLabels:
      app: test-pull
  template:
    metadata:
      labels:
        app: test-pull
    spec:
      hostNetwork: true
      schedulerName: orion-scheduler
      containers:
      - name: test-pull
        image: 192.168.1.78:5000/release/ubuntu:v1
        command: ["bash", "-c"]
        args: ["while true; do sleep 30; done;"]
      imagePullSecrets:
      - name: docker-registry-secret
kubectl apply -f test-pull.yaml

此时我们可以看到可以成功拉取镜像了

其实上述方法也麻烦了,我们可以直接通过嵌入sa,这样指定的命名空间下所有的镜像拉取都无需登录

kubectl patch sa -n test default -p '{"imagePullSecrets": [{"name": "docker-registry-secret"}]}'

test是你的命令空间,docker-registry-secret是上面配置的secret

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/847.html