赞
踩
K8S版本为v1.26.6
Helm 版本:v3.12.1
harbor版本:2.10.2
本次安装只讨论容器化部署,裸机部署的请直接查看官方文档。
harbor 官网
Helm 安装教程
# 添加helm源
helm repo add harbor https://helm.goharbor.io
# 下载 harbor 安装包,注意:不指定版本默认下载最新版。
helm pull harbor/harbor
# 解压
tar -xf harbor-1.14.2.tgz
[root@master01 harbor]# ls
Chart.yaml LICENSE README.md templates values.yaml
查看 values.yaml 文件配置(注释我删除了 要不太长了.至少用过一段时间的K8S要不你没法配置。)
## 下面这些是配置 访问 Harbor 的方式以及详细的配置 expose: type: ingress # 选择通过什么方式暴漏你的服务,这里使用 ingress 方式暴漏。可选的有:"ingress", "clusterIP", "nodePort" or "loadBalancer" tls: enabled: true # 是否启用HTTPS certSource: secret # 是否自动生成 tls证书,当前是用自己的证书。如果需要自动生成证书修改为 auto 即可 auto: commonName: "" # 自动生成证书的是你这个地方需要修改为访问的域名 secret: secretName: "harbor-peopleurl-cn" # 使用自己单位的证书 的时候这个地方需要修改为 secret名字,如果是自动生成证书这个地方设置为空。 ingress: # 上面选择了 ingress 方式以后需要根据自己需求配置ingress hosts: core: harbor.ppleurl.cn # 访问harbor镜像仓库的域名 controller: default # 定义了使用的Ingress控制器的类型。默认情况下,它被设置为default,这意味着它将使用Kubernetes集群中默认的Ingress控制器。但是,如果你的集群中部署了特定的Ingress控制器(如GCE、NCP、ALB或F5 BIG-IP),你可以在这里指定它。 kubeVersionOverride: "" # 允许你在创建Ingress时覆盖.Capabilities.KubeVersion.Version的值。在大多数情况下,这个字段应该留空。 className: "" # 指定Ingress资源的类。在某些Kubernetes环境中,可以使用Ingress类来指定应处理该Ingress资源的Ingress控制器。留空意味着使用默认的Ingress类。 annotations: # ingress 注解 它们为Ingress资源提供了额外的配置选项。这些注解通常由特定的Ingress控制器识别并用于定制Ingress的行为。 ingress.kubernetes.io/ssl-redirect: "true" # 当设置为"true"时,这个注解告诉Ingress控制器将所有HTTP请求重定向到HTTPS。 ingress.kubernetes.io/proxy-body-size: "0" # 这个注解用于设置Ingress代理后端服务时允许的最大请求体大小。设置为"0"表示没有限制 nginx.ingress.kubernetes.io/ssl-redirect: "true" # 这些是特定于Nginx Ingress控制器的注解,与上面的注解有相同的功能。 nginx.ingress.kubernetes.io/proxy-body-size: "0" # 这些是特定于Nginx Ingress控制器的注解,与上面的注解有相同的功能。 harbor: annotations: {} # 这是一个空的注解集合,用于为Harbor的Ingress资源添加特定的注解。你可以在这里添加Harbor特定的注解,例如用于身份验证或自定义路由的注解 labels: {} # 这是一个空的标签集合,用于为Harbor的Ingress资源添加自定义的标签。这些标签可以用于在Kubernetes集群中标识和选择Ingress资源。 # clusterIP 方式暴漏服务 以为上面写了 ingress方式暴漏服务所以这个里面不用修改 clusterIP: name: harbor # clusterIP 服务名称 staticClusterIP: "" # 是否需要静态ip地址,一般不用静态ip地址 annotations: {} # 用于为ClusterIP服务添加注解。 ports: # 端口配置 httpPort: 80 httpsPort: 443 # nodePort 方式暴漏服务 以为上面写了 ingress方式暴漏服务所以这个里面不用修改 nodePort: name: harbor ports: http: port: 80 nodePort: 30002 https: port: 443 nodePort: 30003 # loadBalancer 方式暴漏服务 以为上面写了 ingress方式暴漏服务所以这个里面不用修改 loadBalancer: name: harbor IP: "" ports: httpPort: 80 httpsPort: 443 annotations: {} sourceRanges: [] externalURL: https://harbor.peopleurl.cn # 访问 Harbor 的域名 ## 这是关于Harbor内部TLS(传输层安全性)配置的部分。TLS用于加密Harbor各组件之间的通信,以确保数据在传输过程中的安全性。 internalTLS: enabled: false # 是否启用内部TLS。设置为false表示不启用TLS。 strong_ssl_ciphers: false certSource: "auto" # auto 表示自动生成证书, trustCa: "" core: secretName: "" crt: "" key: "" jobservice: secretName: "" crt: "" key: "" registry: secretName: "" crt: "" key: "" portal: secretName: "" crt: "" key: "" trivy: secretName: "" crt: "" key: "" ## 用于配置IPv4和IPv6在集群中的启用状态。 ipFamily: ipv6: enabled: true ipv4: enabled: true ## 配置个个组件的持戒话存储 persistence: enabled: true # 是否启用存储 resourcePolicy: "keep" # helm 删除操作期间保持 PVC(PersistentVolumeClaim)不变。如果不设置或为空,则在删除 Helm chart 时会删除 PVC persistentVolumeClaim: registry: existingClaim: "" # 如果要使用现有的 PVC,则指定其名称。如果为空,则会动态创建一个新的 PVC。 storageClass: "" # 用于供应存储的存储类。如果为空,则使用默认的存储类。设置为 "-" 以禁用动态供应。 subPath: "" # 如果 PVC 与其他组件共享,则指定子路径。 accessMode: ReadWriteOnce # 访问模式 size: 5Gi # 存储卷大小 annotations: {} # 是否添加PVC注解 jobservice: jobLog: existingClaim: "" storageClass: "" subPath: "" accessMode: ReadWriteOnce size: 1Gi annotations: {} database: existingClaim: "" storageClass: "" subPath: "" accessMode: ReadWriteOnce size: 1Gi annotations: {} redis: existingClaim: "" storageClass: "" subPath: "" accessMode: ReadWriteOnce size: 1Gi annotations: {} trivy: existingClaim: "" storageClass: "" subPath: "" accessMode: ReadWriteOnce size: 5Gi annotations: {} ## 对象存储配置 imageChartStorage: disableredirect: false # 是否禁用重定向。对于不支持重定向的存储后端(如使用 MinIO 作为 S3 存储类型),应将其设置为 true。默认情况下,它设置为 false。 type: filesystem # 指定存储类型。可选项包括 "filesystem", "azure", "gcs", "s3", "swift", "oss" 等。这里设置为 "filesystem",表示使用文件系统作为存储后端。 filesystem: rootdirectory: /storage # 指定文件系统上的根目录,用于存储镜像和图表 #maxthreads: 100 # 指定用于处理存储请求的最大线程数。 azure: accountname: accountname accountkey: base64encodedaccountkey container: containername existingSecret: "" gcs: bucket: bucketname encodedkey: base64-encoded-json-key-file existingSecret: "" useWorkloadIdentity: false s3: region: us-west-1 bucket: bucketname swift: authurl: https://storage.myprovider.com/v3/auth username: username password: password container: containername existingSecret: "" oss: accesskeyid: accesskeyid accesskeysecret: accesskeysecret region: regionname bucket: bucketname existingSecret: "" imagePullPolicy: IfNotPresent # 镜像拉去策略 imagePullSecrets: # 用于从私有容器镜像仓库拉取镜像时提供凭据的字段。它允许你定义一组密钥(Secrets),这些密钥包含用于访问私有仓库的凭据(如用户名和密码或访问令牌)。 updateStrategy: # Pod 更新策略 type: RollingUpdate logLevel: info # 定义了日志记录的级别。 existingSecretAdminPasswordKey: HARBOR_ADMIN_PASSWORD # 这个配置项用于指定一个已经存在的 Kubernetes Secret 中包含 Harbor 管理员初始密码的键名。如果你设置了这个值,那么 Harbor 就不会使用 harborAdminPassword 配置项中的密码,而是会查找指定的 Secret 并使用该 Secret 中指定键名的值作为管理员密码。 harborAdminPassword: "Harbor12345" # 这是 Harbor 管理员的初始密码。默认情况下,当你首次启动 Harbor 时,你会使用这个密码登录到 Harbor 的管理界面。 caSecretName: "" # 这个配置项用于指定一个包含 CA 证书(通常是 ca.crt 文件)的 Kubernetes Secret 的名称。如果你设置了这个值,那么当 Harbor 不自动生成证书时,用户可以通过 Harbor 的管理界面下载这个 CA 证书。这通常用于客户端(如 Docker 客户端)在访问 Harbor 时进行验证。 secretKey: "not-a-secure-key" # 这个配置项用于指定一个加密密钥,Harbor 会使用这个密钥来加密一些敏感数据(如密码)。出于安全考虑,这个密钥应该是一个足够复杂的、长度为 16 个字符的字符串。 existingSecretSecretKey: "" # 这个配置项与 secretKey 类似,但是它允许你指定一个已经存在的 Kubernetes Secret 中包含加密密钥的键名。如果你设置了这个值,那么 Harbor 就不会使用 secretKey 配置项中的密钥,而是会查找指定的 Secret 并使用该 Secret 中指定键名的值作为加密密钥。 ## 这段配置片段是用于配置 Harbor 及其组件使用的代理设置,并设置是否启用 Helm 迁移钩子的 proxy: httpProxy: httpsProxy: noProxy: 127.0.0.1,localhost,.local,.internal components: - core - jobservice - trivy enableMigrateHelmHook: false # 是否启用迁移钩子 ## 这部分是关于 Nginx 的配置,Nginx 通常用作 Harbor 的反向代理和负载均衡器。 nginx: image: # nginx 镜像 repository: goharbor/nginx-photon tag: v2.10.2 serviceAccountName: "" # 用于指定 Kubernetes 服务账户的名称,但在这里它是空的,意味着将使用默认的服务账户。 automountServiceAccountToken: false # 指定是否自动挂载服务账户令牌到 Pod 中。在这里它被设置为 false。 replicas: 1 # nginx 副本数量 revisionHistoryLimit: 10 # 保留旧版本的数量 ## 下面这五个配置 是用于更细粒度地控制 Pod 调度的选项。 extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: [] ############################# podAnnotations: {} # 可以为 Nginx 的 Pod 添加额外的注释 podLabels: {} # 添加标签 priorityClassName: # 指定了 Pod 的优先级类,用于在资源紧张时决定 Pod 的调度顺序。 ## 下面这些全是 Harbor 组件相关的Pod 配置大致和 nginx 相关的配置一样的。 portal: image: repository: goharbor/harbor-portal tag: v2.10.2 serviceAccountName: "" automountServiceAccountToken: false replicas: 1 revisionHistoryLimit: 10 extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: [] podAnnotations: {} podLabels: {} serviceAnnotations: {} priorityClassName: core: image: repository: goharbor/harbor-core tag: v2.10.2 serviceAccountName: "" automountServiceAccountToken: false replicas: 1 revisionHistoryLimit: 10 startupProbe: enabled: true initialDelaySeconds: 10 # resources: # requests: # memory: 256Mi # cpu: 100m extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: [] podAnnotations: {} podLabels: {} serviceAnnotations: {} configureUserSettings: quotaUpdateProvider: db secret: "" existingSecret: "" secretName: "" tokenKey: | tokenCert: | xsrfKey: "" existingXsrfSecret: "" existingXsrfSecretKey: CSRF_KEY priorityClassName: artifactPullAsyncFlushDuration: gdpr: deleteUser: false auditLogsCompliant: false jobservice: image: repository: goharbor/harbor-jobservice tag: v2.10.2 replicas: 1 revisionHistoryLimit: 10 serviceAccountName: "" automountServiceAccountToken: false maxJobWorkers: 10 jobLoggers: - file loggerSweeperDuration: 14 #days notification: webhook_job_max_retry: 3 webhook_job_http_client_timeout: 3 # in seconds reaper: max_update_hours: 24 max_dangling_hours: 168 extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: podAnnotations: {} podLabels: {} secret: "" existingSecret: "" existingSecretKey: JOBSERVICE_SECRET priorityClassName: registry: serviceAccountName: "" automountServiceAccountToken: false registry: image: repository: goharbor/registry-photon tag: v2.10.2 extraEnvVars: [] controller: image: repository: goharbor/harbor-registryctl tag: v2.10.2 extraEnvVars: [] replicas: 1 revisionHistoryLimit: 10 nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: [] podAnnotations: {} podLabels: {} priorityClassName: secret: "" existingSecret: "" existingSecretKey: REGISTRY_HTTP_SECRET relativeurls: false credentials: username: "harbor_registry_user" password: "harbor_registry_password" existingSecret: "" htpasswdString: "" middleware: enabled: false type: cloudFront cloudFront: baseurl: example.cloudfront.net keypairid: KEYPAIRID duration: 3000s ipfilteredby: none privateKeySecret: "my-secret" upload_purging: enabled: true age: 168h interval: 24h dryrun: false trivy: enabled: true image: repository: goharbor/trivy-adapter-photon tag: v2.10.2 serviceAccountName: "" automountServiceAccountToken: false replicas: 1 debugMode: false vulnType: "os,library" severity: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL" ignoreUnfixed: false insecure: false gitHubToken: "" skipUpdate: false skipJavaDBUpdate: false offlineScan: false securityCheck: "vuln" timeout: 5m0s resources: requests: cpu: 200m memory: 512Mi limits: cpu: 1 memory: 1Gi extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: [] podAnnotations: {} podLabels: {} priorityClassName: database: type: internal internal: serviceAccountName: "" automountServiceAccountToken: false image: repository: goharbor/harbor-db tag: v2.10.2 password: "changeit" shmSizeLimit: 512Mi livenessProbe: timeoutSeconds: 1 readinessProbe: timeoutSeconds: 1 extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} priorityClassName: initContainer: migrator: {} # resources: # requests: # memory: 128Mi # cpu: 100m permissions: {} # resources: # requests: # memory: 128Mi # cpu: 100m external: host: "192.168.0.1" port: "5432" username: "user" password: "password" coreDatabase: "registry" existingSecret: "" sslmode: "disable" maxIdleConns: 100 maxOpenConns: 900 podAnnotations: {} podLabels: {} redis: type: internal internal: serviceAccountName: "" automountServiceAccountToken: false image: repository: goharbor/redis-photon tag: v2.10.2 # resources: # requests: # memory: 256Mi # cpu: 100m extraEnvVars: [] nodeSelector: {} tolerations: [] affinity: {} priorityClassName: jobserviceDatabaseIndex: "1" registryDatabaseIndex: "2" trivyAdapterIndex: "5" external: addr: "192.168.0.2:6379" sentinelMasterSet: "" coreDatabaseIndex: "0" jobserviceDatabaseIndex: "1" registryDatabaseIndex: "2" trivyAdapterIndex: "5" username: "" password: "" existingSecret: "" podAnnotations: {} podLabels: {} exporter: replicas: 1 revisionHistoryLimit: 10 # resources: # requests: # memory: 256Mi # cpu: 100m extraEnvVars: [] podAnnotations: {} podLabels: {} serviceAccountName: "" automountServiceAccountToken: false image: repository: goharbor/harbor-exporter tag: v2.10.2 nodeSelector: {} tolerations: [] affinity: {} topologySpreadConstraints: [] cacheDuration: 23 cacheCleanInterval: 14400 priorityClassName: ## Metrics(指标) metrics: enabled: false # 表示指标收集是禁用的。如果设置为true,系统将收集并暴露一些指标。 core: path: /metrics port: 8001 registry: path: /metrics port: 8001 jobservice: path: /metrics port: 8001 exporter: path: /metrics port: 8001 serviceMonitor: # 这是一个关于Prometheus的ServiceMonitor的配置。 enabled: false # 表示ServiceMonitor是禁用的。如果设置为true,Prometheus可以通过ServiceMonitor自动发现和抓取这些指标。 additionalLabels: {} interval: "" metricRelabelings: [] relabelings: [] trace: enabled: false # 表示追踪功能是禁用的。如果设置为true,系统可能会生成和发送追踪数据。 provider: jaeger sample_rate: 1 jaeger: endpoint: http://hostname:14268/api/traces otel: endpoint: hostname:4318 url_path: /v1/traces compression: false insecure: true timeout: 10 cache: enabled: false # 表示缓存功能是禁用的。如果设置为true,系统可能会使用缓存来存储一些数据以加速访问。 expireHours: 24 # 如果缓存功能启用,这个值定义了缓存项在过期前可以保留的小时数。这里是24小时。
helm install harbor ./ -n harbor
NAME: harbor
LAST DEPLOYED: Fri May 17 14:27:18 2024
NAMESPACE: harbor
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Please wait for several minutes for Harbor deployment to complete.
Then you should be able to visit the Harbor portal at https://harbor.test.cn
For more details, please visit https://github.com/goharbor/harbor
查看Pod状态
[root@master01 ~]# kubectl get po -n warehouse
NAME READY STATUS RESTARTS AGE
harbor-core-689f9844df-8rfs2 1/1 Running 3 (2d20h ago) 2d20h
harbor-database-0 1/1 Running 0 2d20h
harbor-exporter-7f8d75b6-7qkvj 1/1 Running 3 (2d20h ago) 2d20h
harbor-jobservice-7c54445bc8-f4dkg 1/1 Running 5 (2d20h ago) 2d20h
harbor-portal-57867fcdb9-mr2lh 1/1 Running 0 2d20h
harbor-redis-0 1/1 Running 0 2d20h
harbor-registry-58b695746b-www56 2/2 Running 0 2d20h
harbor-trivy-0 1/1 Running 0 2d20h
到此部署完成 访问的话 我这里是通过 ingress 方式访问的 账号密码都在配置文件里面。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。