searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

基于kubekey部署高可用registry

2023-09-05 06:54:37
47
0

实现方案


1、在高可用k8s集群上复用k8s的vip,registry的域名dockerhub.kubekey.local指向这个vip;

2、在部署了keepalived的节点上同样部署registry;

3、Registry本地保存镜像的目录/mnt/registry挂载后端的共享文件存储glusterfs,实现所有registry所在节点保存的镜像一致性;

4、当node节点上拉取镜像时,通过vip所在节点的registry拉取镜像;当vip漂移至其他节点,则通过vip漂移后所在节点上的registry拉取镜像。

搭建过程

部署haproxy+keepalived(略)

部署在master1/master2/master3节点上

部署glusterfs

第1步, 在所有storage服务器上(不包括client)安装glusterfs-server软件包,并启动服务

下面的命令所有存储服务器都要做,本环境master1/master2/master3即为服务端也做客户端使用。

执行yum 本地安装glusterfs

# yum localinstall gluster_rpm/*.rpm -y

# systemctl start glusterd

# systemctl enable glusterd

# systemctl status glusterd

 

第2步, 所有storage服务器建立连接,成为一个集群

3个storage服务器建立连接不用两两连接,只需要找其中1个,连接另外2个各一次

下面在192.168.10.102(master3)上操作

# gluster peer probe 192.168.10.100

# gluster peer probe 192.168.10.101 ---这里使用ip,主机名,主机名别名都可以

 

然后在所有存储上都可以使用下面命令来验证检查

# gluster peer status

 

第3步, 所有storage服务器准备存储目录(可以用单独的分区,也可以使用根分区)

这里用根分区来做实验

但生产环境肯定是不建议数据盘和系统盘在一起的

# mkdir -p /data/gv0

 

第4步, 创建存储卷(在任意一个storage服务器上做)

改变的操作(create,delete,start,stop)等只需要在任意一个storage服务器上操作,查看的操作(info)等可以在所有storage服务器上操作

下面命令在192.168.10.102(master3)上操作

因为在根分区创建所以需要force参数强制

replica 3表示是在3台上做复制模式(类似raid1)

 

# gluster volume create gv0 replica 3 192.168.10.100:/data/gv0/ 192.168.10.101:/data/gv0/ 192.168.10.102:/data/gv0/ force

 

第5步, 启动存储卷

# gluster volume start gv0

 

第6步, client安装软件

客户端上操作

client# yum install glusterfs glusterfs-fuse -y (第一步已完成离线安装)

说明:

fuse(Filesystem in Userspace): 用户空间文件系统,是一个客户端挂载远程文件存储的模块

 

第7步, client挂载使用

注意:客户端也需要在/etc/hosts文件里绑定存储节点的主机名才可以挂载

在master1/master2/master3节点上分别执行

# mkdir /mnt/registry

# mount -t glusterfs 192.168.10.100:gv0 /mnt/registry/

 

除了使用mount挂载,还可以使用/etc/fstab自动挂载

添加:192.168.10.100:/gv0 /mnt/registry glusterfs defaults,_netdev 0 0

 

部署registry

说明:

社区kubekey只支持在单一节点上部署registry,本地做了改造,修改了两处代码,在多节点部署验证通过。

kubekey参考模板:config-kubekey.yaml

 

apiVersion: kubekey.kubesphere.io/v1alpha2

kind: Cluster

metadata:

  name: sample

