从零开始:新手快速在国产操作系统中搭建高可用K8S(V1.28)集群落地实践

b03bc5c49f8b00e1fee28b2b66b9010b.jpeg

e933ebea10992ed188f7dad5760a333c.gif

微信改版了,现在看到我们全凭缘分,为了不错过【全栈工程师修炼指南】重要内容及福利,大家记得按照上方步骤设置「接收文章推送」哦~

关注【公众号】回复【学习交流群】加入【SecDevOps】学习交流群!


文章目录:

95c15f9dd69d900140ba9ce23c383353.png


本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。

0x00 前言简述

描述: 由于公司内部需要将原本繁重的elk日志收集平台(等保需要)以及Promethus资源监控预警平台(开发运维测试需要),迁移到国产Linux操作系统之中(大趋势),作者我也趁着此机会,将原本单机部署的项目进行迁移到,使用银河麒麟( KylinOS V10)服务器操作系统部署最新 V1.28 版本的高可用 Kubernetes 云平台上,让企业全面拥抱云原生,以及国产化替代。

42efc86ca57fef83613fbd874dfa772b.png

此外,作者也将使用Promtail + Loki + Grafana贴近于云原生的架构来全面替换繁重elk日志收集平台,并且使用 Promethus + Exporters + Alertmanager + PushGateWay 来完成企业内部主机、网络设备、业务等相关资源的监控预警,此系列文章将会在《#云原生落地实用指南》付费专栏之中进行持续更新,希望对各位有需要的朋友有帮助,也请多多支持作者创作更多云原生落地实践文章。

此篇文章是作者花费了半天时间,为了防止恶意爬虫和伸手党直接转发,所以作者将此文设为付费文章(请作者喝一杯☕ 精神精神),希望大家理解并多多支持。

作者将实践步骤流程进行总结,从而帮助各位企业IT朋友,在安全加固后的银河麒麟(KylinOS V10)服务器操作系统中,使用ansible + 手动的方式快速安装部署最新v1.28版本的 Kubernetes  高可用集群,以及NFS动态持久存储卷、Ingress-nginx、以及集群包管理工具 helm,集群管理工具 k9s等相关基础安装配置,为前面所述的,以为后续的日志收集资源监控预警做准备,让云原生实实在在企业中落地,加快企业内部的数字化转型以及完成企业内部国产化替代工作。

若还有不了解的银河麒麟( KylinOS V10)系统的朋友可以参考,作者的此篇文章《企业实践 | 国产操作系统之光? 银河麒麟KylinOS-V10(SP3)高级服务器操作系统基础安装篇》进行基础扫盲。

温馨提示: 此篇文章也适用于在 CentOS8 主机中安装高可用的K8S集群(V1.28)。


0x01 Kubernetes 前置准备

1.安装方式介绍

描述:下面介绍了几种 Kubernetes 安装方式,以及其安装部署的特点区别,和部署的时间耗费情况,时而选择出最适合本企业中安装部署K8S的方式。

  • 1.基于 kubeadm 工具部署 (耗费时间 30min)

    kubeadm (耗费时间 30min):K8S 官方提供的原生安装方式,学习时建议首选此方式。官方文档: https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/

    kubespray (耗费时间 20~30min) : 基于ansible其支持联邦与舰队,高可用性集群,网络插件,持续集成测试。项目地址: https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubespray/

    kubekey (耗费时间 20~30min) :由 Go 语言开发是一种全新的安装工具,替代了以前使用的基于 ansible 的安装程序,可快速安装 Kubernetes/K3s。项目地址: https://github.com/kubesphere/kubekey

    sealos (耗费时间 180second) : 持多种部署方式,包括单主节点、多主节点、高可用等,同时还提供了一些高级功能,如TLS证书自动签发、节点扩缩容、组件升级等。官方地址: https://docs.sealos.io/zh-Hans/

    kind (kubernetes in docker): 提供一个轻量级、快速部署的Kubernetes环境,适用于开发、测试和本地调试,生产环境不建议。项目地址: https://github.com/kubernetes-sigs/kind

  • 2.基于 二进制离线部署 (耗费时间 较长)

    手动离线部署 (耗费时间 3~5hour) : 可参考博主的 kubease (耗费时间 7~10 hour) :基于二进制方式部署和利用ansible-playbook实现自动化;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组。项目地址: https://github.com/easzlab/kubeasz

  • 3.基于 Rancher 方式部署:(RKE)是一款非常简单,运行速度快的 Kubernetes 安装程序,支持各种运行平台,其次它是一个功能强大的容器管理平台,可以简化容器化应用程序的部署和管理,并提供丰富的功能来帮助用户监控和保护容器K8S集群。项目地址: https://docs.rancher.cn/


