网址:https://www.qikqiak.com/post/harbor-quick-install/

安装 Harbor

Harbor 支持多种安装方式,源码目录下面默认有一个安装脚本(make/install.sh),采用 docker-compose 的形式运行 Harbor 各个组件,和前面的课程一样,我们这里依然还是将 Harbor 安装到 Kubernetes 集群中,如果我们对 Harbor 的各个组件之间的运行关系非常熟悉,同样的,我们可以自己手动编写资源清单文件进行部署,不过 Harbor 源码目录中也为我们提供了生成这些资源清单的脚本文件了(make/kubernetes/k8s-prepare),我们只需要执行下面的命令即可为我们生成所需要用到的 YAML 文件了:

  1. $ python make/kubernetes/k8s-prepare

当然了如果上面的一些基本配置不能满足你的需求,你也可以做一些更高级的配置。你可以在make/common/templates目录下面找到所有的 Harbor 的配置模板,做相应的修改即可。

不过我们这里给大家介绍另外一种简单的安装方法:Helm,Harbor 官方提供了对应的 Helm Chart 包,所以我们可以很容易安装。

首先下载 Harbor Chart 包到要安装的集群上:

  1. $ git clone https://github.com/goharbor/harbor-helm

切换到我们需要安装的分支,比如我们这里使用 1.0.0分支:

  1. $ cd harbor-helm
  2. $ git checkout 1.0.0

