长亭-deric
发布于 IP属地广东省

【牧云】牧云(CloudWalker)主机安全管理平台集群版安装

集群版部署

一、部署环境检查

1.1 硬件配置表

按照不同带机量,需要满足以下硬件配置:

探针数量 CPU 内存 数据盘IO/空间 网络 所需节点数
3k 24 32 1w/500 G 千兆 4
5k 32 64 1w/500 G 千兆 4
8k 16 64 2w/800 G 万兆 11
8k 32 64 2w/800 G 万兆 7
1w 32 64 2w/1 T 万兆 11
1.5w 32 64 4w/1.5 T 万兆 11
2w 32 128 4w/2 T 万兆 11

1.2 操作系统信息检查

序号 检查项 要求 建议
1 操作系统 Linux内核不能太老 CentOS7.6+;Ubuntu20.04+
2 主机名 相互不冲突、没有特殊字符 只能包含:小写字母[a-z]、数字[0-9]、减号 -
3 系统防火墙 停用 停用firewalld、ufw等系统防火墙
4 selinux 禁用 保持selinux 为disabled
5 DNS 存在且可用 存在可用dns server的配置
6 时间同步 时区与时间是同步的 有NTP配置
7 swap分区 禁用 swapoff -a 关闭后再注释掉/etc/fstab对应行
8 /var 空间 可用空间大于50G 不单独挂载,根目录空间大于70G
9 数据盘 挂载到/var/lib/rancher/k3s 使用安装脚本自动挂载,与系统盘不在同一个设备

二、部署前准备

2.1、准备安装介质

安装包:
底座安装包 k3s-installer-v0.3.3-rc0.tgz
应⽤安装包 CW-C10-22.05.003-R7-Patch-2210251730.tgz

磁盘性能测试⼯具 run_fio_4k.sh

run_fio_4k.sh

选择一台部署机(一般使用第一台,也就是master1)上传安装介质和工具,后续所有操作未做说明均在部署机上执行

安装包上传至:/root/installer(上传后核对 MD5 值)

2、部署节点检查

1. 安装 ansible

  • 安装 ansible

    • 方法一:在线安装
    yum -y install ansible
    
    • 方法二:离线安装
    cd /root/installer
    tar zxvf  k3s-installer-v0.3.3-rc0.tgz
    cd ansible/packages/centos7_amd64/
    yum -y --skip-broken install *.rpm
    
  • 确认 ansible 可用

[root@iZwz98w4s2a9nzexzl8qp4Z centos7_amd64]# which ansible ansible-playbook sshpass xfs_quota
/usr/bin/ansible
/usr/bin/ansible-playbook
/usr/bin/sshpass
/usr/sbin/xfs_quota
[root@iZwz98w4s2a9nzexzl8qp4Z centos7_amd64]# 
  • 编写集群节点清单
[all:vars]
ansible_user=root
ansible_password=root密码
[dephost]
172.30.207.105 name=test-01
[nodes]
172.30.207.102 name=test-02
172.30.207.103 name=test-03
172.30.207.104 name=test-04

创建节点清单 /root/inventory.txt,格式如下, name 为节点的主机名,需要所有节点唯⼀部署机需要写在 [dephost] ,其他节点写在 [nodes]

  • 关闭主机key检查

    • 方法一:
    export ANSIBLE_HOST_KEY_CHECKING=False ; echo "export ANSIBLE_HOST_KEY_CHECKING=False"  >> /root/.bashrc
    
    • 方法二: 修改/etc/ansible/ansible.cfg文件,取消注释host_key_checking参数,
    # uncomment this to disable SSH key host checking
    host_key_checking = False
    
  • 测试ansible是否可以执行命令

[root@iZwz98w4s2a9nzexzl8qp4Z ~]# ansible -i /root/inventory.txt all -m shell -a "hostname"
172.30.207.105 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp4Z
172.30.207.104 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp6Z
172.30.207.103 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp5Z
172.30.207.102 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp7Z
  • 重启节点
[root@iZwz98w4s2a9nzexzl8qp4Z ~]# ansible -i /root/inventory.txt nodes -m shell -a reboot
172.30.207.104 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Shared connection to 172.30.207.104 closed.", 
    "unreachable": true
}
172.30.207.103 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Shared connection to 172.30.207.103 closed.", 
    "unreachable": true
}
172.30.207.102 | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Shared connection to 172.30.207.102 closed.", 
    "unreachable": true
}
[root@iZwz98w4s2a9nzexzl8qp4Z ~]# 
[root@iZwz98w4s2a9nzexzl8qp4Z ~]# reboot

