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

实验完成

有问题可评论,全天在

相关推荐
愚润求学14 分钟前
【Linux】动静态库链接原理
linux·运维·服务器·开发语言·笔记
gnufre1 小时前
Kubernetes 1.28 无 Docker 运行时环境下的容器化构建实践:Kaniko + Jenkins 全链路详解
kubernetes·jenkins·kaniko
threelab1 小时前
12.three官方示例+编辑器+AI快速学习webgl_buffergeometry_indexed
学习·编辑器·webgl
云攀登者-望正茂1 小时前
无缝部署您的应用程序:将 Jenkins Pipelines 与 ArgoCD 集成
运维·jenkins·argocd
jerry6091 小时前
LLM笔记(六)线性代数
笔记·学习·线性代数·自然语言处理
ghost1431 小时前
C#学习第23天:面向对象设计模式
开发语言·学习·设计模式·c#
Yan_ks1 小时前
计算机组成原理——数据的表示
学习
勤不了一点2 小时前
小白上手RPM包制作
linux·运维·服务器·软件工程
freellf2 小时前
go语言学习进阶
后端·学习·golang
真的想上岸啊2 小时前
学习51单片机02
嵌入式硬件·学习·51单片机