kubernetes部署高可用Harbor
前言
本文Harbor高可用依照Harbor官网部署,主要思路如下,大家可以根据具体情况选择搭建。
- 部署Postgresql高可用集群。(本文选用Stolon进行管理,请查看文章《kubernetes下Stolon部署高可用Postgresql》)
- 部署redis高可用集群。(本文选用Helm对redis进行高可用部署,请查看文章《kubernetes部署高可用redis》,该文以整理好redis编排文件可直接使用)
- 部署Harbor高可用集群。(本文主要阐述Harbor的高可用部署,为《kubernetes搭建Harbor无坑及Harbor仓库同步》补充部分,请先行阅读)
一、Harbor部署前准备
本文仅说明高可用配置,其余部署请查看《kubernetes搭建Harbor无坑及Harbor仓库同步》
.安装方式
- helm安装
- 直接使用博主整理好的编排文件安装(通过Helm生成)
1.helm安装
安装Helm请查看《kubernetes搭建Harbor无坑及Harbor仓库同步》,其中包含Helm安装。
1.1.下载 harbor-helm
git clone https://github.com/goharbor/harbor-helm.git
cd XXX/harbor-helm
1.2.修改value.yaml
database的Postgresql配置
database:
# if external database is used, set "type" to "external"
# and fill the connection informations in "external" section
type: external
internal:
image:
repository: goharbor/harbor-db
tag: v1.8.2-dev
# The initial superuser password for internal database
password: "changeit"
# resources:
# requests:
# memory: 256Mi
# cpu: 100m
nodeSelector: {}
tolerations: []
affinity: {}
external:
host: "stolon-proxy-service" #管理postgresql的stolon的service,因为都在Pod中可相互访问
port: "5432"
username: "postgres"
password: "password1"
coreDatabase: "registry"
clairDatabase: "clair"
notaryServerDatabase: "notaryserver"
notarySignerDatabase: "notarysigner"
sslmode: "disable"
## Additional deployment annotations
podAnnotations: {}
redis的配置
redis:
# if external Redis is used, set "type" to "external"
# and fill the connection informations in "external" section
type: external
internal:
image:
repository: goharbor/redis-photon
tag: v1.8.2-dev
# resources:
# requests:
# memory: 256Mi
# cpu: 100m
nodeSelector: {}
tolerations: []
affinity: {}
external:
host: "10.8.4.133" #haproxy的地址通过haproxy管理redis集群
port: "6379"
# The "coreDatabaseIndex" must be "0" as the library Harbor
# used doesn't support configuring it
coreDatabaseIndex: "0"
jobserviceDatabaseIndex: "1"
registryDatabaseIndex: "2"
chartmuseumDatabaseIndex: "3"
password: ""
修改Harbor其他组件replicas(副本数)
# 例如nginx的副本数更改
nginx:
image:
repository: goharbor/nginx-photon
tag: v1.8.2-dev
replicas: 3
1.3.准备Harbor所需的registry、notarysigner、notaryserver、clair数据库,Harbor会自动在其中建表。
执行sql语句脚本,供stolon-init-database-job.yaml使用
cat <<EOF > ./postgresql.sh
#!/bin/bash
host="stolon-proxy-service"
user="postgres"
db="postgres"
export PGPASSWORD="password1"
args=(
# force postgres to not use the local unix socket (test "external" connectibility)
--host "$host"
--username "$user"
--dbname "$db"
--quiet --no-align --tuples-only
)
if select="$(echo 'SELECT 1' | psql "${args[@]}")" && [ "$select" = '1' ]; then
echo "====notaryserver==database==creating===="
psql -h stolon-proxy-service -p 5432 -U postgres -f "/docker-entrypoint-initdb.d/initial-notaryserver.sql"
echo "====notarysigner==database==creating===="
psql -h stolon-proxy-service -p 5432 -U postgres -f "/docker-entrypoint-initdb.d/initial-notarysigner.sql"
echo "====registry==database==creating===="
psql -h stolon-proxy-service -p 5432 -U postgres -f "/docker-entrypoint-initdb.d/initial-registry.sql"
echo "====clair==database==creating===="
psql -h stolon-proxy-service -p 5432 -U postgres -f "/docker-entrypoint-initdb.d/initial-clair.sql"
exit 0
fi
exit 1
EOF
创建registry数据库
cat <<EOF > ./initial-registry.sql
CREATE DATABASE registry ENCODING 'UTF8';
\c registry;
CREATE TABLE schema_migrations(version bigint not null primary key, dirty boolean not null);
EOF
创建notaryserver数据库
cat <<EOF > ./initial-notaryserver.sql
CREATE DATABASE notaryserver;
CREATE USER server;
alter user server with encrypted password 'password';
GRANT ALL PRIVILEGES ON DATABASE notaryserver TO server;
EOF
创建notarysigner数据库
cat <<EOF > ./initial-notarysigner.sql
CREATE DATABASE notarysigner;
CREATE USER signer;
alter user signer with encrypted password 'password';
GRANT ALL PRIVILEGES ON DATABASE notarysigner TO signer;
EOF
创建clair数据库
cat <<EOF > ./initial-clair.sql
CREATE DATABASE clair;
EOF
创建一个job的yaml(stolon-init-database-job.yaml),用于创建数据库,注意更改脚本的挂载位置,并复制脚本到各个节点或为node和yaml加上nodeselect标签,只在当前标签node下复制脚本
apiVersion: batch/v1
kind: Job
metadata:
name: stolon-init-database-job
spec:
template:
spec:
containers:
- name: stolon-proxy
image: sorintlab/stolon:master-pg10
command:
- "/bin/bash"
- "/docker-entrypoint-initdb.d/postgresql.sh"
volumeMounts:
- mountPath: /docker-entrypoint-initdb.d
name: database
restartPolicy: OnFailure #失败重启
volumes:
- name: database
hostPath:
path: /root/tmp/harbor/stolon/examples/kubernetes/sql
activeDeadlineSeconds: 600 #10分钟没有complete,不再重启并移除Pod
1.3.部署Postgresql、redis
- 按照《kubernetes下Stolon部署高可用Postgresql》部署Postgresql,注意加入stolon-init-database-job.yaml。
- 按照《kubernetes部署高可用redis》部署redis,之后用haproxy管理redis集群(不可直接使用redis的service暴露,service会访问到slave节点,redis副本是只读不可写的,在harbor中会有报错)
- 部署haproxy
- 安装haproxy
yum -y install haproxy
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-back
vim /etc/haproxy/haproxy.cfg - 加入配置
- 安装haproxy
defaults REDIS
mode tcp
timeout connect 1m
timeout server 6m
timeout client 6m
frontend ft_redis
bind 0.0.0.0:6379 name redis
default_backend bk_redis
backend bk_redis
option tcp-check
tcp-check connect
tcp-check send PING\r\n
tcp-check expect string +PONG
tcp-check send info\ replication\r\n
tcp-check expect string role:master
tcp-check send QUIT\r\n
tcp-check expect string +OK
server R1 redis-0.redis-headless.default.svc.cluster.local:6379 check inter 1s
server R2 redis-1.redis-headless.default.svc.cluster.local:6379 check inter 1s
server R3 redis-2.redis-headless.default.svc.cluster.local:6379 check inter 1s
listen admin_stats
stats enable
bind *:9090
mode http
option httplog
log global
maxconn 10
stats refresh 30s
stats uri /admin
stats realm haproxy
stats auth admin:admin
stats hide-version
stats admin if TRUE
systemctl start haproxy && systemctl enable haproxy && systemctl status haproxy
访问 harbor节点Ip:9090/admin如图所示,便成功

