Kubernetes集群使用Harbor容器镜像仓库
实验环境
一、容器镜像仓库Harbor部署
1、配置主机名
192.168.10.14:
hostnamectl set-hostname harbor
2、安装Docker
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce-20.10.20
systemctl enable --now docker
3、配置镜像加速器
sudo tee /etc/docker/daemon.json <<EFO
{
"registry-mirrors": [
"https://2a6bf1988cb6428c877f723ec7530dbc.mirror.swr.myhuaweicloud.com",
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://your_preferred_mirror",
"https://dockerhub.icu",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://dockercf.jsdelivr.fyi",
"https://docker.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://mirror.aliyuncs.com",
"https://dockerproxy.com",
"https://mirror.baidubce.com",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.mirrors.sjtug.sjtu.edu.cn",
"https://docker.mirrors.ustc.edu.cn",
"https://mirror.iscas.ac.cn",
"https://docker.rainbond.cc",
"http://hub-mirror.c.163.com"
]
}
EFO
systemctl daemon-reload
systemctl restart docker
4、安装docker-compose工具
下载或上传docker-compose-linux-x86_64包到/root目录
下载地址:https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose -v
5、安装Harbor
(1)下载或上传harbor-offline-installer-v2.8.3.tgz包到/root目录
下载地址:wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz
tar xf harbor-offline-installer-v2.8.3.tgz -C /usr/local/
(2)修改配置文件
cd /usr/local/harbor/
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
修改:
(3)导入Harbor所需镜像
docker load -i harbor.v2.8.3.tar.gz
(4)准备环境和生成配置文件
./prepare
(5)启动 Harbor 的所有服务容器
./install.sh
(6)自行启动Harbor命令
启动
docker-compose up -d
停止
docker-compose stop
重启
docker-compose restart
(7)使用浏览器访问Harbor
192.168.10.14
默认账户密码:admin/Harbor12345
二、Kubernetes集群使用harbor仓库
1、通过secret使用harbor仓库
(1)新建一个harbor私有仓库
(2)kubernetes集群所有节点配置访问harbor仓库(master1、worker1、worker2)
vim /etc/docker/daemon.json
添加:
,
"insecure-registries": ["http://192.168.10.14"]
重启docker
systemctl restart docker
(3)上传nginx测试镜像到harbor仓库(harbor)
修改配置文件
vim /etc/docker/daemon.json
添加:
,
"insecure-registries": ["http://192.168.10.14"]
重启docker
systemctl restart docker
重启harbor容器
cd /usr/local/harbor/
docker-compose restart
下载nginx:1.20镜像
docker pull nginx:1.20
或上传nginx1.20.tar包到root目录并导入
docker load -i nginx1.20.tar
修改nginx1.20镜像标签
docker tag nginx:1.20 192.168.10.14/test/nginx:1.20
登录harbor仓库并上传镜像
docker login 192.168.10.14
docker push 192.168.10.14/test/nginx:1.20
(4)创建docker-registry类型secret(master1)
kubectl create secret docker-registry harbor-secret --docker-server=192.168.10.14 --docker-username=admin --docker-password=Harbor12345
字段解析:
类型为docker-registry
harbor-server:这是Secret 的名称
--docker-server:指定 Docker 仓库的地址
--docker-username:指定登录仓库的用户名
--docker-password:指定登录仓库的密码
查看集群中所有secret
kubectl get secret
查看secret 中 harbor-secret的详细信息
kubectl describe secrets harbor-secret
(5)创建Pod直接使用secret
vim pod-harbor.yml
添加:
apiVersion: v1
kind: Pod
metadata:
name: pod-harbor
spec:
containers:
- name: c1
image: 192.168.10.14/test/nginx:1.20
imagePullSecrets:
- name: harbor-secret
创建资源
kubectl apply -f pod-harbor.yml
(6)查看pod-harbor的详细信息
kubectl get pod
kubectl describe pod pod-harbor
可以看到是从192.168.10.14/test/nginx:1.20拉取的镜像
2、通过ServiceAccout使用Secret访问harbor仓库
编写yaml文件时添加imagePullSecrets的这2行配置,可以把secret配置到ServiceAccount中进行调用也可以。
(1)创建ServiceAccount(服务账号)
vim serviceaccount-harbor-sa.yml
添加:
apiVersion: v1
kind: ServiceAccount
metadata:
name: harbor-sa
namespace: default
创建资源
kubectl apply -f serviceaccount-harbor-sa.yml
查看当前命名空间中的 ServiceAccount 资源
kubectl get sa
(2)修改ServiceAccount添加使用harbor-secret的权限
查看名为 harbor-sa 的 ServiceAccount 的详细信息
kubectl describe serviceaccount harbor-sa
更新名为 harbor-sa 的 ServiceAccount 的配置,具体是为其添加一个 imagePullSecrets
kubectl patch serviceaccount harbor-sa -n default -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'
字段解析:
kubectl patch:用于对 Kubernetes 资源进行部分更新。
serviceaccount harbor-sa:指定要更新的资源类型为 ServiceAccount,资源名称为 harbor-sa。
-n default:指定命名空间为 default。
-p '{"imagePullSecrets": [{"name": "harbor-secret"}]}':指定要更新的内容,这里是添加一个 imagePullSecrets,其名称为 harbor-secret
kubectl describe serviceaccount harbor-sa
(3)修改pod-harbor.yml使用serviceAccount
vim pod-harbor.yml
删除添加:
serviceAccount: harbor-sa
(4)查看创建Pod pod-harbor后运行所在主机
kubectl get pod -o wide
(5)删除Pod pod-harbor
kubectl delete pod pod-harbor
(6)到worker2节点删除运行容器拉取的nginx1.20镜像
docker rmi 192.168.10.14/test/nginx:1.20
(7)使用修改后的pod-harbor.ym重启创建
kubectl apply -f pod-harbor.yml
kubectl get pod
kubectl describe pod pod-harbor