spec:

  hosts:

  - {name: master1, address: 192.168.10.100, internalAddress: 192.168.10.100, user: root, password: "xxxxxx"}

  - {name: master2, address: 192.168.10.101, internalAddress: 192.168.10.101, user: root, password: "xxxxxx"}

  - {name: master3, address: 192.168.10.102, internalAddress: 192.168.10.102, user: root, password: "xxxxxx"}

  roleGroups:

    etcd:

    - master1

    - master2

    - master3

    control-plane:

    - master1

    - master2

    - master3

    worker:

    - master1

    - master2

    - master3

    registry:

    - master1

    - master2

    - master3

  controlPlaneEndpoint:

    ## Internal loadbalancer for apiservers

    # internalLoadbalancer: haproxy

 

    domain: lb.kubesphere.local

    address: "192.168.10.110"

    port: 7443

  kubernetes:

    version: v1.22.9

    clusterName: cluster.local

    autoRenewCerts: true

    containerManager: containerd

    kata:

      enabled: true

  

  etcd:

    type: kubekey

  network:

    plugin: kubeovn

    kubePodsCIDR: 10.233.64.0/18

    kubeServiceCIDR: 10.233.0.0/18

    multusCNI:

      enabled: false

  registry:

    # 如需使用 kk 部署 harbor, 可将该参数设置为 harbor,不设置该参数且需使用 kk 创建容器镜像仓库,将默认使用docker registry。

    #type: harbor

    # 如使用 kk 部署的 harbor 或其他需要登录的仓库,可设置对应仓库的auths,如使用 kk 创建的 docker registry 仓库,则无需配置该参数。

    # 注意:如使用 kk 部署 harbor,该参数请于 harbor 启动后设置。

    auths:

      "dockerhub.kubekey.local":

    #    username: admin

    #    password: Harbor12345

        cafile: /etc/docker/certs.d/dockerhub.kubekey.local/ca.crt

        certfile: /etc/docker/certs.d/dockerhub.kubekey.local/dockerhub.kubekey.local.cert

        keyfile: /etc/docker/certs.d/dockerhub.kubekey.local/dockerhub.kubekey.local.key

    # 设置集群部署时使用的私有仓库

    privateRegistry: "dockerhub.kubekey.local"

    namespaceOverride: ""

    registryMirrors: []

    insecureRegistries: []

  addons: []

0条评论
0 / 1000
L****s
6文章数
1粉丝数
L****s
6 文章 | 1 粉丝
原创

基于kubekey部署高可用registry

2023-09-05 06:54:37
47
0

实现方案


1、在高可用k8s集群上复用k8s的vip,registry的域名dockerhub.kubekey.local指向这个vip;

2、在部署了keepalived的节点上同样部署registry;

3、Registry本地保存镜像的目录/mnt/registry挂载后端的共享文件存储glusterfs,实现所有registry所在节点保存的镜像一致性;

4、当node节点上拉取镜像时,通过vip所在节点的registry拉取镜像;当vip漂移至其他节点,则通过vip漂移后所在节点上的registry拉取镜像。

搭建过程

部署haproxy+keepalived(略)

部署在master1/master2/master3节点上

部署glusterfs

第1步, 在所有storage服务器上(不包括client)安装glusterfs-server软件包,并启动服务

下面的命令所有存储服务器都要做,本环境master1/master2/master3即为服务端也做客户端使用。

执行yum 本地安装glusterfs

# yum localinstall gluster_rpm/*.rpm -y

# systemctl start glusterd

# systemctl enable glusterd

# systemctl status glusterd

 

第2步, 所有storage服务器建立连接,成为一个集群

3个storage服务器建立连接不用两两连接,只需要找其中1个,连接另外2个各一次

下面在192.168.10.102(master3)上操作

# gluster peer probe 192.168.10.100

# gluster peer probe 192.168.10.101 ---这里使用ip,主机名,主机名别名都可以

 

然后在所有存储上都可以使用下面命令来验证检查

# gluster peer status

 

第3步, 所有storage服务器准备存储目录(可以用单独的分区,也可以使用根分区)

这里用根分区来做实验

但生产环境肯定是不建议数据盘和系统盘在一起的

# mkdir -p /data/gv0

 

第4步, 创建存储卷(在任意一个storage服务器上做)

改变的操作(create,delete,start,stop)等只需要在任意一个storage服务器上操作,查看的操作(info)等可以在所有storage服务器上操作