安装 Helm Chart 包最重要的当然是values.yaml文件了,我们可以通过覆盖该文件中的属性来改变配置:

  1. expose:
  2. # 设置暴露服务的方式。将类型设置为 ingress、clusterIP或nodePort并补充对应部分的信息。
  3. type: ingress
  4. tls:
  5. # 是否开启 tls,注意:如果类型是 ingress 并且tls被禁用,则在pull/push镜像时,则必须包含端口。详细查看文档:https://github.com/goharbor/harbor/issues/5291。
  6. enabled: true
  7. # 如果你想使用自己的 TLS 证书和私钥,请填写这个 secret 的名称,这个 secret 必须包含名为 tls.crt 和 tls.key 的证书和私钥文件,如果没有设置则会自动生成证书和私钥文件。
  8. secretName: ""
  9. # 默认 Notary 服务会使用上面相同的证书和私钥文件,如果你想用一个独立的则填充下面的字段,注意只有类型是 ingress 的时候才需要。
  10. notarySecretName: ""
  11. # common name 是用于生成证书的,当类型是 clusterIP 或者 nodePort 并且 secretName 为空的时候才需要
  12. commonName: ""
  13. ingress:
  14. hosts:
  15. core: core.harbor.domain
  16. notary: notary.harbor.domain
  17. annotations:
  18. ingress.kubernetes.io/ssl-redirect: "true"
  19. nginx.ingress.kubernetes.io/ssl-redirect: "true"
  20. ingress.kubernetes.io/proxy-body-size: "0"
  21. nginx.ingress.kubernetes.io/proxy-body-size: "0"
  22. clusterIP:
  23. # ClusterIP 服务的名称
  24. name: harbor
  25. ports:
  26. httpPort: 80
  27. httpsPort: 443
  28. # Notary 服务监听端口,只有当 notary.enabled 设置为 true 的时候有效
  29. notaryPort: 4443
  30. nodePort:
  31. # NodePort 服务名称
  32. name: harbor
  33. ports:
  34. http:
  35. port: 80
  36. nodePort: 30002
  37. https:
  38. port: 443
  39. nodePort: 30003
  40. notary:
  41. port: 4443
  42. nodePort: 30004
  43. # Harbor 核心服务外部访问 URL。主要用于:
  44. # 1) 补全 portal 页面上面显示的 docker/helm 命令
  45. # 2) 补全返回给 docker/notary 客户端的 token 服务 URL
  46. # 格式:protocol://domain[:port]。
  47. # 1) 如果 expose.type=ingress,"domain"的值就是 expose.ingress.hosts.core 的值
  48. # 2) 如果 expose.type=clusterIP,"domain"的值就是 expose.clusterIP.name 的值
  49. # 3) 如果 expose.type=nodePort,"domain"的值就是 k8s 节点的 IP 地址
  50. # 如果在代理后面部署 Harbor,请将其设置为代理的 URL
  51. externalURL: https://core.harbor.domain
  52. # 默认情况下开启数据持久化,在k8s集群中需要动态的挂载卷默认需要一个StorageClass对象。
  53. # 如果你有已经存在可以使用的持久卷,需要在"storageClass"中指定你的 storageClass 或者设置 "existingClaim"。
  54. #
  55. # 对于存储 docker 镜像和 Helm charts 包,你也可以用 "azure"、"gcs"、"s3"、"swift" 或者 "oss",直接在 "imageChartStorage" 区域设置即可
  56. persistence:
  57. enabled: true
  58. # 设置成"keep"避免在执行 helm 删除操作期间移除 PVC,留空则在 chart 被删除后删除 PVC
  59. resourcePolicy: "keep"
  60. persistentVolumeClaim:
  61. registry:
  62. # 使用一个存在的 PVC(必须在绑定前先手动创建)
  63. existingClaim: ""
  64. # 指定"storageClass",或者使用默认的 StorageClass 对象,设置成"-"禁用动态分配挂载卷
  65. storageClass: ""
  66. subPath: ""
  67. accessMode: ReadWriteOnce
  68. size: 5Gi
  69. chartmuseum:
  70. existingClaim: ""
  71. storageClass: ""
  72. subPath: ""
  73. accessMode: ReadWriteOnce
  74. size: 5Gi
  75. jobservice:
  76. existingClaim: ""
  77. storageClass: ""
  78. subPath: ""
  79. accessMode: ReadWriteOnce
  80. size: 1Gi
  81. # 如果使用外部的数据库服务,下面的设置将会被忽略
  82. database:
  83. existingClaim: ""
  84. storageClass: ""
  85. subPath: ""
  86. accessMode: ReadWriteOnce
  87. size: 1Gi
  88. # 如果使用外部的 Redis 服务,下面的设置将会被忽略
  89. redis:
  90. existingClaim: ""
  91. storageClass: ""
  92. subPath: ""
  93. accessMode: ReadWriteOnce
  94. size: 1Gi
  95. # 定义使用什么存储后端来存储镜像和 charts 包,详细文档地址:https://github.com/docker/distribution/blob/master/docs/configuration.md#storage
  96. imageChartStorage:
  97. # 正对镜像和chart存储是否禁用跳转,对于一些不支持的后端(例如对于使用minio的`s3`存储),需要禁用它。为了禁止跳转,只需要设置`disableredirect=true`即可,详细文档地址:https://github.com/docker/distribution/blob/master/docs/configuration.md#redirect
  98. disableredirect: false
  99. # 指定存储类型:"filesystem", "azure", "gcs", "s3", "swift", "oss",在相应的区域填上对应的信息。
  100. # 如果你想使用 pv 则必须设置成"filesystem"类型
  101. type: filesystem
  102. filesystem:
  103. rootdirectory: /storage
  104. #maxthreads: 100
  105. azure:
  106. accountname: accountname
  107. accountkey: base64encodedaccountkey
  108. container: containername
  109. #realm: core.windows.net
  110. gcs:
  111. bucket: bucketname
  112. # The base64 encoded json file which contains the key
  113. encodedkey: base64-encoded-json-key-file
  114. #rootdirectory: /gcs/object/name/prefix
  115. #chunksize: "5242880"
  116. s3:
  117. region: us-west-1
  118. bucket: bucketname
  119. #accesskey: awsaccesskey
  120. #secretkey: awssecretkey
  121. #regionendpoint: http://myobjects.local
  122. #encrypt: false
  123. #keyid: mykeyid
  124. #secure: true
  125. #v4auth: true
  126. #chunksize: "5242880"
  127. #rootdirectory: /s3/object/name/prefix
  128. #storageclass: STANDARD
  129. swift:
  130. authurl: https://storage.myprovider.com/v3/auth
  131. username: username
  132. password: password
  133. container: containername
  134. #region: fr
  135. #tenant: tenantname
  136. #tenantid: tenantid
  137. #domain: domainname
  138. #domainid: domainid
  139. #trustid: trustid
  140. #insecureskipverify: false
  141. #chunksize: 5M
  142. #prefix:
  143. #secretkey: secretkey
  144. #accesskey: accesskey
  145. #authversion: 3
  146. #endpointtype: public
  147. #tempurlcontainerkey: false
  148. #tempurlmethods:
  149. oss:
  150. accesskeyid: accesskeyid
  151. accesskeysecret: accesskeysecret
  152. region: regionname
  153. bucket: bucketname
  154. #endpoint: endpoint
  155. #internal: false
  156. #encrypt: false
  157. #secure: true
  158. #chunksize: 10M
  159. #rootdirectory: rootdirectory
  160. imagePullPolicy: IfNotPresent
  161. logLevel: debug
  162. # Harbor admin 初始密码,Harbor 启动后通过 Portal 修改该密码
  163. harborAdminPassword: "Harbor12345"
  164. # 用于加密的一个 secret key,必须是一个16位的字符串
  165. secretKey: "not-a-secure-key"
  166. # 如果你通过"ingress"保留服务,则下面的Nginx不会被使用
  167. nginx:
  168. image:
  169. repository: goharbor/nginx-photon
  170. tag: v1.7.0
  171. replicas: 1
  172. # resources:
  173. # requests:
  174. # memory: 256Mi
  175. # cpu: 100m
  176. nodeSelector: {}
  177. tolerations: []
  178. affinity: {}
  179. ## 额外的 Deployment 的一些 annotations
  180. podAnnotations: {}
  181. portal:
  182. image:
  183. repository: goharbor/harbor-portal
  184. tag: v1.7.0
  185. replicas: 1
  186. # resources:
  187. # requests:
  188. # memory: 256Mi
  189. # cpu: 100m
  190. nodeSelector: {}
  191. tolerations: []
  192. affinity: {}
  193. podAnnotations: {}
  194. core:
  195. image:
  196. repository: goharbor/harbor-core
  197. tag: v1.7.0
  198. replicas: 1
  199. # resources:
  200. # requests:
  201. # memory: 256Mi
  202. # cpu: 100m
  203. nodeSelector: {}
  204. tolerations: []
  205. affinity: {}
  206. podAnnotations: {}
  207. adminserver:
  208. image:
  209. repository: goharbor/harbor-adminserver
  210. tag: v1.7.0
  211. replicas: 1
  212. # resources:
  213. # requests:
  214. # memory: 256Mi
  215. # cpu: 100m
  216. nodeSelector: {}
  217. tolerations: []
  218. affinity: {}
  219. podAnnotations: {}
  220. jobservice:
  221. image:
  222. repository: goharbor/harbor-jobservice
  223. tag: v1.7.0
  224. replicas: 1
  225. maxJobWorkers: 10
  226. # jobs 的日志收集器:"file", "database" or "stdout"
  227. jobLogger: file
  228. # resources:
  229. # requests:
  230. # memory: 256Mi
  231. # cpu: 100m
  232. nodeSelector: {}
  233. tolerations: []
  234. affinity: {}
  235. podAnnotations: {}
  236. registry:
  237. registry:
  238. image:
  239. repository: goharbor/registry-photon
  240. tag: v2.6.2-v1.7.0
  241. controller:
  242. image:
  243. repository: goharbor/harbor-registryctl
  244. tag: v1.7.0
  245. replicas: 1
  246. nodeSelector: {}
  247. tolerations: []
  248. affinity: {}
  249. podAnnotations: {}
  250. chartmuseum:
  251. enabled: true
  252. image:
  253. repository: goharbor/chartmuseum-photon
  254. tag: v0.7.1-v1.7.0
  255. replicas: 1
  256. # resources:
  257. # requests:
  258. # memory: 256Mi
  259. # cpu: 100m
  260. nodeSelector: {}
  261. tolerations: []
  262. affinity: {}
  263. podAnnotations: {}
  264. clair:
  265. enabled: true
  266. image:
  267. repository: goharbor/clair-photon
  268. tag: v2.0.7-v1.7.0
  269. replicas: 1
  270. # 用于从 Internet 更新漏洞数据库的http(s)代理
  271. httpProxy:
  272. httpsProxy:
  273. # clair 更新程序的间隔,单位为小时,设置为0来禁用
  274. updatersInterval: 12
  275. # resources:
  276. # requests:
  277. # memory: 256Mi
  278. # cpu: 100m
  279. nodeSelector: {}
  280. tolerations: []
  281. affinity: {}
  282. podAnnotations: {}
  283. notary:
  284. enabled: true
  285. server:
  286. image:
  287. repository: goharbor/notary-server-photon
  288. tag: v0.6.1-v1.7.0
  289. replicas: 1
  290. # resources:
  291. # requests:
  292. # memory: 256Mi
  293. # cpu: 100m
  294. signer:
  295. image:
  296. repository: goharbor/notary-signer-photon
  297. tag: v0.6.1-v1.7.0
  298. replicas: 1
  299. # resources:
  300. # requests:
  301. # memory: 256Mi
  302. # cpu: 100m
  303. nodeSelector: {}
  304. tolerations: []
  305. affinity: {}
  306. podAnnotations: {}
  307. database:
  308. # 如果使用外部的数据库,则设置 type=external,然后填写 external 区域的一些连接信息
  309. type: internal
  310. internal:
  311. image:
  312. repository: goharbor/harbor-db
  313. tag: v1.7.0
  314. # 内部的数据库的初始化超级用户的密码
  315. password: "changeit"
  316. # resources:
  317. # requests:
  318. # memory: 256Mi
  319. # cpu: 100m
  320. nodeSelector: {}
  321. tolerations: []
  322. affinity: {}
  323. external:
  324. host: "192.168.0.1"
  325. port: "5432"
  326. username: "user"
  327. password: "password"
  328. coreDatabase: "registry"
  329. clairDatabase: "clair"
  330. notaryServerDatabase: "notary_server"
  331. notarySignerDatabase: "notary_signer"
  332. sslmode: "disable"
  333. podAnnotations: {}
  334. redis:
  335. # 如果使用外部的 Redis 服务,设置 type=external,然后补充 external 部分的连接信息。
  336. type: internal
  337. internal:
  338. image:
  339. repository: goharbor/redis-photon
  340. tag: v1.7.0
  341. # resources:
  342. # requests:
  343. # memory: 256Mi
  344. # cpu: 100m
  345. nodeSelector: {}
  346. tolerations: []
  347. affinity: {}
  348. external:
  349. host: "192.168.0.2"
  350. port: "6379"
  351. # coreDatabaseIndex 必须设置为0
  352. coreDatabaseIndex: "0"
  353. jobserviceDatabaseIndex: "1"
  354. registryDatabaseIndex: "2"
  355. chartmuseumDatabaseIndex: "3"
  356. password: ""
  357. podAnnotations: {}