2.安装依赖说明

描述: 此处作者使用 kubeadm 进行 kubernetes(k8s)高可用安装部署, 我们可从 Kubernetes 官方文档中可知,其安装部署K8S的控制平面以及工作节点主机要求如下所示:

  • 一台或多台运行兼容 deb/rpm 的 Linux 操作系统的计算机;例如:Ubuntu 或 CentOS 或者其他发行版, 此处作者将使用国产系统KylinOS v10操作系统

  • 每台机器 2 GB 以上的内存,内存不足时应用会受限制。

  • 用作控制平面节点的计算机上至少有 2 个 CPU

  • 集群中所有计算机之间具有完全的网络连接,你可以使用公共网络或专用网络。

  • 高可用集群中将要使用奇数的Master工作平面。

此处作者已经将国产系统KylinOS v10操作系统进行了安全加固以满足等保三级主机安全的要求,有需求的朋友请在下方自取,加固后的KylinOS系统登录连接界面如下所示:

[IP 地址] : 10.10.10.2~10.10.10.5
[System Info]SYSTEM    : Kylin Linux Advanced Server V10 (Lance)KERNEL    : Linux 4.19.90-52.25.v2207.ky10.x86_64ARCH      : x86_64UPTIME    : 0 days 0 hours 48 minutes 18 secondsCPU       : Intel(R) Xeon(R) CPU E7-4820 v4 @ 2.00GHz (8 vCPU)MEMORY    : 227 MB / 14749 MB (1.54% Used)LOAD AVG  : 0.00 (1m), 0.00 (5m), 0.00 (15m)PROCESSES : 194 (root), 3 (user), 197 (total)USERS     : 1 users logged inBASH      : 5.0.18(1)-release[Disk Usage]Mounted: /                                3.0G / 98G (4% Used)[============================================================]Mounted: /boot                            280M / 1014M (28% Used)[============================================================]

Kylin银河麒麟安全加固脚本文档地址: https://mp.weixin.qq.com/s/eBF_Q-WkiZHKGdEG1MODNQ

Kylin银河麒麟安全加固实践视频

91f3d21eb5ba8540d422346f58f2faa0.png
weiyigeek.top-已加固的Kylin银河麒麟系统图

温馨提示: Kubernetes 是支持 IPv4 + IPv6 双栈, 若要使用IPV6的目的是在公网进行访问,需要配置 IPV6 静态地址。若您没有IPV6环境,或者不想使用IPv6,不对主机进行配置IPv6地址即可,并不会不影响后续,不过集群依旧是支持IPv6的,为后期留有扩展可能性。


3.安装环境说明

描述: 此处作者使用VMware EXSI安装的四台 KylinOS V10 虚拟机机器进行部署高可用的K8S集群,以及从存储NAS服务器划分的19T的NFS共享磁盘,用于存取相关设备抓取的日志,目标当然是存储 180天 以及满足等保的要求。

主机说明

主机名称主机地址K8S角色K8S版本主机与内核版本
weiyigeek-0210.10.10.2control-planev1.28.1Kylin V10 (Lance)-4.19.90-52.26.v2207.ky10.x86_64
weiyigeek-0310.10.10.3control-planev1.28.1Kylin V10 (Lance)-4.19.90-52.26.v2207.ky10.x86_64
weiyigeek-0410.10.10.4control-planev1.28.1Kylin V10 (Lance)-4.19.90-52.26.v2207.ky10.x86_64
weiyigeek-0510.10.10.5workv1.28.1Kylin V10 (Lance)-4.19.90-52.26.v2207.ky10.x86_64

存储说明

共享类型共享目录挂载点容量
NFS192.168.4.9:/volume1/storage//storage19T

VIP 负载均衡说明

主机名称主机地址负载端口
sec-lb.k8s.weiyigeek.cn10.10.10.1016443

K8S配置说明

