分类目录归档:DevOps

OpenAI如何通过Azure CNI扩展Kubernetes以支持7,500个节点

当你是OpenAI这样的公司,运行着像ChatGPT这样的尖端AI模型时,你需要的基础设施必须达到超级计算机的水平。将Kubernetes扩展到庞大的7,500个节点?这绝非易事。这种规模背后的关键在于,用Flannel(一种广泛使用的网络插件)替换为Azure CNI——一种与微软Azure生态系统紧密集成的解决方案。

继续阅读

linux文件系统inode使用耗尽的一次故障处理

故障现象:
1.无法启动php-fpm
2.无法启动mysql
3.网站无法访问
分析思路:
1.查看磁盘容量,服务运行情况
2.查看inodoe使用情况

排查过程:
1.容量正常
2.端口运行不正常,php服务 mysql服务为启动,启动失败
3.检查inode发现使用率100%

问题分析:
当 ext4 文件系统中的 inode 使用率达到 100% 时,表示系统已经使用完了所有的 inode。即使磁盘空间还有剩余,由于没有空闲的 inode,就无法创建新的文件或目录。要处理这个问题,可以按照以下步骤进行:
检查当前的 inode 使用情况: 可以使用 df -i 命令来检查当前文件系统的 inode 使用情况。找到 inode 使用量已经达到 100% 的文件系统。
找出占用大量 inode 的目录: 使用 df -i 命令查看 inode 使用情况后,可以进入占用 inode 较多的目录,然后使用以下命令找出占用大量 inode 的文件或目录:
find /path/to/directory -xdev -printf ‘%h\n’ | sort | uniq -c | sort -k 1 -n
清理不必要的文件或目录: 根据上一步骤找出的占用 inode 较多的文件或目录,可以进行清理,删除不必要的文件或目录来释放 inode。
考虑重新分配 inode: 如果上述清理操作后仍然无法解决问题,可以考虑重新创建文件系统并分配更多的 inode。在新创建文件系统时,可以通过 mke2fs 命令的 -N 选项来指定分配更多的 inode。
请注意,在处理 inode 使用率达到 100% 的问题时,一定要谨慎操作,确保不删除重要的文件或目录,且备份好需要保留的数据。

inode

istio-ingress-sds的一些障碍绕行方法

 

1.通过官网的by step 使用ingress-gateway发布ssl始终不成功,但是ingress-gateway的http服务暴露ok。

2.决定使用曲线救援方法,在外侧通过nginx来发布tls,内部回源使用http,但是遇见了http 426的错误。

➜ ~ curl https://192.168.1.25:443/ -H “Host: uat.sklinux.com” -i -k -v
* Trying 192.168.1.25…
* TCP_NODELAY set
* Connected to 192.168.1.25 (192.168.1.25) port 443 (#0)
* WARNING: disabling hostname validation also disables SNI.
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.uat.sklinux.com
* Server certificate: Fishdrowned ROOT CA
> GET / HTTP/1.1
> Host: uat.sklinux.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 426 Upgrade Required
HTTP/1.1 426 Upgrade Required
< Server: nginx
Server: nginx
< Date: Mon, 27 May 2019 02:25:25 GMT
Date: Mon, 27 May 2019 02:25:25 GMT
< Content-Length: 0
Content-Length: 0
< Connection: keep-alive
Connection: keep-alive

经查原因为:

nginx 反向代理默认走的http 1.0版本

但是 被反向代理的服务器是1.1版本的!

所以在反向代理的时候加上一句:proxy_http_version 1.1;

即可!

但是最终通过SDS进行tls服务发布还没彻底解决,这个问题将持续跟进社区。

apollo配置中心新增自定义环境

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。   默认阿波罗环境设定了

LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;这样的环境命名空间。
增加sklinux环境示范:
1.假设增加sklinux
在com.ctrip.framework.apollo.core.enums.Env类中有定义。比如增加sklinux环境L
public enum Env{
  LOCAL, DEV, SKLINUX, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
  ...
}
apollo/apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/Env.java 文件路径

2.修改com.ctrip.framework.apollo.core.enums.EnvUtils类,在其中加入BETA枚举的转换逻辑
case "SKLINUX":
        return Env.SKLINUX;

文件路径:
apollo/apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/EnvUtils.java
3.修改apollo-env.properties,增加beta.meta占位符:
local.meta=http://localhost:8080
dev.meta=${dev_meta}
fat.meta=${fat_meta}
sklinux.meta=${sklinux_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}
文件路径:
apollo/apollo-portal/src/main/resources/apollo-env.properties
4.修改com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider类,增加读取SKLINUX环境的meta server地址逻辑:

增加

env.getProperty("sklinux_meta", prop.getProperty("sklinux.meta")));

