使用helm部署harbor

1、环境准备

1.1、k8s环境安装

服务器角色地址
master192.168.31.11
node192.168.31.21
node192.168.31.22
node192.168.31.23

暂时还没写,后面补充

1.2、nfs服务安装

搭建一个测试使用的nfs-server,实际生产环境使用现有的即可,这里只是演示使用
git文档:https://github.com/kubernetes-csi/csi-driver-nfs/blob/master/deploy/example/nfs-provisioner/README.md

kubectl create namespace nfs
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/example/nfs-provisioner/nfs-server.yaml --namespace nfs
# 查看容器是否运行
kubectl get pod -nfs 
apiVersion: v1
metadata:
  name: nfs-server
  labels:
    app: nfs-server  # 定义服务的标签为 app: nfs-server
spec:
  type: ClusterIP  # 使用 "LoadBalancer" 类型可获取公共 IP 地址
  selector:
    app: nfs-server  # 选择与服务关联的 Pod 的标签为 app: nfs-server
  ports:
    - name: tcp-2049
      port: 2049
      protocol: TCP
    - name: udp-111
      port: 111
      protocol: UDP
---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nfs-server
spec:
  replicas: 1  # 指定副本数量为 1
  selector:
    matchLabels:
      app: nfs-server  # 选择要管理的 Pod 的标签为 app: nfs-server
  template:
    metadata:
      name: nfs-server
      labels:
        app: nfs-server  # 定义 Pod 的标签为 app: nfs-server
    spec:
      nodeSelector:
        "kubernetes.io/os": linux  # 指定 Pod 只能在具有特定标签的节点上运行
      containers:
        - name: nfs-server
          image: itsthenetwork/nfs-server-alpine:latest  # 使用 NFS 服务器的镜像
          env:
            - name: SHARED_DIRECTORY
              value: "/exports"  # 指定共享目录为 /exports
          volumeMounts:
            - mountPath: /exports
              name: nfs-vol  # 挂载到容器中的卷的名称为 nfs-vol
          securityContext:
            privileged: true  # 将容器设置为特权模式
          ports:
            - name: tcp-2049
              containerPort: 2049
              protocol: TCP
            - name: udp-111
              containerPort: 111
              protocol: UDP
      volumes:
        - name: nfs-vol
          hostPath:
            path: /nfs-vol  # 修改此处以指定存储 NFS 共享数据的路径
            type: DirectoryOrCreate  # 如果路径不存在,则创建它

1.3、nfs-csi安装

部分镜像无法下载,可以使用神奇的魔法下载,或者使用阿里云新建香港服务器下载镜像后,统一上传到阿里云的私有仓库,这里使用私有仓库方式下载
见链接:
git文档:https://github.com/kubernetes-csi/csi-driver-nfs/blob/master/docs/install-csi-driver-v4.5.0.md

# 使用代理下载
git clone https://mirror.ghproxy.com/https://github.com/kubernetes-csi/csi-driver-nfs.git
#这里修改v4.5.0的版本
cd csi-driver-nfs/