重启节点避免一些临时配置导致后续使用中出现问题

注:此操作需要先与客户确认后在操作

重启后在执行命令查看各节点是否可达

[root@iZwz98w4s2a9nzexzl8qp4Z ~]# ansible -i /root/inventory.txt all -m shell -a "hostname"
172.30.207.101 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp4Z
172.30.207.104 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp6Z
172.30.207.102 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp7Z
172.30.207.103 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp5Z
  • 推送免密登录 生成密钥
[root@iZwz98w4s2a9nzexzl8qp4Z ~]# ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/root/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_ed25519.
Your public key has been saved in /root/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:eQ374U/F7ghsMt5ph6HfzVoLgMN6ZzjpRtiX8CxQ2l8 root@iZwz98w4s2a9nzexzl8qp4Z
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|         .       |
|        + .      |
|       o.+.+ E . |
|        S+B.=   o|
|       ..=+Xo. o |
|       ..==+*+. o|
|        oo==o*o*.|
|        ...o+.=o+|
+----[SHA256]-----+
[root@iZwz98w4s2a9nzexzl8qp4Z ~]# ansible -i /root/inventory.txt all -m shell -a "echo '$(cat /root/.ssh/id_ed25519.pub)' >> /root/.ssh/authorized_keys"
172.30.207.101 | CHANGED | rc=0 >>

172.30.207.104 | CHANGED | rc=0 >>

172.30.207.103 | CHANGED | rc=0 >>

172.30.207.102 | CHANGED | rc=0 >>

[root@iZwz98w4s2a9nzexzl8qp4Z ~]# 
  • 验证免密登录 删除或注释掉 inventory.txt 内的 ansible_password
# inventory.txt
[all:vars]
ansible_user=root
# ansible_password=root密码

尝试执行命令

[root@iZwz98w4s2a9nzexzl8qp4Z ~]# ansible -i /root/inventory.txt all -m shell -a "hostname"
172.30.207.104 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp6Z
172.30.207.101 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp4Z
172.30.207.102 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp7Z
172.30.207.103 | CHANGED | rc=0 >>
iZwz98w4s2a9nzexzl8qp5Z

如果可以正常执⾏命令,说明信任关系配置完成。

2.磁盘性能测试

  • 安装 fio

    • 方法一:在线安装 fio
    ansible -i /root/inventory.txt all -m shell -a "yum -y install fio"
    
    • 方法二:离线安装 fio
    [root@iZwz9cu8gh0lsteean9j4nZ ~]# ansible -i /root/inventory.txt all -m copy -a "src=/root/installer/ansible/artifacts/bin/amd64/fio dest=/usr/bin/fio mode=0755 backup=yes"
    
  • 下发测试脚本

ansible -i /root/inventory.txt all -m copy -a "src=/root/utils/run_fio_4k.sh dest=/root/run_fio.sh mode=0755"
  • 执行测试脚本 注:如果没有数据盘,在测试磁盘io的时候一定不要使用整盘测试

    • 方法一:整盘测试
    ansible -i /root/inventory.txt all -m shell -a "/root/run_fio.sh /dev/vdb fio-output"
    
    • 方法二:创建文件测试
    ansible -i /root/inventory.txt all -m shell -a "fallocate -l 1G /tmp/iotest.tmp"
    ansible -i /root/inventory.txt all -m shell -a "/root/run_fio.sh /tmp/iotest.tmp fio-output"
    
  • 等待命令执行完毕后查看结果(约 3-4 分钟),确保 avg 的值满足硬件配置需求

[root@iZwz9cu8gh0lsteean9j4nZ ~]# ansible -i /root/inventory.txt all -m shell -a "chdir=/root/fio-output grep iops *write.4K.*"
172.30.207.105 | CHANGED | rc=0 >>
fio.randwrite.4K.1.log:   iops        : min= 6698, max=10260, avg=6858.58, stdev=451.04, samples=59
fio.write.4K.1.log:   iops        : min= 6698, max=21506, avg=7052.58, stdev=1914.29, samples=59
172.30.207.104 | CHANGED | rc=0 >>
fio.randwrite.4K.1.log:   iops        : min=51506, max=55210, avg=53751.02, stdev=855.01, samples=59
fio.write.4K.1.log:   iops        : min=39330, max=43388, avg=41594.17, stdev=1092.63, samples=59
172.30.207.102 | CHANGED | rc=0 >>
fio.randwrite.4K.1.log:   iops        : min=51842, max=55388, avg=53506.27, stdev=879.61, samples=59
fio.write.4K.1.log:   iops        : min=36934, max=43238, avg=40478.54, stdev=1265.71, samples=59
172.30.207.103 | CHANGED | rc=0 >>
fio.randwrite.4K.1.log:   iops        : min=46868, max=50696, avg=49368.07, stdev=867.01, samples=59
fio.write.4K.1.log:   iops        : min=32286, max=37418, avg=35552.95, stdev=951.33, samples=59

