我们在拉取仓库镜像时需要先docker login,然后有很多节点的时候这么操作很苦逼,所以可以用过创建secret方式来做一些配置到pod的yaml文件中,这样就会无需手工去登录也能拉取镜像,下面我们来看看如何操作
我们如果不在调度节点使用docker login登录仓库,或者其他配置时,我们直接创建的pod拉取镜像event会有如下报错
那么我们来看看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