最近正式入职了,在新人培训,有一些培训课程有一点作业,有一项就是写一个简单的接口,跑CI/CD,然后上传镜像道私有仓库,最后在k8s上完成部署
然而在拉取镜像的时候,发现现在是从私有仓库里面拉取的,而不是dockerhub,然后有踩了很多坑。
kubernetes官方解决方案:Pull an Image from a Private Registry
里面讲的很详细了,就是创建一个secret(类似于token),然后在创建deployment的时候,指定一个imagePullSecrets指向这个secret就好了。
kubectl create secret docker-registry \
lingque \
--docker-server=<your-registry-server> \
--docker-username=<your-name> \
--docker-password=<your-pword> \
--docker-email=<your-email>
然后我习惯性使用yaml文件来管理对象,然后就导出yaml文件
kubectl get secret regcred --output=yaml > secret.yaml
secret.yaml
apiVersion: v1
kind: Secret
metadata:
...
name: regcred
namespace: ...
...
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
type: kubernetes.io/dockerconfigjson
然后再创建deployment的yaml文件,并指定secret
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: dev-homework
name: dev-homework
namespace: zhangsan
spec:
replicas: 2
selector:
matchLabels:
app: dev-homework
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: dev-homework
spec:
containers:
- image: registry.abaaba.com/dev_homework:issue-369
imagePullPolicy: IfNotPresent
name: dev-homework
resources: {}
volumeMounts: #容器内挂载点
- mountPath: /go/src/dev_homework/log
name: log #必须有名称
resources:
requests:
memory: 256Mi #内存最小使用量(默认值,可根据实际情况修改)
cpu: 100m #cpu最小使用率(默认值,可根据实际情况修改)
limits:
memory: 256Mi #内存最大使用量(默认值,可根据实际情况修改)
cpu: 100m #cpu最大使用率(默认值,可根据实际情况修改)
volumes:
- name: log #跟上面的名称对应
hostPath:
path: /dev_homework/log
imagePullSecrets:
- name: lingque
status: {}
然后信心满满去拉取,发现又报错了,镜像拉取失败!!!
然后一位同事踩过坑,说secret要指定namespace才能够使用!!!
于是将上面的secret.yaml改正namespace
apiVersion: v1
kind: Secret
metadata:
...
name: regcred
namespace: zhangsan
...
data:
.dockerconfigjson: eyJodHRwczovL2luZGV4L ... J0QUl6RTIifX0=
type: kubernetes.io/dockerconfigjson
镜像成功拉取,完结撒花