注:如果是⽣产环境,必须确保磁盘性能测试通过,才可以开始下⾯的部署

3.节点配置(此操作会重启节点)

  • 进入 predeploy 目录
[root@iZwz9cu8gh0lsteean9j4nZ ~]# cd /root/utils/cluster
[root@iZwz9cu8gh0lsteean9j4nZ utils]# cd predeploy 
  • 执行配置脚本(如果没有 nslookup 命令会执行失败,需要先安装 bind-utils,四台都需要安装)
[root@iZwz9cu8gh0lsteean9j4nZ predeploy]# ansible-playbook -i /root/inventory.txt predeploy-configure.yaml

三、集群版部署

1、编写default.ini文件

  • 进入 installer 目录
[root@iZwz9cu8gh0lsteean9j4nZ ~]# cd /root/installer/
[root@iZwz9cu8gh0lsteean9j4nZ ~]# tar -zxvf k3s-installer-v0.3.3-rc0.tgz 
# 如果之前是离线安装的 ansible 解压这一步就不用执行了
[root@iZwz9cu8gh0lsteean9j4nZ ~]# cd /root/installer/ansible/inventory
[root@iZwz9cu8gh0lsteean9j4nZ inventory]# cp default.ini.example default.ini
  • 编写default.ini
vim default.ini

# 下面的语法:
# <ip> 
[master]
# master 控制平面
# 应当为奇数个,一个也可以,但是无法实现高可用,除了研发用途之外建议至少使用三台节点,但也不建议太多,会有性能影响。
172.30.207.105 public_ip=x.x.x.x
172.30.207.102 public_ip=x.x.x.x
172.30.207.103 public_ip=x.x.x.x
[worker]
# worker 
# 可以为任意数量,一般为申请的机器除去 master 之外的所有机器,如果没有额外的机器,则可以直接不写内容
# 比如
# 192.168.0.4 public_ip=192.168.0.4
# 192.168.0.5 public_ip=192.168.0.5
172.30.207.104 public_ip=x.x.x.x
[all:vars]
# 全局变量
# 这里会有一些全局变量,其中的一些可以控制 k3s installer 的安装行为。
# 全局变量的默认值在 roles/defaults/defaults/main.yml 中定义。

# ansible_user 为 ssh 登陆需要的用户名
ansible_user=root

# 是否自动挂载数据盘
k3s_installer_do_disk_probe = true

# 自动挂载数据盘大小下限
# k3s_installer_disk_probe_limit = 10G

# 可尝试挂载的设备
# k3s_installer_disk_probe_devices = ["sdb","vdb","sdc","vdc"]

# 挂载点
# k3s_installer_mount_point = /var/lib/rancher/k3s

# 是否要求挂载数据盘
k3s_installer_require_mount = true

# 是否检查数据盘启用 XFS Project Quota
k3s_installer_do_quota_check = true

# change_hostname 为 true 的时候,将会修改节点的 hostname
# 采用 k3s-<role>-<index> 的形式命名 默认值为 true 如果没有特别需要,可以不做修改
k3s_installer_change_hostname = true

# k3s_rancher_hostname 指定安装完成后用什么域名来访问 rancher 的控制面板。当修改这项配置时,请确保配置了对应的 DNS ,将对应的 DNS 指向集群中所有或部分>节点的 IP
# k3s_rancher_hostname = rancher.custom.tld

# master 节点上额外的 k3s 配置
extra_k3s_master_config = 'kube-apiserver-arg: "service-node-port-range=20000-50052"'

