k8s使用harbor仓库
1, 新建一个harbor私有仓库
部署harbor参考博客 https://blog.51cto.com/u_13760351/2532347
2, 所有节点用http连接harbor
vim /etc/docker/daemon.json
{
"data-root": "/var/lib/docker",
"exec-opts": ["native.cgroupdriver=cgroupfs"],
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn", "http://hub-mirror.c.163.com"],
"insecure-registries": ["127.0.0.1/8"],
"max-concurrent-downloads": 10,
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "15m",
"max-file": "3"
},
"storage-driver": "overlay2", 上一句这里要加一个逗号
"insecure-registries": ["192.168.154.137"] 加上这一句
}
systemctl restart docker #重启docker
3, 上传nginx测试镜像到harbor
docker pull nginx:1.15-alpine #拉取镜像
docker login 192.168.154.137 #登录harbor
docker tag nginx:1.15-alpine 192.168.154.137/test/nginx:v1 #给镜像打标签
docker push 192.168.154.137/test/nginx:v1 #推送镜像到harbor
4, 创建docker-registry类型secret
kubectl create secret docker-registry harbor-secret --docker-server=192.168.154.137 --docker-username=admin --docker-password=Harbor12345
说明:
- 类型为docker-registry
- --docker-server指定harbor仓库的IP
- --docker-username指定harbor仓库的登录用户名
- --docker-password指定harbor仓库的登录密码
验证查看
kubectl get secret |grep harbor-secret
5, 创建pod并使用secret
vim pod-harbor.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-harbor
spec:
containers:
- name: c1
image: 192.168.122.18/test/nginx:v1
imagePullSecrets: # 定义镜像下载使用的secrets
- name: harbor-secret # 与上面的secret一致
kubectl apply -f pod-harbor.yml
6, 验证pod
kubectl describe pod pod-harbor |tail -8
可以看到是从192.168.154.137/test/nginx:v1拉取的镜像
7, 设为serviceaccount默认规则
如果每次编写yaml文件都需要添加imagePullSecrets这2行配置,有点麻烦, 有没有在不需要添加这2行配置就可以实现下载harbor仓库里面的镜像呢?答案是有的,可以把secret配置到serviceAccount中即可。
(1).创建serviceaccount
vim serviceaccount-harbor-sa.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: harbor-sa
namespace: default
kubectl apply -f serviceaccount-harbor-sa.yaml
kubectl get sa |grep harbor-sa
(2).修改serviceaccount添加使用harbor-secret
kubectl patch serviceaccount harbor-sa -n default -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'
kubectl get serviceaccount harbor-sa -o yaml
(3).修改yaml使用serviceAccount
vim pod-harbor2.yml
apiVersion: v1
kind: Pod
metadata:
name: pod-harbor2
spec:
serviceAccount: harbor-sa # 原来的2句换成使用harbor-sa这个serviceAccount
containers:
- name: c1
image: 192.168.154.137/test/nginx:v1
(4).重新创建pod验证
kubectl apply -f pod-harbor2.yml
kubectl get pod |grep pod-harbor2
补充:
serviceAccount可以实现不同namespace下载镜像使用访问harbor账号的不同。