未增加前:
 domains.put(Env.LOCAL, getMetaServerAddress(prop, "local_meta", "local.meta"));
 domains.put(Env.DEV, getMetaServerAddress(prop, "dev_meta", "dev.meta"));
 domains.put(Env.FAT, getMetaServerAddress(prop, "fat_meta", "fat.meta"));
 domains.put(Env.UAT, getMetaServerAddress(prop, "uat_meta", "uat.meta"));
 domains.put(Env.LPT, getMetaServerAddress(prop, "lpt_meta", "lpt.meta"));
 domains.put(Env.PRO, getMetaServerAddress(prop, "pro_meta", "pro.meta"));
文件路径:
./apollo/apollo-core/src/main/java/com/ctrip/framework/apollo/core/internals/LegacyMetaServerProvider.java
cd apollo/scripts/ && ./build.sh 即可

[INFO] Reactor Summary for Apollo 1.4.0-SNAPSHOT:
[INFO]
[INFO] Apollo ……………………………………… SUCCESS [ 0.667 s]
[INFO] Apollo Core …………………………………. SUCCESS [ 3.964 s]
[INFO] Apollo Common ……………………………….. SUCCESS [ 1.377 s]
[INFO] Apollo Open Api ……………………………… SUCCESS [ 0.875 s]
[INFO] Apollo Portal ……………………………….. SUCCESS [ 6.668 s]
[INFO] ————————————————————————
[INFO] BUILD SUCCESS
[INFO] ————————————————————————
[INFO] Total time: 14.254 s
[INFO] Finished at: 2019-05-06T10:50:55+08:00
[INFO] ————————————————————————
==== building portal finished ====

5.protaldb增加SKLINUX环境配置。portaldb.serverconfig 表中的apollo.portal.envs字段 dev,uat,fat,pro,sklinux

6.为apollo-portal添加新增环境对应的meta server地址。apollo-env.properties中增加:dev.meta=http://x.x.x.x:8080
7.准备sklinux环境的adminservice和configservice 以及db,然后启动
8.重启portal服务就新增成功了。

普罗米修斯监控

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。

2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation), 将Prometheus纳入其下第二大开源项目。Prometheus目前在开源社区相当活跃。

Prometheus和Heapster(Heapster是K8S的一个子项目,用于获取集群的性能数据。)相比功能更完善、更全面。Prometheus性能也足够支撑上万台规模的集群。

Prometheus的特点

多维度数据模型。
灵活的查询语言。
不依赖分布式存储,单个服务器节点是自主的。
通过基于HTTP的pull方式采集时序数据。
可以通过中间网关进行时序列数据推送。
通过服务发现或者静态配置来发现目标服务对象。
支持多种多样的图表和界面展示,比如Grafana等。 继续阅读

linux文件系统高级权限属性

最近在cu论坛看见有同学在问,如何给一个目录设定root都不能删除的权限。

其实linux有高级权限,除了0777的权限位还有更高级的权限控制。在Linux下我们可以用lstat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属性,我们可以用lsattr命令来查看:

root@sklinux:/opt# lsattr
——a——e– ./src
如上面的a\e权限

上面这条命令的输出表示src文件具有扩展属性a和e,即只能向该文件添加数据,而不能删除,并且该文件使用extends来映射磁盘块。显然,将那些只允许增长但不允许修改和删除的文件设置为这样的隐藏属性是非常有利于保护数据安全的。 继续阅读

apollo配置中心增加环境的方法

Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

Apollo支持4个维度管理Key-Value格式的配置:

  1. application (应用)
  2. environment (环境)
  3. cluster (集群)
  4. namespace (命名空间)

 

配置结构图为:

apollo配置架构
一、portal启动参数如下: 继续阅读

如何防止CSRF攻击

背景

随着互联网的高速发展,信息安全问题已经成为企业最为关注的焦点之一,而前端又是引发企业安全问题的高危据点。在移动互联网时代,前端人员除了传统的 XSS、CSRF 等安全问题之外,又时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。当然,浏览器自身也在不断在进化和发展,不断引入 CSP、Same-Site Cookies 等新技术来增强安全性,但是仍存在很多潜在的威胁,这需要前端技术人员不断进行“查漏补缺”。

前端安全

近几年,美团业务高速发展,前端随之面临很多安全挑战,因此积累了大量的实践经验。我们梳理了常见的前端安全问题以及对应的解决方案,将会做成一个系列,希望可以帮助前端同学在日常开发中不断预防和修复安全漏洞。本文是该系列的第二篇。