关键项配置项
clusterName 集群名称kubernetes
dnsDomain 集群根域cluster.sec
serviceSubnet 服务子网段10.96.0.0/16
podSubnet pod 服务子网段172.16.0.0/16

高可用K8S架构说明

1441df17b290d03a4905c935f970f720.png
weiyigeek.top-高可用K8S架构说明图

4.安装主机配置

主机网络

描述: 由于我是采用安全加固后的虚拟机模板克隆的其他三台主机,我们需要按照K8S官方文档主机网络要求进行排除和配置; 我们需要确保每个节点上 MAC 地址product_uuid 的唯一性,你可以使用命令 ip linkifconfig -a 来获取网络接口的 MAC 地址, 可使用 sudo cat /sys/class/dmi/id/product_uuid 命令对 product_uuid 校验

一般来讲,硬件设备会拥有唯一的地址,但是有些虚拟机的地址可能会重复, Kubernetes 使用这些值来唯一确定集群中的节点; 如果这些值在每个节点上不唯一,可能会导致安装失败。

# 注意!
# 若虚拟机是进行克隆的那么网卡的UUID会重复的,而重复的UUID无法获取到IPV6地址,当然若没有IPV6的需求可略过此部分。
# 若UUID重复需要重新生成新的UUID, 此时使用 nmcli 进行快速配置# 查看当前的网卡列表和 UUID:
# nmcli con show
# 删除要更改 UUID 的网络连接:
# nmcli con delete uuid <原 UUID>
# 重新生成 UUID:
# nmcli con add type ethernet ifname <接口名称> con-name <新名称>
# 重新启用网络连接:
# nmcli con up <新名称># 更改网卡的UUID&及IP地址(执行后无需通过控制台登录)
# control-plane
ssh -p 20211 root@weiyigeek-03 "nmcli con delete uuid 2394d226-1467-4118-b358-2d90cd02e65b;nmcli con add type ethernet ifname ens160 con-name ens160;nmcli con up ens160;nmcli con mod ens160 ipv4.addresses 10.10.10.3/24; nmcli con mod ens160 ipv4.gateway 10.10.10.1; nmcli con mod ens160 ipv4.method manual; nmcli con mod ens160 ipv4.dns "223.6.6.6"; nmcli con up ens160"
ssh -p 20211 root@weiyigeek-04 "nmcli con delete uuid 2394d226-1467-4118-b358-2d90cd02e65b;nmcli con add type ethernet ifname ens160 con-name ens160;nmcli con up ens160;nmcli con mod ens160 ipv4.addresses 10.10.10.4/24; nmcli con mod ens160 ipv4.gateway 10.10.10.1; nmcli con mod ens160 ipv4.method manual; nmcli con mod ens160 ipv4.dns "223.6.6.6"; nmcli con up ens160"
# work
ssh -p 20211 root@weiyigeek-05 "nmcli con delete uuid 2394d226-1467-4118-b358-2d90cd02e65b;nmcli con add type ethernet ifname ens160 con-name ens160;nmcli con up ens160;nmcli con mod ens160 ipv4.addresses 10.10.10.5/24; nmcli con mod ens160 ipv4.gateway 10.10.10.1; nmcli con mod ens160 ipv4.method manual; nmcli con mod ens160 ipv4.dns "223.6.6.6"; nmcli con up ens160"

使用 nmcli 命令单独配置主机的IPv4/6地址命令参考:

# 进行静态IPv4地址配置
ssh -p 20211 root@weiyigeek-05 "nmcli con mod ens160 ipv4.addresses 10.10.10.5/24; nmcli con mod ens160 ipv4.gateway 10.10.10.1; nmcli con mod ens160 ipv4.method manual; nmcli con mod ens160 ipv4.dns "223.6.6.6"; nmcli con up ens160"# 进行静态IPv6地址配置; 若没有IPv6选择不配置即可
ssh -p 20211 root@weiyigeek-05 "nmcli con mod ens160 ipv6.addresses fc00:43f4:1eea:1::10; nmcli con mod ens160 ipv6.gateway fc00:43f4:1eea:1::1; nmcli con mod ens160 ipv6.method manual; nmcli con mod ens160 ipv6.dns "2400:3200::1"; nmcli con up ens160"

让 "cali、tunl" 开头的接口不被 NetworkManager 所管理, 温馨提示KylinOS v10 适用于CentOS8的源,所以此处你应该明白我所说的吧。