# 修改默认镜像仓库到自己的私有仓库(需要提前上传好对应的镜像xxxx为仓库名称)
# grep registry.k8s.io deploy/v4.5.0/* -rn 
sed -i 's|registry.k8s.io/sig-storage|registry.cn-hongkong.aliyuncs.com/xxxxx|g' deploy/v4.5.0/*
# 安装4.5.0版本
./deploy/install-driver.sh v4.5.0 local
# 查看容器是否启动
kubectl -n kube-system get pod -o wide -l app=csi-nfs-controller
kubectl -n kube-system get pod -o wide -l app=csi-nfs-node

在这里插入图片描述

2、使用helm安装harbor

依赖环境

组件版本
Kubernetes cluster1.20+
Helmv3.2.0+

2.1、 安装helm

官方文档:https://helm.sh/zh/docs/
htlm chart仓库:https://artifacthub.io/packages/search?kind=0
helm版本与k8s对应关系:https://helm.sh/zh/docs/topics/version_skew/

# 下载不下来可以放到浏览器下载或者使用迅雷下载
wget https://get.helm.sh/helm-v3.14.2-linux-amd64.tar.gz
tar zxf helm-v3.14.2-linux-amd64.tar.gz
cp linux-amd64/helm /usr/local/bin
# 如果更换过版本,执行source命令
source ~/.bashrc
# 查看版本是否正确
helm version --client
version.BuildInfo{Version:"v3.14.2", GitCommit:"c309b6f0ff63856811846ce18f3bdc93d2b4d54b", GitTreeState:"clean", GoVersion:"go1.21.7"}

2.2、 配置harbor存储项

这里使用storageclass动态生成pv与pvc绑定

kubectl apply -f nfs-csi-storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: nfs-csi  # 存储类的名称
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"  # 将此存储类设置为默认存储类
provisioner: nfs.csi.k8s.io  # 使用的 CSI 驱动程序
parameters:
  server: nfs-server.nfs.svc.cluster.local  # NFS 服务器的地址 服务名.命名空间.服务对象.默认域名后缀
  share: /  # NFS 服务器上共享的路径
reclaimPolicy: Retain  # 当 PVC 被删除时对应的 PV 应该如何处理,当 PVC 被删除时,对应的 PV 不会被自动删除
volumeBindingMode: Immediate  # PV 和 PVC 的绑定模式,快速绑定
mountOptions:
  - hard  # NFS 挂载选项之一,表示在遇到问题时会持续尝试
  - nfsvers=4.1  # 指定使用的 NFS 版本

2.3、 配置harbor自定义环境变量

harbor chat仓库地址:https://artifacthub.io/packages/helm/harbor/harbor
在这里插入图片描述

vim harbor-values.yaml
expose:
  #type: ingress
  type: nodePort
  tls:
    enabled: false
    # certSource: auto
  nodePort:
    # The name of NodePort service
    name: harbor
    ports:
      http:
        # The service port Harbor listens on when serving HTTP
        port: 80
        # The node port Harbor listens on when serving HTTP
        nodePort: 30002
      https:
        # The service port Harbor listens on when serving HTTPS
        port: 443
        # The node port Harbor listens on when serving HTTPS
        nodePort: 30003

# externalURL: http://registry.harbor.com
externalURL: http://core.harborconnor.com

# 持久化存储配置部分
persistence:
  enabled: true 
  resourcePolicy: "keep"	# 在删除资源(例如 Pod)时保留相关的持久卷资源,而不会将其删除。
  persistentVolumeClaim:        # 定义Harbor各个组件的PVC持久卷
    registry:          # registry组件(持久卷)
      storageClass: "nfs-csi"           # 前面创建的StorageClass,其它组件同样配置
      accessMode: ReadWriteMany          # 卷的访问模式,需要修改为ReadWriteMany
      size: 5Gi
    chartmuseum:     # chartmuseum组件(持久卷)
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 5Gi
    jobservice:
      jobLog:
        storageClass: "nfs-csi"
        accessMode: ReadWriteOnce
        size: 1Gi
    database:        # PostgreSQl数据库组件
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 2Gi
    redis:    # Redis缓存组件
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 2Gi
    trivy:         # Trity漏洞扫描
      storageClass: "nfs-csi"
      accessMode: ReadWriteMany
      size: 5Gi

harborAdminPassword: "1q2w3e4r5t"

2.5、 部署harbor

# 创建命名空间
kubectl create ns harbor
# 添加源
helm repo add harbor https://helm.goharbor.io
#指定配置文件和命名空间创建
helm install harbor -f harbor-values.yaml harbor/harbor -n harbor

# 如果后续修改配置文件,修改后执行下面命令
# helm upgrade harbor -f harbor-values.yaml harbor/harbor -n harbor

检查pvc是否自动绑定pv

kubectl get pvc -n harbor

在这里插入图片描述
检查容器是否启动

# 需要拉取镜像,启动较慢
kubectl get pod -n harbor -w

在这里插入图片描述

3、harbor使用说明

浏览器登录任意node节点的30002端口,输入账号密码admin/1q2w3e4r5t,这里密码在配置文件中定义,如果未定义默认密码为Harbor12345,或者使用下面命令查看默认密码

kubectl exec -it -n harbor `kubectl get pod -n harbor |grep core |awk '{print $1}'` bash
printenv |grep HARBOR_ADMIN_PASSWORD

在这里插入图片描述

3.1 新建镜像代理

镜像代理作用:公共镜像可以选择此链接下载,当本地项目中没有对应镜像时,会通过代理下载镜像,并缓存到仓库中,但此镜像无法通过push推送镜像
新建镜像仓库,【系统管理】【仓库管理】【新建目标】
目标URL:https://1fc43mcq.mirror.aliyuncs.com,这个是我自己的阿里云加速地址,可以选择自己的填上
在这里插入图片描述
新建镜像代理项目,【项目】【新建项目】开启镜像代理,选择上一步创建的仓库
在这里插入图片描述
在这里插入图片描述

3.2 测试镜像的下载和上传

3.2.1 配置基础环境

vim /etc/docker/daemon.json
{
 "exec-opts": ["native.cgroupdriver=systemd"],
 "registry-mirrors": ["https://1fc43mcq.mirror.aliyuncs.com"],
 "insecure-registries": ["core.harborconnor.com"] # 配置 Docker 允许不安全的镜像仓库地址列表,即使该地址没有使用安全的 HTTPS 连接
}

因为这里使用了externalURL: http://core.harborconnor.com,所以需要搭建一个nginx将此域名的请求,转发到nodeport上,本地需要配置host

echo "192.168.31.11 core.harborconnor.com" >> /etc/hosts
# 定义 upstream 块,指定后端服务器的地址和端口
upstream backend_servers {
    server 192.168.31.21:30002;
    server 192.168.31.22:30002;
    server 192.168.31.23:30002;
}

# 配置 server 块,监听80端口,处理 core.harbor.com 的请求
server {
    listen 80;
    server_name core.harborconnor.com;

    location / {
        proxy_pass http://backend_servers;  # 将请求转发到后端服务器
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

登录仓库

docker login core.harborconnor.com

在这里插入图片描述

3.2.2 使用代理仓库下载公共镜像

# Docker 中,library 是一个特殊的命名空间,用于存储官方的镜像库
# image 为代理仓库名称
docker pull core.harborconnor.com/image/library/tomcat:9.0.52

在这里插入图片描述
已经缓存到了本地harbor仓库
在这里插入图片描述

3.3.3 上传镜像到项目仓库

# 查看本地镜像列表
docker image ls
REPOSITORY                                   TAG       IMAGE ID       CREATED       SIZE
core.harborconnor.com/image/library/nginx    latest    605c77e624dd   2 years ago   141MB
core.harborconnor.com/image/library/redis    latest    7614ae9453d1   2 years ago   113MB
core.harborconnor.com/image/library/tomcat   9.0.52    9427bc9144fa   2 years ago   680MB

# 修改tag,test_666项目需要提前创建,或者使用默认的library项目
docker tag core.harborconnor.com/image/library/tomcat:9.0.52 core.harborconnor.com/test_666/tomcat:v1

# 上传镜像tomcat:v1到test_666项目
docker push core.harborconnor.com/test_666/tomcat:v1

在这里插入图片描述

  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值