有了上面的配置说明,则我们可以根据自己的需求来覆盖上面的值,比如我们这里新建一个 qikqiak-values.yaml 的文件,文件内容如下:

  1. expose:
  2. type: ingress
  3. tls:
  4. enabled: true
  5. ingress:
  6. hosts:
  7. core: registry.qikqiak.com
  8. notary: notary.qikqiak.com
  9. annotations:
  10. kubernetes.io/ingress.class: "traefik"
  11. ingress.kubernetes.io/ssl-redirect: "true"
  12. ingress.kubernetes.io/proxy-body-size: "0"
  13. externalURL: https://registry.qikqiak.com
  14. persistence:
  15. enabled: true
  16. resourcePolicy: "keep"
  17. persistentVolumeClaim:
  18. registry:
  19. storageClass: "harbor-data"
  20. chartmuseum:
  21. storageClass: "harbor-data"
  22. jobservice:
  23. storageClass: "harbor-data"
  24. database:
  25. storageClass: "harbor-data"
  26. redis:
  27. storageClass: "harbor-data"

其中需要我们定制的部分很少,我们将域名替换成我们自己的,使用默认的 Ingress 方式暴露服务,其他需要我们手动配置的部分就是数据持久化的部分,我们需要提前为上面的这些服务创建好可用的 PVC 或者 StorageClass 对象,比如我们这里使用一个名为 harbor-data 的 StorageClass 资源对象,当然也可以根据我们实际的需求修改 accessMode 或者存储容量:(harbor-data-sc.yaml)

  1. apiVersion: storage.k8s.io/v1
  2. kind: StorageClass
  3. metadata:
  4. name: harbor-data
  5. provisioner: fuseim.pri/ifs