⚠️k8s master节点高可用可阅读《haproxy+keepalive实现master集群高可用》
1.4.部署Harbor
安装harbor并将日志写入文件,可编辑文件保留.yaml编排文件,以便以后使用
helm install . --debug --name hub |sed 'w harbor.yaml'
或执行以下命令,编排chart不执行,作用生成编排文件,删除多余部分,进行使用
helm install . --debug --dry-run --name hub |sed 'w harbor.yaml'
2.通过整理好的编排文件执行
链接:https://pan.baidu.com/s/1cr1fnWGHc-70HAxx1YH4kg 密码:21a8
直接使用这个编排文件可能会有问题,最好勤劳以下使用helm跑,也可避免更改配置遗漏或错误的问题,适用用于实验,如若搭建请注意修改Volum、requestsource等Pod设置
kubernetes部署高可用Harbor的更多相关文章
- kubernetes部署高可用redis
本文redis通过helm搭建,提供redis高可用完整的编排,关于Helm的搭建和使用请查看文章<helm的搭建及使用>,其中前一章介绍了Helm搭建,并提供了Helm搭建Harbor的 ...
- kubernetes kubeadm部署高可用集群
k8s kubeadm部署高可用集群 kubeadm是官方推出的部署工具,旨在降低kubernetes使用门槛与提高集群部署的便捷性. 同时越来越多的官方文档,围绕kubernetes容器化部署为环境 ...
- 附012.Kubeadm部署高可用Kubernetes
一 kubeadm介绍 1.1 概述 参考<附003.Kubeadm部署Kubernetes>. 1.2 kubeadm功能 参考<附003.Kubeadm部署Kubernetes& ...
- 企业运维实践-还不会部署高可用的kubernetes集群?使用kubeadm方式安装高可用k8s集群v1.23.7
关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 文章目录: 0x00 前言简述 ...
- k8s部署高可用Ingress
部署高可用Ingress 官网地址https://kubernetes.github.io/ingress-nginx/deploy/ 获取ingress的编排文件 wget https://raw. ...
- 关于Kubernetes Master高可用的一些策略
关于Kubernetes Master高可用的一些策略 Kubernetes高可用也许是完成了初步的技术评估,打算将生产环境迁移进Kubernetes集群之前普遍面临的问题. 为了减少因为服务器当机引 ...
- Quartz学习笔记:集群部署&高可用
Quartz学习笔记:集群部署&高可用 集群部署 一个Quartz集群中的每个节点是一个独立的Quartz应用,它又管理着其他的节点.这就意味着你必须对每个节点分别启动或停止.Quartz集群 ...
- 生产环境搭建高可用Harbor(包括恢复演练实操)
生产环境搭建高可用Harbor(包括恢复演练实操) 前言 因资源成本问题,本Harbor高可用架构为最小开销方案,如果资源充足,可以将PG.Redis全部使用使用云厂商集群模式. 同时为了配置简单,并 ...
- kubernetes集群部署高可用Postgresql的Stolon方案
目录 前言 ....前言 本文选用Stolon的方式搭建Postgresql高可用方案,主要为Harbor提供高可用数据库,Harbor搭建可查看kubernetes搭建Harbor无坑及Harbor ...
随机推荐
- Linux:oracle11.2.0dbca静默建库
1.关闭防火墙 systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall ...
- 为何Spring MVC可获取到方法参数名,而MyBatis却不行?【享学Spring MVC】
每篇一句 胡适:多谈些问题,少聊些主义 前言 Spring MVC和MyBatis作为当下最为流行的两个框架,大家平时开发中都在用.如果你往深了一步去思考,你应该会有这样的疑问: 在使用Spring ...
- API开发之接口安全(二)-----sign校验
上一章 我们说了 sign的生成 那么 我们如何确定这个sign的准确性呢 下来 我们说说 校验sign的那些事 在拿到header里面的内容之后 我们首先需要对其内容的基本参数做一个校验 我们补充下 ...
- python编辑已存在的excel坑: BadZipFile: File is not a zip file
背景-原代码如下,期望能自动创建excel,并且可以反复调用编辑: import xlwt,osfrom openpyxl.styles import Font, colors class Write ...
- 解决问题:安装Ubuntu时遇到nouveau sched_error问题
当我们在为有独立显卡gpu的电脑安装Ubuntu系统时,有可能会遇到nouveau sched_error问题. 方法一:安装系统时,开机出现dell图标时长按F12进入启动项选择界面, 然后选择UE ...
- 玩转VSCode插件之Remote-SSH
前言 每当更换电脑就要从新搭建一遍开发环境... 每当拉完最新代码程序在本地跑不起来的时候就要检查服务器和开发电脑的环境... 每当服务器上出Bug的时候就想如果可以能够调试服务器代码多好啊.. 你是 ...
- mave 笔记
有时maven在myeclipse配置不好用,可直接cmd到项目目录下执行下面命令,将maven包下载到当前文件夹的lib目录下 mvn dependency:copy-dependencies -D ...
- Python获取系统交互式shell,跨平台
本文地址:https://www.cnblogs.com/M4K0/p/9044237.html 昨天搞了半天,终于把这两个环节打通了.后续可以进一步调用adb命令执行一些操作,细节说明已在代码中添加 ...
- PIXIJS的一些使用
我发现pixijs在国内简直就是一片静土啊,只有那么一点点的微弱的不能再微弱的声音. 我在这里整理了下我使用过程中解决和可能理解的一些问题吧,都是一个个点,而不是完整的示例. 先放官网示例: http ...
- 一个简单的Python调度器Schedule
关于我 一个有思想的程序猿,终身学习实践者,目前在一个创业团队任team lead,技术栈涉及Android.Python.Java和Go,这个也是我们团队的主要技术栈. Github:https:/ ...