# 所有节点上额外的 k3s 配置
extra_k3s_config = ""
[master]:如果节点数量小于等于 9 则写前三个节点,节点数量大于 9 可以写前五个节点
如果有公网 ip 的话 public_ip 就写公网 ip ,没有的话就写内网 ip
[all:vars]:设置安装的一些配置项
  ansible_user=ubuntu
    用于登录的用户名,需根据实际情况修改
  k3s_installer_change_hostname
    设置为 true 会自动更改主机 hostname
  k3s_rancher_hostname
    rancher 管理面板的域名,默认值为 <master的ip>.nip.io。如果客户环境允许的话可以找客户申请一个域名并指向所有 IP 作为管理界面的域名。
  修改extra_k3s_master_config的值为
    extra_k3s_master_config = 'kube-apiserver-arg: "service-node-port-range=20000-50052"'
  • 挂载磁盘
    • a.自动挂载

        在编写default.ini的时候将以下参数设置为 true,并确保数据盘大于 10G 且未被挂载
            k3s_installer_do_disk_probe
            k3s_installer_require_mount 
        如果要使用 quota 功能(可以限制单个 PV 大小防止硬盘被打满),建议把 k3s_installer_do_quota_check 设置为 true。
      
        如果使用自动挂载,滑板车会把数据盘格式化为 xfs 分区格式,并启用 quota。
      

      image.png

    • b.手动挂载(可以使用 ansible 命令统一执行,ansible -i /root/installer/ansible/inventory/default.ini all -m shell -a “$cmd”)

        # 创建物理卷
        pvcreate /dev/vdb -ff
        # 创建名为 cloudwalker_k3s 的卷组
        vgcreate cloudwalker_k3s /dev/vdb
        # 在物理卷上创建名为 var_lib_rancher_k3s_storage 大小为 1TB 的逻辑卷并加入 cloudwalker_k3s 卷组,1024G 可以根据实际情况调整。
        lvcreate -L 1024G --name var_lib_rancher_k3s_storage cloudwalker_k3s /dev/vdb
        # 将该逻辑卷格式化为 xfs 分区
        mkfs.xfs /dev/cloudwalker_k3s/var_lib_rancher_k3s_storage
        mkdir -p /var/lib/rancher/k3s
        # 使用 prjquota option 挂载分区
        mount -o prjquota /dev/cloudwalker_k3s/var_lib_rancher_k3s_storage /var/lib/rancher/k3s
        # 写 fstab,启动时自动挂载
        echo "/dev/mapper/cloudwalker_k3s-var_lib_rancher_k3s_storage /var/lib/rancher/k3s    xfs            rw,prjquota     0 2" >> /etc/fstab
      

2、安装 k3s 底座

  • 执行如下命令进行安装
  • 如果是ubuntu系统需要先执行下 export PYTHONPATH=/usr/lib/python3/dist-packages
/root/installer/ansible/install.sh
  • 脚本运行过程中会首先检查当前的配置和环境是否正确。检查无误后,会进行安装流程。视 IO 水平不等,安装脚本需要 10 - 20 分钟完成。
  • 执行如下命令查看安装是否正常
[root@iZwz9cu8gh0lsteean9j4nZ ansible]# kubectl get node
NAME           STATUS   ROLES                       AGE     VERSION
k3s-master-1   Ready    control-plane,etcd,master   7m1s    v1.21.4+k3s1
k3s-master-2   Ready    control-plane,etcd,master   6m2s    v1.21.4+k3s1
k3s-master-3   Ready    control-plane,etcd,master   5m47s   v1.21.4+k3s1
k3s-worker-1   Ready    worker                      5m4s    v1.21.4+k3s1

image.png

3、安装牧云

  • 解压安装包
[root@k3s-master-1 ~]# cd /root/installer/
[root@k3s-master-1 installer]# tar -zxvf CW-C10-22.05.003-R7-Patch-2210251730.tgz 
  • 进解压目录进行安装
[root@k3s-master-1 installer]# cd package/

**进入package目录后, 可运行 submit.sh 安装牧云,需要在安装时指定平台对外使用的hostname,生成证书,下文以平台对外域名是 cloudwalker.chaitin.cn 为例, 如果没有域名使用IP,这里填写IP。首次安装可使用 custom-values、custom-secret-values 参照下文自定义配置。 **server.ingress记得修改

安装命令示例

    yes | ./submit.sh . -- --set server.ingress=cloudwalker.chaitin.cn --set presets="NodePort50051" # 使用牧云版界面

    yes | ./submit.sh . -- --set server.ingress=cloudwalker.chaitin.cn --set presets="NodePort50051\,PullPolicyAlways" # 使用牧云版界面、总是拉取镜像


    注:加 yes 是为了避免错过输入 y 的那一步导致安装失败

    目前支持的预设有

    PullPolicyAlways
    选择是否总是拉取镜像。适用于需要手动替换镜像或者相同 tag 镜像更新版本的测试环境,可能拖慢集群启动速度或者导致集群故障时难以恢复,不建议在生产环境启用。

    NodePort50051
    选择是否使用 50051 而非 30051 作为探针通信端口。

    ExclusiveDB
    选择是否让 Postgres 数据库实例部署在独立的服务器上,具体操作见 可选操作:Postgres 独占部署并开启巨页。

浏览 (644)
点赞 (6)
收藏
打赏
评论