# 适用于 CentOS 系列发行版本 ,若你是Ubuntu请忽略。# 方式一
# systemctl disable --now NetworkManager
# systemctl start network && systemctl enable network# 方式二
cat > /etc/NetworkManager/conf.d/calico.conf << EOF 
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:tunl*
EOF
systemctl restart NetworkManager# 参数解释:
# unmanaged-devices 参数用于指定不由 NetworkManager 管理的设备。# interface-name:cali*
# 表示以 "cali" 开头的接口名称被排除在 NetworkManager 管理之外。例如,"cali0", "cali1" 等接口不受 NetworkManager 管理。
# interface-name:tunl*
# 表示以 "tunl" 开头的接口名称被排除在 NetworkManager 管理之外。例如,"tunl0", "tunl1" 等接口不受 NetworkManager 管理。# 通过使用这个参数,可以将特定的接口排除在 NetworkManager 的管理范围之外,以便其他工具或进程可以独立地管理和配置这些接口。

主机名称

描述: 此处作者建议使用ansible 自动化运维工具针对K8S节点所有Linux进行管理,它可以极大方便我们批量执行命令,而不是在各主机上分别去单独执行,所以此处我们需要先在weiyigeek-02机器上安装 ansible 工具,在后续高可用集群的安装中会大量的使用。

若对ansible 自动化运维工具还不了解的朋友,可以参考作者的《Ansible-自动化运维大成之路》专栏文章进行基础扫盲。

首先,手动将下述主机名与IP地址解析配置追加到 master 角色 weiyigeek-02 主机的 /etc/hosts 文件中。

tee -a /etc/hosts <<'EOF'
10.10.10.2 weiyigeek-02
10.10.10.3 weiyigeek-03
10.10.10.4 weiyigeek-04
10.10.10.5 weiyigeek-05
10.10.10.10 sec-lb.k8s.weiyigeek.cn   # VIP
EOF

快速安装配置 ansible

# 只在 weiyigeek-02 节点安装
# 查看安装
dnf update 
dnf list ansible --showduplicates | sort -r
dnf install ansible -y# 查看版本
$ ansible --version
ansible 2.8.8config file = /etc/ansible/ansible.cfg.........python version = 3.7.9 (default, Aug 14 2023, 15:59:31) [GCC 7.3.0]# 配置分组&组变量
tee -a /etc/ansible/hosts <<'EOF'
[master]
weiyigeek-[02:04][work]
weiyigeek-05[k8s:children]
master
work[k8s:vars]
ansible_port=20211
ansible_user=root
EOF

在 weiyigeek-02 节点上生成主机公密钥认证的所需的公密钥,以及配置与其他三台主机互信

ssh-keygen -t ed25519 -C "devops@weiyigeek"
for i in $(seq 2 5);do ssh-copy-id -o StrictHostKeyChecking=no -p 20211 root@weiyigeek-0${i};done

验证 Ansible 是否工作正常,若出现 SUCCESS => {"ping": "pong"} 表示各节点连接成功

ansible k8s -m ping -oweiyigeek-02 | SUCCESS => {"ping": "pong"}weiyigeek-03 | SUCCESS => {"ping": "pong"}weiyigeek-04 | SUCCESS => {"ping": "pong"}weiyigeek-05 | SUCCESS => {"ping": "pong"}ansible work -m ping -oweiyigeek-05 | SUCCESS => {"ping": "pong"}

使用 ansible 批量添加本地 hosts 解析

方式1.blockinfile 模块
ansible k8s -m blockinfile -a 'path=/etc/hosts block="10.10.10.2 weiyigeek-02\n10.10.10.3 weiyigeek-03\n10.10.10.4 weiyigeek-04\n10.10.10.5 weiyigeek-05\n10.10.10.10 sec-lb.k8s.weiyigeek.cn" marker="#{mark} K8S Master-work Hosts" '方式2.lineinfile 模块(推荐), 若存在则不会插入
ansible k8s -m lineinfile -a 'path=/etc/hosts line="10.10.10.2 weiyigeek-02" create=yes' -o
ansible k8s -m lineinfile -a 'path=/etc/hosts line="10.10.10.3 weiyigeek-03" create=yes' -o
ansible k8s -m lineinfile -a 'path=/etc/hosts line="10.10.10.4 weiyigeek-04" create=yes' -o
ansible k8s -m lineinfile -a 'path=/etc/hosts line="10.10.10.5 weiyigeek-05" create=yes' -o
ansible k8s -m lineinfile -a 'path=/etc/hosts line="10.10.10.10 sec-lb.k8s.weiyigeek.cn" create=yes' -o

