k8s使用harbor仓库

k8s使用harbor仓库

1, 新建一个harbor私有仓库

部署harbor参考博客 https://blog.51cto.com/u_13760351/2532347

k8s使用harbor仓库

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

k8s使用harbor仓库

docker tag nginx:1.15-alpine 192.168.154.137/test/nginx:v1 #给镜像打标签
docker push 192.168.154.137/test/nginx:v1 #推送镜像到harbor

k8s使用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

k8s使用harbor仓库

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

k8s使用harbor仓库

6, 验证pod

kubectl describe pod pod-harbor |tail -8

k8s使用harbor仓库

可以看到是从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

k8s使用harbor仓库

(2).修改serviceaccount添加使用harbor-secret

kubectl patch serviceaccount harbor-sa -n default -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'

kubectl get serviceaccount harbor-sa -o yaml

k8s使用harbor仓库

(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

k8s使用harbor仓库

补充:

serviceAccount可以实现不同namespace下载镜像使用访问harbor账号的不同。

上一篇:day 01 - 1-2-Python 猜数字游戏


下一篇:使用python进行钉钉机器人的消息发送