xargs 命令用法
简介xargs 命令用于将标准输入转换为命令行参数,一般与管道一起使用。 语法1somecommand | xargs [选项] command 常用选项 选项 说明 -a file 从文件中读入作为标准输入 -e flag 或 -E flag 当 xargs 分析到含有 flag 这个标志时就停止(flag 必须是一个以空格分隔的标志) -p 每次执行一个参数时询问一次用户 -n num 表示命令在执行时一次使用的参数个数,默认是用所有的 -t 先打印命令,然后再执行 -i 或 -I 将 xargs 的每项名称,一般是一行一行赋值给 {},可以用 {} 代替 -r 或 --no-run-if-empty 当 xargs 的输入为空时则停止执行,不再继续 -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数 -L num 从标准输入一次读取 num 行送给 command 命令 -l 同 -L -d delim 指定分隔符,默认的 xargs 分隔符是回车,...
防火墙的使用
查看端口是否开放(TCP)1firewall-cmd --query-port=9090/tcp 开放端口1234567# 默认 zone 为 public# 防火墙添加单个端口firewall-cmd --zone=public --add-port=9090/tcp --permanent# 防火墙添加范围端口firewall-cmd --zone=public --add-port=40000-49999/udp --permanent 修改后刷新规则1firewall-cmd --reload 查看已开放端口命令12# 默认 zone 为 publicfirewall-cmd --zone=public --list-all 删除规则1firewall-cmd --zone=public --remove-port=8080/tcp --permanent 参数说明 --zone=public:指定区域 --add-port=9090/tcp:添加端口及协议 --permanent:永久生效 firewalld 的 9 个 zone默认 zone 为 publ...
Rancher 导入集群
导入集群 进入之后选择导入已有集群,随后进入此页面,点击创建 对于自签证书选择第二项,复制,然后在 K3s server 节点执行 问题error: no objects passed to apply 这里的问题主要是无法连接到部署 Rancher 的主机,无法获取 yaml 文件导致的。可以将 yaml 文件直接下载到 K3s server,再手动执行 kubectl apply -f {xxx}.yaml (针对配置了 --tls-san 参数 - 自签证书)可能会执行失败,提示域名 rancher.k3s.cn 不识别(前面的证书域名以及对应 IP) 更新资源的字段 123456789101112131415161718192021222324252627282930313233343536# because the cert was made by myself, so i need configured the hosts, otherwise it does not know my cert's domain name, un...
Rancher 的安装
官网的话:Rancher 是为使用容器的公司打造的容器管理平台。 安装 RancherDocker 单节点安装 如果容器内的 80 端口映射到宿主机的 8xxx,那么容器内的 443 端口要映射到宿主机的 8443。如果容器内的 80 端口映射到宿主机的 9xxx,那么容器内的 443 端口要映射到宿主机的 9443。 docker 123456##############使用存储卷###############docker run -d --privileged --name rancher-server \--restart=unless-stopped \-p 8080:80 -p 8443:443 \-v /opt/rancher:/var/lib/rancher \rancher/rancher:v2.6.3 docker-compose 1234567891011services: rancher-server: image: rancher/rancher:v2.6.3 container_name: rancher-server ...
Rancher 的角色权限分配实践
Rancher 分为 3 种角色,各自适用范围也不同 全局 集群 项目 项目下又包括了多个 namespace 先使用管理员登录创建 1 个可以管理全局的账户和角色的用户(全局管理员账户) 注:此用户仅用来管理用户和角色,admin 权限太大,之后不再使用它进行登录 用户名:UserManager 拥有角色: Manage Roles Manage Users 退出管理员,然后使用全局管理员账户创建一个集群管理员账户(集群管理员账户)全局权限:Standard User 用户名:ClusterManager 用 ClusterManager 身份登录并进行创建集群(略) 创建集群或项目时,Rancher 会自动将创建者分配为所有者。分配了所有者角色的用户可以在集群或项目中给其他用户分配角色。 然后使用 UserManager 为各集群创建用户一个 ClusterManager 账户下可以创建多个集群,例如 release/production。 1. 项目管理员 ProjectsAdmin 全局权限:Standard User 创建和管理项目,查看监控等,...
探究 Dubbo 服务注册发现的原理(二)
前言在上一篇我提到了 Dubbo 不仅仅只有 Netty 的实现,还支持 RMI 协议、HTTP 协议等等,而且也按照它的原理简单的写了些代码,大致的梳理了一个整体的链路。而这一篇,我打算在上一篇的基础上,把整体的代码运用到正式项目中,看看该怎样实现。 整体的项目结构如下: 服务层链路就是简单的调用消费端接口,然后消费端再去服务端发送远端请求 然后接口层还是按照 Dubbo 的服务最佳实践提到的,分离维护 消费者代码先来看下消费者的代码(pom 就是一个 web 和我手写的 rpc): 1234567891011@RestControllerpublic class ConsumerController { @Autowired ApplicationContext applicationContext; @GetMapping("/{name}") public String test(@PathVariable String name){ PayService paySe...
探究 Dubbo 服务注册发现的原理
Spring Boot 整合 Dubbo 的常规用法下面是三个服务的调用链路: 项目结构: 服务提供者(例如 pay-service)需要提供接口服务(@Service): 服务消费者(例如 user-service)需要指定服务接口(@Reference),接口多实现可能需要配合 version 属性: 这样就完成了基本的上游对下游服务的调用。 探究底层实现Dubbo 不仅仅只有 Netty 的实现,还支持 RMI 协议、HTTP 协议等等。所以它实现这种 RPC 调用的特点较其他(如 feign-http)更适用高并发以及短链接的项目。接下来用 Netty 的代码简单复现下基本的 Dubbo 应用。 配合 Dubbo 的服务注册发现链路图: 简单捋顺下思路,看看我们需要哪几样东西: 一个共享容器,用来存储服务地址(IP、端口等),当服务存在多个时,还需要负载均衡,以及服务信息修改后的通知功能 为了确定唯一的服务接口信息,需要包含接口名(像 Dubbo 一样,多实现可能需要再加一个 version)、方法名、方法参数类型列表、方法值列表 Netty,保证服...
深入解析:K8S 环境下 gRPC 负载均衡难题的四种方案
引言在 Kubernetes (K8s) 环境中,gRPC 作为一种高性能的 RPC 框架被广泛应用。然而,许多开发者在实践中发现,标准的 K8s Service 似乎无法对 gRPC 服务进行有效的负载均衡,导致所有请求都涌向了单个 Pod。本文将深入探讨这个问题的根源,并详细介绍四种主流的解决方案。 参考资料: gRPC Load Balancing on Kubernetes K8s环境下部署gRPC的几种方案 问题的根源:L4 vs L7 负载均衡传统的 K8s Service(如 ClusterIP)工作在 L4(传输层),它通过 kube-proxy 使用 IPtables 或 IPVS 来分发 TCP/UDP 流量。这种模式对于大多数基于 HTTP/1.1 的服务工作得很好,因为每个请求通常对应一个新的 TCP 连接。 然而,gRPC 构建于 HTTP/2 之上,其核心特性之一是多路复用(Multiplexing)。客户端与服务端之间会建立一个长期存在的 TCP 连接,所有的 gRPC 请求都在这个单一的连接上并发传输。 这就...
Proto 编译引用外部包问题
问题描述在 test.proto 文件中引用了一个外部包: 1import "google/api/annotations.proto"; 当使用命令编译的时候提示找不到包: 123# protoc --go_out=plugins=grpc:. ./test.protogoogle/api/annotations.proto: File not found.test.proto:5:1: Import "google/api/annotations.proto" was not found or had errors. 解决方案去 GitHub 上将对应的包下载下来放在 $GOPATH/src 下,例如这里缺失 google/api。 去 googleapis 将项目下载下来,并将整个项目放到 $GOPATH/src,此时的完整路径应该是: 1$GOPATH/src/google/api/annotations.proto 这才完成了第一步,如果这时候去直接执行 protoc 编译命令,依旧会得到上面的报错信息,protoc 并没有...
Ingress - K3s 之 Traefik 的使用
前言IngressService 可能会有很多,如果每个资源都绑定一个 node port 的话,主机则需要开放外围的端口进行服务调用,管理上会比较混乱。 比较优雅的方式是通过一个外部的负载均衡器,比如 Nginx,绑定固定的端口比如 80,然后根据域名/服务名向后面的 Service IP 转发,但是这里的问题在于:当有新服务加入的时候如何修改 Nginx 配置? 手动改或者 Rolling Update Nginx Pod 都是不现实的。 对于这个问题,Kubernetes 给出的七层解决方案是:Ingress TraefikTræfik 是一个为了让部署微服务更加便捷而诞生的现代 HTTP 反向代理、负载均衡工具。它支持多种后台(Docker、Swarm、Kubernetes、Marathon、Mesos、Consul、Etcd、Zookeeper、BoltDB、Rest API、file...)来自动化、动态的应用它的配置文件设置。 Traefik 是 K3s 里面的 Ingress Controller,支持负载均衡和反向代理,类似于 Nginx。 Traef...