批量验证主机硬解析配置: ansible k8s -m shell -a "cat /etc/hosts"


主机时间

使用 ansible 批量修改主机时间时区

# 自动同步时间以及主机时区设置
ansible k8s -m shell -a "ntpdate ntp1.aliyun.com" -o
ansible k8s -m shell -a "timedatectl set-timezone Asia/Shanghai && timedatectl set-local-rtc 0" -o # 此处KylinOS安全加固模板是采用的chronyd同步而非ntpdate,而需将ntp.aliyun.com更改为ntp1.aliyun.com
ansible k8s -m replace -a 'path=/etc/chrony.conf regexp="ntp.aliyun.com" replace="ntp1.aliyun.com"' -o

批量验证主机时间时区(CST,+0800): ansible k8s -m shell -a "timedatectl"


主机 swap 禁用

使用 ansible 批量修改禁用主机的swap交换空间:

# 临时生效
ansible k8s -m shell -a "sysctl -w vm.swappiness=0"# 永久生效
ansible k8s -m lineinfile -a 'path=/etc/sysctl.conf line="# 部署 Kubernetes 集群相关内核参数配置"' -o
ansible k8s -m lineinfile -a 'path=/etc/sysctl.conf line="vm.swappiness = 0"' -o

主机 SELINUX 禁用

使用 ansible 批量修改主机 SELINUX

# 临时生效
ansible k8s -m shell -a "setenforce 0"
# 永久生效
ansible k8s -m replace -a 'path=/etc/selinux/config regexp="SELINUX=enforcing" replace="SELINUX=disabled"' -o
ansible k8s -m shell -a "grep "SELINUX" /etc/selinux/config"

主机内核参数调整

使用 ansible 批量启用内核转发模块及网桥过滤:

# 临时生效
# ansible k8s -m shell -a "sudo modprobe overlay && sudo modprobe br_netfilter" -o # 永久生效
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
# 转发 IPv4 并让 iptables 看到桥接流量
overlay
br_netfilter
EOF
ansible k8s -m copy -a "src=/etc/modules-load.d/k8s.conf dest=/etc/modules-load.d/k8s.conf force=yes" -o # 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
ansible k8s -m copy -a "src=/etc/sysctl.d/k8s.conf dest=/etc/sysctl.d/k8s.conf force=yes" -o # 应用 sysctl 参数而不重新启动
ansible k8s -m shell -a "sudo sysctl --system"

验证主机 br_netfilter 和 overlay 模块被加载:ansible k8s -m shell -a 'lsmod | grep -E "br_netfilter|overlay"'

280c9b3b49d2a95f406a8f49111d73d0.png
weiyigeek.top-br_netfilter 和 overlay 模块加载图

使用 ansible 批量修改禁用主机的防火墙:

ansible k8s -m shell -a "systemctl disable firewalld.service && systemctl stop firewalld.service"

5.安装配置 ipvs 负载均衡模块

使用 ansible 批量安装 ipvs 工具并配置自动加载 ipvs 相关参数到内核中。

# 安装 ipvs 工具
ansible k8s -m shell -a "dnf install ipset ipvsadm -y"# 重启主机后将自动加载 ipvs 相关模块到内核中
tee /etc/modules-load.d/ipvs.conf <<'EOF'
# 加载 ipvs 负载均衡相关模块到内核
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
ansible k8s -m copy -a "src=/etc/modules-load.d/ipvs.conf dest=/etc/modules-load.d/ipvs.conf force=yes" -o # 使用Shell脚本加载 overlay、br_netfilter、ipvs 模块
ansible k8s -m file -a "path=/etc/modules.d/ state=directory mode=0644"
tee /etc/modules.d/k8s.modules <<'EOF'
#!/bin/bash
# netfilter 模块 允许 iptables 检查桥接流量
modprobe br_netfilter
modprobe overlay# nf_conntrack
modprobe nf_conntrack# ipvs
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
EOF
ansible k8s -m copy -a "src=/etc/modules.d/k8s.modules dest=/etc/modules.d/k8s.modules force=yes" -o 
ansible k8s -m shell -a "bash /etc/modules.d/k8s.modules"