先新建上面的 StorageClass 资源对象:

  1. $ kubectl create -f harbor-data-sc.yaml
  2. storageclass.storage.k8s.io "harbor-data" created

创建完成后,使用上面自定义的 values 文件安装:

  1. $ helm install --name harbor -f qikqiak-values.yaml . --namespace kube-ops
  2. NAME: harbor
  3. LAST DEPLOYED: Fri Feb 22 22:39:22 2019
  4. NAMESPACE: kube-ops
  5. STATUS: DEPLOYED
  6. RESOURCES:
  7. ==> v1/StatefulSet
  8. NAME DESIRED CURRENT AGE
  9. harbor-harbor-database 1 1 0s
  10. harbor-harbor-redis 1 1 0s
  11. ==> v1beta1/Ingress
  12. NAME HOSTS ADDRESS PORTS AGE
  13. harbor-harbor-ingress registry.qikqiak.com,notary.qikqiak.com 80, 443 0s
  14. ==> v1/Pod(related)
  15. NAME READY STATUS RESTARTS AGE
  16. harbor-harbor-adminserver-58c855568c-jnpvq 0/1 ContainerCreating 0 0s
  17. harbor-harbor-chartmuseum-58d6c9b898-4csmd 0/1 Pending 0 0s
  18. harbor-harbor-clair-5c7689585-hd2br 0/1 ContainerCreating 0 0s
  19. harbor-harbor-core-6f56879469-rbthd 0/1 ContainerCreating 0 0s
  20. harbor-harbor-jobservice-74d7795cdb-bhzdm 0/1 ContainerCreating 0 0s
  21. harbor-harbor-notary-server-69cdbdfb56-ggc49 0/1 Pending 0 0s
  22. harbor-harbor-notary-signer-8499dc4db7-f78cd 0/1 Pending 0 0s
  23. harbor-harbor-portal-55c45c558d-dmj48 0/1 Pending 0 0s
  24. harbor-harbor-registry-5569fcbf78-5grds 0/2 Pending 0 0s
  25. harbor-harbor-database-0 0/1 Pending 0 0s
  26. harbor-harbor-redis-0 0/1 Pending 0 0s
  27. ==> v1/Secret
  28. NAME TYPE DATA AGE
  29. harbor-harbor-adminserver Opaque 4 1s
  30. harbor-harbor-chartmuseum Opaque 1 1s
  31. harbor-harbor-core Opaque 4 1s
  32. harbor-harbor-database Opaque 1 1s
  33. harbor-harbor-ingress kubernetes.io/tls 3 1s
  34. harbor-harbor-jobservice Opaque 1 1s
  35. harbor-harbor-registry Opaque 1 1s
  36. ==> v1/ConfigMap
  37. NAME DATA AGE
  38. harbor-harbor-adminserver 39 1s
  39. harbor-harbor-chartmuseum 24 1s
  40. harbor-harbor-clair 1 1s
  41. harbor-harbor-core 1 1s
  42. harbor-harbor-jobservice 1 1s
  43. harbor-harbor-notary-server 5 1s
  44. harbor-harbor-registry 2 1s
  45. ==> v1/PersistentVolumeClaim
  46. NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
  47. harbor-harbor-chartmuseum Pending harbor-data 1s
  48. harbor-harbor-jobservice Bound pvc-a8a35d0e-36af-11e9-bcd8-525400db4df7 1Gi RWO harbor-data 1s
  49. harbor-harbor-registry Bound pvc-a8a466e9-36af-11e9-bcd8-525400db4df7 5Gi RWO harbor-data 1s
  50. ==> v1/Service
  51. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  52. harbor-harbor-adminserver ClusterIP 10.108.3.242 <none> 80/TCP 1s
  53. harbor-harbor-chartmuseum ClusterIP 10.101.49.103 <none> 80/TCP 1s
  54. harbor-harbor-clair ClusterIP 10.110.173.153 <none> 6060/TCP 1s
  55. harbor-harbor-core ClusterIP 10.105.178.198 <none> 80/TCP 1s
  56. harbor-harbor-database ClusterIP 10.102.101.155 <none> 5432/TCP 0s
  57. harbor-harbor-jobservice ClusterIP 10.100.127.32 <none> 80/TCP 0s
  58. harbor-harbor-notary-server ClusterIP 10.105.25.64 <none> 4443/TCP 0s
  59. harbor-harbor-notary-signer ClusterIP 10.108.92.82 <none> 7899/TCP 0s
  60. harbor-harbor-portal ClusterIP 10.103.111.161 <none> 80/TCP 0s
  61. harbor-harbor-redis ClusterIP 10.107.205.3 <none> 6379/TCP 0s
  62. harbor-harbor-registry ClusterIP 10.100.87.29 <none> 5000/TCP,8080/TCP 0s
  63. ==> v1/Deployment
  64. NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
  65. harbor-harbor-adminserver 1 1 1 0 0s
  66. harbor-harbor-chartmuseum 1 1 1 0 0s
  67. harbor-harbor-clair 1 1 1 0 0s
  68. harbor-harbor-core 1 1 1 0 0s
  69. harbor-harbor-jobservice 1 1 1 0 0s
  70. harbor-harbor-notary-server 1 1 1 0 0s
  71. harbor-harbor-notary-signer 1 1 1 0 0s
  72. harbor-harbor-portal 1 1 1 0 0s
  73. harbor-harbor-registry 1 0 0 0 0s
  74. NOTES:
  75. Please wait for several minutes for Harbor deployment to complete.
  76. Then you should be able to visit the Harbor portal at https://registry.qikqiak.com.
  77. For more details, please visit https://github.com/goharbor/harbor.

