notes notes
首页
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 相关文章

    • 使目录栏支持h2~h6标题
    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
  • PostgreSQL 全文搜索
  • 依赖注入
  • 开发常见问题
  • 逻辑删除
  • TCP 粘包和拆包
  • netty 粘包和拆包
  • 在k8s集群中搭建一个harbor私有仓库
  • 优雅停机
  • helm 命令学习
  • yield 关键字
  • 不定参数
TODO
  • REST API
  • 使用 IntelliJ IDEA 反编译 jar
  • Spring Boot 删除前后空白字符
  • 设计模式

    • 装饰器模式
Docker
Tool Box (opens new window)
GitHub (opens new window)
首页
  • 主题初衷与诞生
  • 介绍
  • 快速上手
  • 目录结构
  • 相关文章

    • 使目录栏支持h2~h6标题
    • 如何让你的笔记更有表现力
    • 批量操作front matter工具
    • 部署
    • 关于写文章和H1标题
    • 关于博客搭建与管理
  • PostgreSQL 全文搜索
  • 依赖注入
  • 开发常见问题
  • 逻辑删除
  • TCP 粘包和拆包
  • netty 粘包和拆包
  • 在k8s集群中搭建一个harbor私有仓库
  • 优雅停机
  • helm 命令学习
  • yield 关键字
  • 不定参数
TODO
  • REST API
  • 使用 IntelliJ IDEA 反编译 jar
  • Spring Boot 删除前后空白字符
  • 设计模式

    • 装饰器模式
Docker
Tool Box (opens new window)
GitHub (opens new window)
  • 知识积累

    • PostgreSQL 全文搜索
    • @AutoWired VS @Resource VS @Inject
    • 开发常见问题
    • 逻辑删除
    • TCP 粘包和拆包
    • netty 粘包和拆包
    • 在k8s集群中搭建一个harbor私有仓库
      • 优雅停机
      • helm 命令学习
    目录

    在k8s集群中搭建一个harbor私有仓库

    在使用容器化部署微服务时,自己开发的微服务需要打包成镜像并推送至镜像仓库中,以便k8s可以使用这些镜像构建容器。 可以使用云服务商提供的私有仓库,但有些情况下出于网络、安全等方面的考虑,搭建自有仓库可能更加合适。

    本文记录下使用harbor搭建私有仓库的过程。

    # 前提条件

    • 一个可用域名,非必须,没有域名使用ip也可以。本文以 registry.tst.cn 为例说明。
    • 一个正常运行的k8s集群。
    • 一个可用的storageClass, 如 nfs-client。

    # 安装

    使用 bitnami/harbor (opens new window) 搭建。

    在 k8s master 节点上执行以下命令:

    helm install harbor-release \
        --set service.type=NodePort \
        --set global.storageClass=nfs-client \
        --set trivy.enabled=false \
        --set service.nodePorts.https=31268 \
        --set externalURL=https://registry.tst.cn \
        --set nginx.tls.commonName=registry.tst.cn \
        --set adminPassword=admin \
         oci://registry-1.docker.io/bitnamicharts/harbor 
    

    安装过程中,可能会遇到共享文件夹不存在,导致pvc创建不成功,此时使用 kubectl describe 命令查看报错信息,将缺失的文件夹创建出来,并使用 chmod 将其 mode 修改为 777.

    [test-user@localhost ~]$ sudo ls -la /mnt/nfs-share/
    total 12
    drwxr-xr-x  9 nfsnobody nfsnobody 4096 Nov  2 00:52 .
    drwxr-xr-x. 3 root      root        23 Oct 23 00:59 ..
    drwxrwxrwx  4 root      root        63 Nov  2 00:38 default-data-harbor-release-postgresql-0-pvc-3c2f8635-c3ef-4bb5-b6cd-00ecb091cc2c
    drwxrwxrwx  2 root      root         6 Nov  2 00:52 default-harbor-release-jobservice-pvc-cb7257cd-3f3e-4efc-9819-a043ba09c29c
    drwxrwxrwx  2 root      root         6 Nov  2 00:47 default-harbor-release-jobservice-scandata-pvc-58a20ee1-8c8b-4a17-854d-bfdbf99cb30c
    drwxrwxrwx  2 root      root         6 Nov  2 00:40 default-harbor-release-registry-pvc-01c3399a-d13d-4076-b0d7-b75204b0433f
    drwxrwxrwx  3 root      root        27 Nov  2 00:40 default-redis-data-harbor-release-redis-master-0-pvc-c20af3b5-60ff-49cb-918e-e4c57b1dcc0b
    
    

    执行成功后,可以根据该命令的输出获取访问地址和初始用户名密码。 如果不启用https,登录会报错。

    # 配置免端口访问

    在 registry.tst.cn 指向的服务器上安装nginx,并配置TCP流量流量转发,即可实现免端口访问。

    1. 安装nginx stream模块:sudo yum install -y nginx-mod-stream
    2. 在nginx.conf的http块之后添加:
       stream {
           server {
               listen 443;
               proxy_pass localhost:31268;
           }
       }
      
      
    3. 重新加载nginx: sudo systemctl restart nginx

    # pull镜像

    以 containerd 为例配置。 所有节点上都需要执行如下操作:

    1. 在 containerd 的配置文件 /etc/containerd/config.toml 中添加配置,如果节点上没有这个文件,导出当前配置并创建该文件:
      containerd config default > /etc/containerd/config.toml
      
    2. 修改配置文件,找到[plugins."io.containerd.grpc.v1.cri".registry.configs],并在其下添加如下配置:
      [plugins."io.containerd.grpc.v1.cri".registry.configs]
        [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.tst.cn"]
          [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.tst.cn".tls]
            insecure_skip_verify = true
            #ca_file = "/etc/containerd/registry.tst.cn/ca.crt" # CA 证书
            #cert_file = "/etc/containerd/registry.tst.cn/registry.tst.cn.crt" # harbor 证书
            #key_file = "/etc/containerd/registry.tst.cn/registry.tst.cn.key" # harbor 私钥
          [plugins."io.containerd.grpc.v1.cri".registry.configs."registry.tst.cn".auth]
            username = "admin"
            password = "admin"
      
    3. 重启: systemctl restart containerd
    4. 测试创建pod
       apiVersion: v1
       kind: Pod
       metadata:
         name: test-pod
       spec:
         containers:
         - name: tese-container
           image: registry.tst.cn/library/hello-world:1.0.0
      

    # push镜像

    以 docker 为例配置。

    由于 harbor 启用了 https,其证书是使用 harbor-ca 签发的,该 CA 是不被信任的,因此需要先将其添加至 docker 中:

    1. 下载 harbor 的CA证书,进入harbor之后,依次点击: projects -> {select a project} -> Repositories -> REGISTRY CERTIFICATE
    2. 保存至 docker 的证书目录,格式 /etc/docker/certs.d/${domain_name}/ca.cert,如本例中为:/etc/docker/certs.d/registry.tst.cn/ca.crt
    3. 重启 docker 服务:sudo systemctl restart docker

    随后即可正常push镜像:

    1. 为镜像打标签:docker tag hello-world:1.0.0 registry.tst.cn/library/hello-world:1.0.0
    2. push镜像:docker push registry.tst.cn/library/hello-world:1.0.0
    上次更新: 2023/12/08, 06:34:37
    netty 粘包和拆包
    优雅停机

    ← netty 粘包和拆包 优雅停机→

    Theme by Vdoing | Copyright © 2023-2023
    Powered by vuepress-theme-vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式