验证主机nf_conntrack、ip_vs相关模块是否被加载:ansible k8s -m shell -a "lsmod | grep -e ip_vs -e nf_conntrack"

cd188e6c8da7dfe50d30a818b783bf36.png
weiyigeek.top-验证nf_conntrack、ip_vs相关模块加载图

温馨提示: 上述配置参考了【基于 IPVS 的集群内部负载均衡 [https://kubernetes.io/zh-cn/blog/2018/07/09/ipvs-based-in-cluster-load-balancing-deep-dive/]】文章,想详细了解的配置可以进去看看。

温馨提示: 在 kernel 4.19 版本及以上将使用 nf_conntrack 模块, 则在 4.18 版本以下则需使用nf_conntrack_ipv4 模块。


6.安装配置 HAproxy & Keepalived

描述: 此处需要在主机中安装haproxy(HAProxy Load Balancer)用于HA代理健康检测,以及安装keepalivedLVS and VRRP High Availability Monitor)用于虚拟路由协议-主从创建一个VIPS虚拟地址。

快速安装配置 HAproxy & Keepalived查看主机 HAproxy & Keepalived 可用版本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/139996.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

day03_基础语法

今日内容 零、复习昨日 一、Idea安装&#xff0c;配置 二、Idea使用 三、输出语句 四、变量 五、数据类型 附录: 单词 零、 复习昨日 1 装软件(typora,思维导图) 2 gpt(学会让他帮你解决问题) 3 java发展(常识) 4 HelloWorld程序 5 编码规范 6 安装jdk,配置环境变量 电脑常识 任…

STM32-无人机-电机-定时器基础知识与PWM输出原理

电机控制基础——定时器基础知识与PWM输出原理 - 掘金单片机开发中&#xff0c;电机的控制与定时器有着密不可分的关系&#xff0c;无论是直流电机&#xff0c;步进电机还是舵机&#xff0c;都会用到定时器&#xff0c;比如最常用的有刷直流电机&#xff0c;会使用定时器产生PW…

在GIS(地理信息系统)中,常见的地理文件记录

在GIS&#xff08;地理信息系统&#xff09;中&#xff0c;常见的地理文件包括以下几种&#xff1a; .cpg&#xff08;Code Page文件&#xff09;&#xff1a;这个文件是指定地理数据文件编码的文件&#xff0c;它告诉软件如何正确地读取和解释地理数据文件中的字符编码。比如…

海外代理IP是什么?如何使用?

一、海外代理IP是什么&#xff1f; 首先&#xff0c;代理服务器是在用户和互联网之间提供网关的系统或路由器。它是一个服务器&#xff0c;被称为“中介”&#xff0c;因为它位于最终用户和他们在线访问的网页之间。 海外IP代理是就是指从海外地区获取的IP地址&#xff0c;用…

Linux学习-HIS系统部署(1)

Git安装 #安装中文支持&#xff08;选做&#xff09; [rootProgramer ~]# echo $LANG #查看当前系统语言及编码 en_US.UTF-8 [rootProgramer ~]# yum -y install langpacks-zh_CN.noarch #安装中文支持 [rootProgramer ~]# vim /etc/locale.co…

差值结构的顺序偏好

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让A 中有5个点&#xff0c;B中有1个点&#xff0c;且不重合&#xff0c;统计迭代次数并排序。 第一种情况 差值结构 迭代次数 L E - - 2 10491.…

python随手小练1

题目&#xff1a; 使用python做一个简单的英雄联盟商城登录界面 具体操作&#xff1a; print("英雄联盟商城登录界面") print("~ * "*15 "~") #找其规律 a "1、用户登录" b "2、新用户注册" c "3、退出系统&quo…

手动部署 OceanBase 集群

手动部署一个 OB 单副本集群&#xff0c;包括一个 OBProxy 节点 部署环境 服务器信息 IP地址 192.168.0.26 网卡名 ifcfg-enp1s0 OS Kylin Linux Advanced Server release V10 CPU 8C 内存 32G 磁盘1 本地盘 /data/1 磁盘2 本地盘 /data/log1 机器和角色划分 …

es小记(copy_to)