上面是我们通过 Helm 安装所有涉及到的一些资源对象,稍微等一会儿,就可以安装成功了,查看对应的 Pod 状态:

  1. $ kubectl get pods -n kube-ops
  2. NAME READY STATUS RESTARTS AGE
  3. harbor-harbor-adminserver-58c855568c-7dqqb 1/1 Running 0 37m
  4. harbor-harbor-chartmuseum-58d6c9b898-4csmd 1/1 Running 0 49m
  5. harbor-harbor-clair-5c7689585-hd2br 1/1 Running 0 49m
  6. harbor-harbor-core-6f56879469-rbthd 1/1 Running 8 49m
  7. harbor-harbor-database-0 1/1 Running 0 49m
  8. harbor-harbor-jobservice-74d7795cdb-bhzdm 1/1 Running 7 49m
  9. harbor-harbor-notary-server-69cdbdfb56-vklbt 1/1 Running 0 20m
  10. harbor-harbor-notary-signer-8499dc4db7-f78cd 1/1 Running 0 49m
  11. harbor-harbor-portal-55c45c558d-dmj48 1/1 Running 0 49m
  12. harbor-harbor-redis-0 1/1 Running 0 49m
  13. harbor-harbor-registry-5569fcbf78-5grds 2/2 Running 0 49m

