k8s学习--k8s集群使用容器镜像仓库Harbor

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


环境

Ip 主机名 cpu 内存 硬盘
192.168.10.11 master 1cpu双核 2G 40G
192.168.10.12 node01 1cpu双核 2G 40G
192.168.10.13 node02 1cpu双核 2G 40G
192.168.10.18 Harbor 1cpu1核 1G 40G

虚拟机 centos7.9

master node01 node02 已部署k8s集群

版本 1.18.0

步骤

一 容器镜像仓库Harbor部署

1、docker-ce安装

(1)获取YUM源

复制代码
[root@harbor ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

(2)安装并设置启动及开机自启动

复制代码
[root@harbor ~]# yum -y install docker-ce-20.10.20
[root@harbor ~]# systemctl enable --now docker

2、下载一个docker-compose工具

复制代码
[root@harbor ~]#  wget https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64

下载完成之后,移动到/usr/local/bin/目录(直接下载到环境变量目录)

复制代码
[root@harbor ~]# mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

增加可执行权限

复制代码
[root@harbor ~]# chmod +x /usr/local/bin/docker-compose

查看版本号,并验证命令可用

复制代码
[root@harbor ~]# docker-compose -v

3、harbor离线模式安装

复制代码
[root@harbor ~]# wget https://github.com/goharbor/harbor/releases/download/v2.8.3/harbor-offline-installer-v2.8.3.tgz

将harbor包解压到/usr/local/下

复制代码
[root@harbor ~]# tar xf harbor-offline-installer-v2.8.3.tgz -C /usr/local

4、拷贝文件,并修改文件

复制代码
[root@harbor ~]# cd /usr/local/harbor/
[root@harbor harbor]# cp harbor.yml.tmpl harbor.yml
[root@harbor harbor]# vim harbor.yml

将https的都注释掉,更改hostname为本机ip

5、安装harbor,安装完成自行启动

复制代码
[root@harbor harbor]# docker load -i harbor.v2.8.3.tar.gz
或
./prepare

本质都是准备镜像

然后

复制代码
[root@harbor harbor]# ./install.sh

全绿即可

6、访问地址与账号密码

http://192.168.10.18

默认账户密码:admin/Harbor12345

7、另外可以自行启动

--启动

docker-compose up -d

--停止

docker-compose stop

--重启

docker-compose restart

(1) 访问harbor UI界面

登入

二、Kubernetes集群使用harbor仓库

1.通过secret使用harbor仓库

(1)新建一个harbor私有仓库

新建

查看

(2)kubernetes集群所有节点配置harbor仓库

在配置文件中添加一行内容,可以通过http方式访问harbor服务,

如果有多行内容时,上行尾部加"逗号"

复制代码
[root@master ~]# vim /etc/docker/daemon.json
\ 复制代码
{
  "registry-mirrors": ["https://1dmptu91.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "insecure-registries": ["http://192.168.10.18"]
}
复制代码
[root@master ~]# systemctl restart docker

(3)上传nginx测试镜像到harbor仓库(harbor主机)

docker-compose down停止harbor,修改后再启动。

修改docker配置文件,添加如下内容,如果有多行内容时,上行尾部加"逗号"

复制代码
[root@harbor harbor]# vim /etc/docker/daemon.json
\ 复制代码
{
        "insecure-registries": ["http://192.168.10.18"]
}
复制代码
[root@harbor harbor]# systemctl restart docker
[root@harbor ~]# docker pull nginx:1.20
[root@harbor harbor]# docker login 192.168.10.18
复制代码
[root@harbor harbor]# docker tag nginx:1.20 192.168.10.18/test/nginx:1.20
[root@harbor harbor]# docker push 192.168.10.18/test/nginx:1.20

(4)创建docker-registry类型secret

复制代码
[root@master ~]# kubectl create secret docker-registry harbor-secret --docker-server=192.168.10.18  --docker-username=admin --docker-password=Harbor12345

说明:

类型为docker-registry

--docker-server指定harbor仓库的IP

--docker-username指定harbor仓库的登录用户名

--docker-password指定harbor仓库的登录密码

验证查看

复制代码
[root@master ~]# kubectl get secrets | grep harbor-secret
复制代码
[root@master ~]# kubectl describe secrets harbor-secret

(5)创建pod并使用secret

复制代码
[root@master ~]# vim pod-harbor.yml
\ 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-harbor
spec:
  containers:
  - name: c1
    image: 192.168.10.18/test/nginx:1.20
  imagePullSecrets:                     # 定义镜像下载使用的secrets
  - name: harbor-secret					# 与上面的secret名称一致

(6)验证pod

复制代码
[root@master ~]# kubectl describe pod pod-harbor

可以看到是从192.168.10.18/test/nginx:1.20拉取的镜像

2.通过serviceaccout使用harbor仓库

编写yaml文件时添加imagePullSecrets的这2行配置,可以把secret配置到serviceAccount中进行调用也可以。

(1) 创建serviceAccount(服务账号)

复制代码
[root@master ~]# vim serviceaccount-harbor-sa.yaml
\ 复制代码
apiVersion: v1
kind: ServiceAccount
metadata:
  name: harbor-sa
  namespace: default
复制代码
[root@master ~]# kubectl apply -f serviceaccount-harbor-sa.yaml
[root@master ~]# kubectl get sa | grep harbor-sa

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

复制代码
[root@master ~]# kubectl describe serviceaccounts harbor-sa

可以看到新添加的账号不具备镜像下载权限

添加权限

复制代码
[root@master ~]# kubectl patch serviceaccount harbor-sa -n default  -p '{"imagePullSecrets": [{"name": "harbor-secret"}]}'

[root@master ~]# kubectl describe serviceaccounts harbor-sa

确认已更新

(3)修改yaml使用serviceAccount

复制代码
[root@master ~]# vim pod-harbor.yml
\ 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-harbor
spec:
  serviceAccount: harbor-sa		# 原来的2句换成使用harbor-sa这个serviceAccount
  containers:
  - name: c1
image: 192.168.10.18/test/nginx:1.20

(4)删除先前的重新创建pod验证

复制代码
[root@master ~]# kubectl delete pod pod-harbor

记得删除pod所在node节点上的nginx镜像

我这里是node01

复制代码
[root@node01 ~]# docker rmi 192.168.10.18/test/nginx:1.20
[root@master ~]# kubectl apply -f pod-harbor.yml
[root@master ~]# kubectl get pods
复制代码
[root@master ~]# kubectl describe pods pod-harbor

实验完成

有问题可评论,全天在

相关推荐
名字还没想好☜10 小时前
用 systemd 托管后台服务:Restart 策略、日志接管、资源限制与开机自启全踩一遍
运维·docker·kubernetes
问天_观心10 小时前
大模型微调学习(二)
人工智能·python·深度学习·学习·语言模型·transformer
指掀涛澜天下惊10 小时前
强化学习进阶篇八 策略梯度算法
深度学习·学习·算法·强化学习
star learning white11 小时前
STM32入门学习5
stm32·嵌入式硬件·学习
传奇开心果编程11 小时前
【Rust入门知识点学与练】第4课:条件判断 if / else
开发语言·学习·rust
动力 continue11 小时前
docker容器大舞台,创建镜像,构造类,基础速通
docker·容器
乌恩大侠11 小时前
GH200 新增 NVMe SSD 分区、格式化与挂载完整流程
运维·服务器·前端
tangwangbi11 小时前
Linux 系统配置文件:/etc/profile、~/.bashrc 和 ~/.bash_profile 三者之间的区别与作用
linux·运维·bash
Akiyama_Mio-Kon11 小时前
2026 最新:Dify 本地 Docker 部署完整教程(Windows + Git Bash)
windows·git·docker
lifallen11 小时前
Skill 的生命周期:问题消失以后
人工智能·学习·ai·ai编程