简单创建索引复制字段 1: 3个主分片,各自有一个副本,总分片数为 3*26; refresh_interval为刷新频率; 其他参数描述,转载自 PUT test1 { “settings”:{ “number_of_shards”: 1, “number_of_replicas”: 1, “refresh_interval”: “30s” }, “mappings”:{ “properties”…

软件工程知识总结梳理

&#x1f525;&#x1f525;宏夏Coding网站&#xff0c;致力于为编程学习者、互联网求职者提供最需要的内容&#xff01;网站内容包括求职秘籍&#xff0c;葵花宝典&#xff08;学习笔记&#xff09;&#xff0c;资源推荐等内容。在线阅读&#xff1a;https://hongxiac.com&…

ubuntu20.04 安装 pyconcorde

这个包似乎对网络环境要求挺高的&#xff0c;我们直接弄个 射线A型号 的飞机 直接使用 pip install pyconcorde 安装&#xff0c;发现在使用里面的包时会报奇怪的错误&#xff0c;于是决定寻找 github 上的 pyconcorde 源码&#xff0c;看文档进行安装 github 地址&#xff1…

计算π的近似值分数 ——python

利用格里高利公式&#xff1a; 计算 的近似值&#xff0c;直到最后一项的绝对值小于给定精度eps。 输入格式: 输入小于1且大于0的阈值。 输出格式: 输出满足阈值条件的近似圆周率&#xff0c;输出到小数点后6位。 输入样例: 在这里给出一组输入。例如&#xff1a; 0.0…

分布式锁演进-基本原理与使用

文章目录 前言一、分布式锁演进1.1 分布式锁特点1.2 阶段一1.3 阶段二1.4 阶段三1.5 阶段四 前言 在单体应用下当多线程去竞争某一共享资源时&#xff0c;我们通常会用一把锁来保证只有一个线程获取到资源。如加上 synchronize 关键字或 ReentrantLock 锁等操作。 在分布式应用…

一篇文章让你学会什么是哈希

一篇文章让你学会什么是哈希 哈希概念哈希冲突哈希函数1. 直接定址法2. 除留余数法3. 平方取中法4. 折叠法5. 随机数法6. 数学分析法 哈希冲突解决1. 闭散列1.1 线性探测1.2 二次探测 2. 开散列 开散列和闭散列对比 哈希概念 哈希在C中有广泛的应用&#xff0c;它是一种用于快…

pytest框架前后置设置,以及pytest默认规则

一、pytest框架的默认规则 1、模块名默认必须以test开头或者以test结尾 2、测试类必须以Test开头&#xff0c;并且不能有__init__方法 3、测试方法默认必须以test开头 当然以后的一些默认规则除测试类不能使用__init__方法外其余的都是可配置的&#xff0c;当然一般情况下我们…

【算法思想】排序

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

【二叉树魔法:链式结构与递归的纠缠】

本章重点 二叉树的链式存储二叉树链式结构的实现二叉树的遍历二叉树的节点个数以及高度二叉树的创建和销毁二叉树的优先遍历和广度优先遍历二叉树基础oj练习 1.二叉树的链式存储 二叉树的链式存储结构是指&#xff0c;用链表来表示一棵二叉树&#xff0c;即用链来指示元素的逻辑…

Redis集群架构搭建——主从、哨兵、集群

上一篇文章Ubuntu上通过源码方式安装Redis已经介绍了如何安装redis&#xff0c;在这篇文章中&#xff0c;将会教大家搭建Redis的几种高可用的架构&#xff1a;主从架构、哨兵集群、Cluster集群。 本篇文章使用的redis版本为6.2.13&#xff0c;不同版本的配置可能有略微的区别&a…

如何将内网ip映射到外网?快解析内网穿透

关于内网ip映射到外网的问题&#xff0c;就是网络地址转换&#xff0c;私网借公网。要实现这个&#xff0c;看起来说得不错&#xff0c;实际上是有前提条件的。要实现内网ip映射到外网&#xff0c;首先要有一个固定的公网IP&#xff0c;可以从运营商那里得到。当你得到公网IP后…

比特币上的可验证延迟函数

可验证延迟函数 (VDF) 是一种需要大量 顺序计算 来评估但可以快速验证的函数。我们首次在比特币上实现了它。VDF 作为密码学技术可用于构建大量新应用程序&#xff0c;例如公共随机信标、计算时间戳和数据复制证明。 VDF 场景 链上随机信标 在区块链中很难实现随机性&#xf…