现在都是Running状态了,都成功运行起来了,查看下对应的 Ingress 对象:

  1. $ kubectl get ingress -n kube-ops
  2. NAME HOSTS ADDRESS PORTS AGE
  3. harbor-harbor-ingress registry.qikqiak.com,notary.qikqiak.com 80, 443 50m

如果你有自己的真正的域名,则将上面的两个域名解析到你的任意一个 Ingress Controller 的 Pod 所在的节点即可,我们这里为了演示方便,还是自己在本地的/etc/hosts里面添加上registry.qikqiak.comnotary.qikqiak.com的映射。

在第一次安装的时候比较顺畅,后面安装总是不成功,查看数据库的 Pod 日志出现database “registry” does not exist()的错误信息,如果 registry 数据库没有自动创建,我们可以进入数据库 Pod 中手动创建:

  1. # 1. 进入数据库 Pod
  2. $ kubectl exec -it harbor-harbor-database-0 -n kube-ops /bin/bash
  3. # 2. 连接数据库
  4. root [ / ]# psql --username postgres
  5. psql (9.6.10)
  6. Type "help" for help.
  7. # 3. 创建 registry 数据库
  8. postgres=# CREATE DATABASE registry ENCODING 'UTF8';
  9. CREATE DATABASE
  10. postgres=# \c registry;
  11. You are now connected to database "registry" as user "postgres".
  12. registry=# CREATE TABLE schema_migrations(version bigint not null primary key, dirty boolean not null);
  13. CREATE TABLE
  14. registry-# \quit