今天我们讲解一下 CSRF,其实相比XSS,CSRF的名气似乎并不是那么大,很多人都认为“CSRF不具备那么大的破坏性”。真的是这样吗?接下来,我们还是有请小明同学再次“闪亮”登场。

CSRF攻击

CSRF漏洞的发生

相比XSS,CSRF的名气似乎并不是那么大,很多人都认为CSRF“不那么有破坏性”。真的是这样吗? 继续阅读

自签泛域名证书

自签泛域名证书
此工具用于颁发泛域名证书,方便开发环境调试。

请勿用于生产环境,生产环境还是购买正式的证书。
或者到 Let’s Encrypt 可以申请到免费证书
(支持多域名和泛域名)。

优点
1.你可以创建任意网站证书,只需导入一次根证书,无需多次导入;
2.减少重复又无谓的组织信息输入,创建证书时只需要输入域名;
3.泛域名证书可以减少 nginx 配置,例如你要模拟 CDN:
4.假设你的项目网站是 example.dev,CDN 网站设置为 cdn.example.dev,
你只需在 nginx 里面配置一个网站,server_name 同时填写 example.dev
和 cdn.example.dev,它们可以使用同一个 *.example.dev 的证书。
5.现在你只需要一个证书,就可以搞定所有项目网站!

XenServer 7.1.0 安装及配置

Citrix Xenserver,思杰基于 Linux 的虚拟化服务器。Citrix XenServer 是一种全面而易于管理的服务器虚拟化平台,基于强大的 Xen Hypervisor 程序之上。Xen 技术被广泛看作是业界最快速、最安全的虚拟化软件。XenServer 是为了高效地管理 Windows(R) 和 Linux(R) 虚拟服务器而设计的,可提供经济高效的服务器整合和业务连续性。

下载安装 XenServer7

### 下载
下载ISO: http://downloadns.citrix.com.edgesuite.net/11988/XenServer-7.1.0-install-cd.iso
下载XenCenter(windows平台下的XenServer管理端): http://downloadns.citrix.com.edgesuite.net/12009/XenServer-7.1.0-XenCenterSetup-7.1.1.l10n.exe

### 安装
和安装普通的CentOS一样,插入光盘,启动安装就行,按照安装向导一步一步来
磁盘空间至少46G,推荐100G以上,内存最少2G,推荐4G以上

### 默认分区情况
GPT分区
18GB XenServer主机控制域(dom0)分区
18GB 升级备份分区
4GB 日志分区
1GB 交换分区
5GB UEFI引导分区

### 存储库(SR)、物理块设备(PBD)、虚拟磁盘映像(VDI)、虚拟块设备(VBD) 之间的关系 SR可用来存储ISO镜像文件,或者VDI
* ‘S R’ *
XenServer主机 <--> PBD <--> * VDI * <--> VBD <--> VM
XenServer主机 <--> PBD <--> * VDI * <--> VBD <--> VM
XenServer主机 <--> PBD <--> * VDI * <--> VBD <--> VM
* ‘S R’ *
XenServer 基本配置
1. 修改lvm配置,否则无法手动创建lvm逻辑卷
— /etc/lvm/lvm.conf —

metadata_read_only = 0

2. 准备另一块硬盘或者直接就在XenServer的系统分区(推荐另增一块硬盘),或者是Windows文件共享(CIFS),Linux文件共享(NFS),用来存放ISO镜像启动文件

3. XenCenter 创建SR,类型为ISO库,连接上面创建的ISO库,点击刷新就可以看到你的iso镜像文件了

4. 新建虚拟机VM -> 控制台 -> 然后就可以安装你的虚拟机了
XenServer 基本命令
### 新建SR
# ISO库
xe sr-create name-label=boot_iso type=iso content-type=iso device-config:location=/xenserver/iso device-config:legacy_mode=true
# VDI库
xe sr-create name-label=”Local storage 2″ type=lvm content-type=user device-config:device=/dev/xenserver/data host-uuid=uuid_host shared=false

xe vm-list # 查看vm
xe host-list # 查看host_uuid
xe-toolstack-restart # 重启toolstack

### 删除SR
xe sr-list
xe sr-list name-label=boot_iso # 查看sr的uuid

xe pbd-list sr-uuid=UUID_SR # 查看pbd的uuid
xe pdb-unplug uuid=UUID_PBD # 断开sr与pbd的连接

xe sr-forget uuid=UUID_SR # 删除sr
xe sr-destroy uuid=UUID_SR # 销毁sr

xe task-list # 查看后台任务
xe task-cancel uuid=… # 结束后台任务