下面命令在192.168.10.102(master3)上操作

因为在根分区创建所以需要force参数强制

replica 3表示是在3台上做复制模式(类似raid1)

 

# gluster volume create gv0 replica 3 192.168.10.100:/data/gv0/ 192.168.10.101:/data/gv0/ 192.168.10.102:/data/gv0/ force

 

第5步, 启动存储卷

# gluster volume start gv0

 

第6步, client安装软件

客户端上操作

client# yum install glusterfs glusterfs-fuse -y (第一步已完成离线安装)

说明:

fuse(Filesystem in Userspace): 用户空间文件系统,是一个客户端挂载远程文件存储的模块

 

第7步, client挂载使用

注意:客户端也需要在/etc/hosts文件里绑定存储节点的主机名才可以挂载

在master1/master2/master3节点上分别执行

# mkdir /mnt/registry

# mount -t glusterfs 192.168.10.100:gv0 /mnt/registry/

 

除了使用mount挂载,还可以使用/etc/fstab自动挂载

添加:192.168.10.100:/gv0 /mnt/registry glusterfs defaults,_netdev 0 0

 

部署registry

说明:

社区kubekey只支持在单一节点上部署registry,本地做了改造,修改了两处代码,在多节点部署验证通过。

kubekey参考模板:config-kubekey.yaml

 

apiVersion: kubekey.kubesphere.io/v1alpha2

kind: Cluster

metadata:

  name: sample

spec:

  hosts:

  - {name: master1, address: 192.168.10.100, internalAddress: 192.168.10.100, user: root, password: "xxxxxx"}

  - {name: master2, address: 192.168.10.101, internalAddress: 192.168.10.101, user: root, password: "xxxxxx"}

  - {name: master3, address: 192.168.10.102, internalAddress: 192.168.10.102, user: root, password: "xxxxxx"}

  roleGroups:

    etcd:

    - master1

    - master2

    - master3

    control-plane:

    - master1

    - master2

    - master3

    worker:

    - master1

    - master2

    - master3

    registry:

    - master1

    - master2

    - master3

  controlPlaneEndpoint:

    ## Internal loadbalancer for apiservers

    # internalLoadbalancer: haproxy

 

    domain: lb.kubesphere.local

    address: "192.168.10.110"

    port: 7443

  kubernetes:

    version: v1.22.9

    clusterName: cluster.local

    autoRenewCerts: true

    containerManager: containerd

    kata:

      enabled: true

  

  etcd:

    type: kubekey

  network:

    plugin: kubeovn

    kubePodsCIDR: 10.233.64.0/18

    kubeServiceCIDR: 10.233.0.0/18

    multusCNI:

      enabled: false

  registry:

    # 如需使用 kk 部署 harbor, 可将该参数设置为 harbor,不设置该参数且需使用 kk 创建容器镜像仓库,将默认使用docker registry。

    #type: harbor

    # 如使用 kk 部署的 harbor 或其他需要登录的仓库,可设置对应仓库的auths,如使用 kk 创建的 docker registry 仓库,则无需配置该参数。

    # 注意:如使用 kk 部署 harbor,该参数请于 harbor 启动后设置。

    auths:

      "dockerhub.kubekey.local":

    #    username: admin

    #    password: Harbor12345

        cafile: /etc/docker/certs.d/dockerhub.kubekey.local/ca.crt

        certfile: /etc/docker/certs.d/dockerhub.kubekey.local/dockerhub.kubekey.local.cert

        keyfile: /etc/docker/certs.d/dockerhub.kubekey.local/dockerhub.kubekey.local.key

    # 设置集群部署时使用的私有仓库

    privateRegistry: "dockerhub.kubekey.local"

    namespaceOverride: ""

    registryMirrors: []

    insecureRegistries: []

  addons: []

文章来自个人专栏
k8s云原生
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0