1.在 Kubernetes 在快速安装 Harbor的更多相关文章

  1. kubernetes实战(十):k8s使用Helm安装harbor

    1.基本概念 对于复杂的应用中间件,需要设置镜像运行的需求.环境变量,并且需要定制存储.网络等设置,最后设计和编写Deployment.Configmap.Service及Ingress等相关yaml ...

  2. kubernetes(K8S)快速安装与配置集群搭建图文教程

    kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...

  3. kubernetes 1.9 安装部署

    参考地址:https://github.com/gjmzj/kubeasz 引言 提供快速部署高可用k8s集群的工具,基于二进制方式部署和利用ansible-playbook实现自动化,既提供一键安装 ...

  4. traefik 结合 docker-compose 的快速安装及使用

    traefik 介绍 traefik 是一个为了让部署微服务更加便捷而诞生的现代HTTP反向代理.负载均衡工具. 它支持多种后台 (Docker, Swarm, Kubernetes, Maratho ...

  5. 快速安装k8s,版本为1.13.8

    利用rpm快速部署k8s #!/bin/bash #快速安装k8s #by love19791126 107420988@qq.com pwd=$(pwd) masteripaddr=#(ip a s ...

  6. kubernetes部署高可用Harbor

    前言 本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建. 部署Postgresql高可用集群.(本文选用Stolon进行管理,请查看文章<kuberne ...

  7. ubuntu 安装harbor仓库

    一.介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的 ...

  8. 教你在Kubernetes中快速部署ES集群

    摘要:ES集群是进行大数据存储和分析,快速检索的利器,本文简述了ES的集群架构,并提供了在Kubernetes中快速部署ES集群的样例:对ES集群的监控运维工具进行了介绍,并提供了部分问题定位经验,最 ...

  9. CocoaPods 的简单快速安装方法

    CocoaPods 的简单快速安装方法(Setting up CocoaPods master repo 卡着不动,是因为淘宝镜像已经不能用了. 一.git clone方法安装cocoapods 镜像 ...

随机推荐

  1. skip-host-cache skip-name-resolve

    在mysql 的data 文件夹下 生成了一个.err的文件,打开发展,经常有人访问这个,服务器部署在腾讯云上. 2017-05-23 0:49:04 2996 [Warning] IP addres ...

  2. 科学计算库Numpy基础&提升(理解+重要函数讲解)

    Intro 对于同样的数值计算任务,使用numpy比直接编写python代码实现 优点: 代码更简洁: numpy直接以数组.矩阵为粒度计算并且支持大量的数学函数,而python需要用for循环从底层 ...

  3. 2022.7.19 $\mathcal{S\,\,T\,L}$

    \(STL\) 容器的共有特征:.begin() .end()//表示最后一个元素的后面那个位置 .size()//无符号整型 .swap(b) ::iterator//迭代器 关于迭代器 迭代器可以 ...

  4. Webpack干货系列 | 在 Webpack 5 集成 ESLint 的方法

    程序员优雅哥(youyacoder)简介:十年程序员,呆过央企外企私企,做过前端后端架构.分享vue.Java等前后端技术和架构. 本文摘要:主要讲解运用Webpack 5 中集成 ESLint 的方 ...

  5. Java代码优化的30个小技巧

    前言 我之前写过两篇关于优化相关的问题:<聊聊sql优化的15个小技巧>和<聊聊接口性能优化的11个小技巧>,发表之后,在全网受到广大网友的好评.阅读量和点赞率都很高,说明了这 ...

  6. Hbase学习(三)过滤器 java API

    Hbase学习(三)过滤器 HBase 的基本 API,包括增.删.改.查等. 增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根 ...

  7. Mac os:将Homebrew的下载源换成国内镜像增加下载速度(阿里云镜像)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_135 可能所有的mac os系统爱好者都遇到过下面这种倒霉情况,在网络环境不太好的时候,你满怀期待的敲下 brew install ...

  8. Vue 自定义事件 && 组件通信

    1 App.vue 2 <template> 3 <!-- 4 组件的自定义事件: 5 1.一种组件间通信的方式,使用于:子组件===>父组件 6 2.使用场景:A是父组件,B ...

  9. ToString()格式化输出

    C 货币 2.5.ToString("C") ¥2.50 D 十进制数 25.ToString("D5") 00025 E 科学型 25000.ToString ...

  10. PHP 获取数组长度

    count()函数,默认是获取一维数组,参数为:COUNT_NORMAL,添加第二个参数:COUNT_RECURSIVE,则可以获取多维关联数组的长度(意思为递归获取),例如:count($arr, ...