自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

shida's blog

千里之行,始于足下

  • 博客(328)
  • 收藏
  • 关注

原创 Linux 实现自定义系统调用,支持参数和结果返回

自定义 Linux 系统调用实验

2024-07-02 18:31:17 283

原创 CentOS 7 内核 3.10 升级 6.5.2 (RPM 直装 + 源码编译)

本文介绍如何升级 CentOS 7 内核版本,从 3.10 升级到 6.5.2,包括 RPM 直装和源码编译两种方式

2024-06-19 18:34:12 661

原创 geth + remix 本地开发环境搭建教程

部署完成后,可以看到已经部署的合约地址(如何等待很长时间还没有看到部署成功,可以尝试多 Deploy 触发几次),并可以查看 Msg 存储的内容。本文介绍使用 geth 搭建单节点私有链,使用 redmix 在线 IDE 连接本地私有链部署和运行智能合约环境搭建步骤。在弹出的界面,确认连接地址是本地启动的 geth 节点监听地址,默认即为 http://127.0.0.1:8545。可以看到类似如下输出,表面合约部署成功(部署合约可能需要等待约 1 分钟时间,看你的节点执行效率)

2024-05-22 17:26:03 438

原创 Kubernetes Kubelet 的 Cgroups 资源限制机制分析

容器技术的两大技术基石,想必大家都有所了解,即 namespace 和 cgroups。但你知道 cgroups 是如何在 kubernetes 中发挥作用的吗?kubelet 都设置了哪些 cgroups 参数来实现对容器的资源限制的呢?本文就来扒一扒 Kubernetes kubelet 的 cgroups 资源限制机制。

2024-04-20 23:57:40 1076

原创 Kubernetes Container Device Interface (CDI)

CDI 全称 Container Device Interface,是一种 Spec 接口规范,用于 Container Runtime 支持挂载第三方设备,如 GPU、FPGA 等。

2024-04-13 17:24:39 757

原创 从零到一:基于 K3s 快速搭建本地化 kubeflow AI 机器学习平台

Kubeflow 是一种开源的 Kubernetes 原生框架,可用于开发、管理和运行机器学习工作负载,支持诸如 PyTorch、TensorFlow 等众多优秀的机器学习框架,本文介绍如何在 Mac 上搭建本地化的 kubeflow 机器学习平台。尽管 K3s 自身需要的资源不多,但是 kubeflow 套件组件众多,需要设置 Docker 的资源分配,避免安装过程中发生 Pod Pending.注意:本文以 deyloyKF 发行版作为主要安装对象,本地环境仅适用于开发测试使用,不可用于生产环境!

2024-04-03 11:24:16 1436 1

原创 Kubernetes HPA:基于 kafka_consumergroup_lag 指标实现 Consumer Pod 水平弹性伸缩

在实际生产环境中,当请求激增时,kafka 生产者发送的消息数量会远远大于 kafka 消费者的消费能力,从而导致消息堆积和处理延迟。为了避免此种情况,就要求消费者能够感知到 kafka 消息堆积,并通过动态增加或减少自身的副本数,实现动态自适应消费,这就是本文即将介绍的内容,即基于 kafka_consumergroup_lag 指标实现 Consumer Pod 水平弹性伸缩。

2024-03-04 14:34:19 1148

原创 使用 HPA 和 TopologySpreadConstraints 实现可用区间等比扩容

本文介绍 HPA 多可用区同步扩容的小方法

2023-12-08 15:01:40 503

原创 Mac 定时重启 TouchBar 脚本(缓解闪烁问题)

Mac 笔记本 TouchBar 是真的脆啊,合盖使用一段时间就废了,右侧一直闪烁简直亮瞎眼 😂。本文提出一种定时重启 TouchBar,防止其进入休眠状态,从而缓解闪烁情况的方法。

2023-07-30 12:09:53 4071 4

原创 Mac OS 安装 CGO 交叉编译环境 x86_64-linux-gnu-gcc

Mac OS 安装 CGO 交叉编译环境 x86_64-linux-gnu-gcc,解决 CGO 编译难题。

2023-02-22 14:51:08 2469 1

原创 XMind 2021 Mac 去水印教程

XMind 桌面客户端基于 Electron + Vue 开发,Electron 打包会在 Resources 目录生成一个 app.asar 文件,大部分的资源页面文件都在这里边,因此我们可以通过修改 app.asar 的水印图片达到去水印的目的。安装 asar 程序:破解水印在「应用程序」找到 XMind,右键选择「显示包内容」,进入 “Contents/Resources” 目录,在此处打开 Terminal 终端,执行如下命令解包:使用喜欢的编辑器(如 VS......

2022-06-04 16:00:38 1525

原创 修改 docker cgroup 版本的方法 (changing cgroup version)

Kubernetes 从 1.19 起支持 cgroup v2 版本,如需运行 1.19 之前的老版本,需要宿主机 Docker 使用 cgroup v1。默认新版 docker 都默认使用 cgroup v2:# docker info ... Cgroup Version: 2 ...要切换使用 v1 版 cgroup,需要做如下配置:# vim /etc/default/grubGRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=

2022-05-08 12:14:05 5447 3

原创 Kubernetes Service 开启拓扑感知(就近访问)能力

为了满足应用就近访问的需求,Kubernetes 提供了 Service Topology Aware Hints(即拓扑感知) 能力,本文介绍该特性的基本用法(基于 v1.21 版本)。集群准备# cat << EOF > cluster.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane image: kindest/node:v1.21.10@sha256:847

2022-04-20 00:28:51 1216

原创 Crane 成本优化工具体验记录

Crane 成本优化工具实验记录准备集群本文通过 kind 创建一个四节点集群环境:# cat << EOF > cluster.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes:- role: control-plane- role: worker- role: worker- role: workerEOF# kind create cluster --config cluster.yaml安装

2022-03-23 11:19:56 1022

原创 基于 KEDA 和 WorkloadSpread 的弹性 HPA 实验

准备集群本文通过 kind 创建一个四节点集群环境:Linux amd64 机器安装 kind 命令:# curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.12.0/kind-linux-amd64# chmod +x ./kind# mv ./kind /usr/bin/kind初始化集群:# cat << EOF > cluster.yamlkind: ClusterapiVersion: kind.x-k8s.io/v1

2022-03-22 19:43:51 270

原创 配置 Mac M1 支持运行 linux/amd64 镜像

Mac M1 电脑由于采用了 arm64 架构,导致默认运行的 Docker 架构也是 arm64 的,某些特殊的镜像不支持 arm64 导致问题,而 amd64 架构默认支持度更好,本文介绍如何切换 Docker 架构为 amd64.打开终端,编辑 ~/.zshrc 文件,追加如下环境变量:export DOCKER_DEFAULT_PLATFORM=linux/amd64测试是否生效:MacBook-Pro ~ % source ~/.zshrcMacBook-Pro ~ % docker

2022-03-22 10:52:45 9976

原创 Prometheus 多租写入 Thanos Receiver 配置

背景描述当采集指标过多时,超过单个 prometheus 的处理能力,我们通常会采用多个 prometheus 实例分别采集一定的指标分片,然后通过 thanos 做聚合,对外提供统一查询服务。本文通过简单的实验,演示 thanos 的分片数据采集与聚合查询能力,架构如下:实验假设存在两个 prometheus 实例,分别采集不同的监控指标分片,prometheus 实例均通过 remote write 方式将数据写入 thanos receiver。receiver 采用多副本方式运行,并通过 h

2022-03-04 23:48:39 5210

原创 failed to create fsnotify watcher: too many open files

因为系统默认值太小,在查看日志的 Pod 所在节点重新设置此值:临时设置sudo sysctl fs.inotify.max_user_instances=81920永久保存echo fs.inotify.max_user_instances=81920 >> /etc/sysctl.conf && sysctl -p

2021-12-14 18:03:04 3456

原创 submariner + traefik 实现跨集群灰度发布

本文介绍一种跨集群应用灰度发布方案,通过 submariner 实现不同集群内 Pod 和 Service 的互联互通,基于 Traefik 完成流量的权重控制。一、准备两个集群准备两台机器,分别部署两个 K3s 集群,网络配置如下:NodeOSClusterPod CIDRService CIDRnode-aCentOS 7cluster-a10.44.0.0/1610.45.0.0/16node-bCentOS 7cluster-b10.144.0.0

2021-11-19 12:15:51 1600

原创 使用 Telepresence 2 本地调试(开发)Kubernetes 应用

Telepresence 2 可以形象地比喻为: Kubernetes 项目开发的瑞士军刀!它能够将你的本地环境和远程的 Kubernetes 集群打通,让你的本地应用就像运行在集群内的 Pod 一样访问集群内的其他服务以及被集群内的其他服务访问。Telepresence 2 会在远端集群中运行一个 agent 程序,同时修改本地的网络设置,通过一个加密隧道转发你本地计算机和远端集群的流量,让你的本地计算机就像运行在集群内的 Pod 一样,能够访问集群内的其他服务(无论是通过 Service 域名还是直

2021-10-21 11:05:40 1633

原创 Shell: 基于 nsenter 批量配置 Pod 容器的 iptables 规则

注意 nsenter 需要配置 EOF 完成标准输入,范式如下:nsenter -t $pid -n bash <<EOFsomething run in container namespaceexitEOF例如,给容器批量设置 iptables 规则的写法,如下:for id in $(docker ps | grep k8s_POD | awk '{print $1}')do pid=$(docker inspect $id -f '{{.State.Pid}}')

2021-07-22 23:24:24 553

原创 kube-apiserver OpenAPI 文档是如何生成的?

不知道你是否浏览过 kube-apiserver 的 API 文档,官方地址在这:https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.21/Kubernetes 的 API 遵循了 OpenAPI 规范,OpenAPI Spec 定义了一个标准的、语言无关的 RESTful API 接口规范,该规范使得人类和计算机都能在“不接触任何程序源代码和文档、不监控网络通信”的情况下理解一个服务的作用。而且,由于采用了 OpenAPI

2021-06-23 00:04:53 1607 1

原创 CentOS 7 环境下升级 curl 7.29.0 到更高版本(源码编译)

CentOS 7 默认的 curl 版本最新就到 7.29,如果要使用更新版本的 curl,可以通过源码编译方式手动安装:yum install wget gcc openssl-devel -ywget https://curl.haxx.se/download/curl-7.67.0.tar.gzgunzip -c curl-7.67.0.tar.gz | tar xvf -cd curl-7.67.0./configure --with-ssl --prefix=/usr/local/cur

2021-06-10 17:51:12 4232

原创 查找 Docker 容器内文件系统在宿主机上的位置

Docker 文件系统是在宿主机上完成 Merge 后,再挂载到容器内的,我们可以通过 `docker inspect` 命令快速定位容器文件系统在宿主机上对应的目录:```sh# docker inspect --format='{{.GraphDriver.Data.MergedDir}}' <容器 ID>/var/lib/docker/overlay2/756eb8b3d8663ff88c75c8b2cb24a5ea3d4762da69c68bd9c92bfe3c0c56b36

2021-05-25 10:21:17 7137

原创 Harbor 登陆失败,用户名或者密码不正确。405 Not Allowed

问题如图:如果是通过 helm chart 安装的 harbor,一般通过下面的方法可以解决:# helm repo add harbor https://helm.goharbor.io# helm fetch harbor/harbor --untar# cd harbor# sed -i 's/ type: ingress/ type: clusterIP/g' values.yaml# sed -i 's/ commonName: ""/ commonName:

2021-04-21 20:53:27 3191

原创 Prometheus 使用 node hostname 抓取 metrics 指标

Prometheus 使用 node hostname 抓取节点指标配置示例如下:- job_name: monitoring/node-exporter-hostname/0 kubernetes_sd_configs: - role: node scrape_interval: 30s scheme: http tls_config: insecure_skip_verify: true bearer_token_file: /var/run/secrets/kube

2021-04-20 21:58:15 1337

原创 CentOS 7 一键部署 OpenStack

1. 关闭防火墙并安装 RDO 软件# systemctl disable firewalld --now# setenforce 0# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux# yum -y install http://rdo.fedorapeople.org/rdo-release.rpm2. 安装 openstack-packstack 部署工具# yum -y install ope

2021-04-13 19:59:08 1049

原创 CentOS 7 安装和使用 7zip

安装 epel 源(前置)yum -y install epel-release安装 7zipyum install p7zip -y解压文件7za x file.7z

2021-04-01 18:12:38 1125

原创 The consensus follower is not allowed to to do current operation

数据库操作报如下错误:Caused by: java.sql.SQLException: The consensus follower is not allowed to to do current operation. at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)

2021-03-23 11:18:25 1696 1

原创 Golang Template 使用自定义函数

Golang Template 使用自定义函数Go 语言内置的 text/template 支持自定义函数功能:// Funcs adds the elements of the argument map to the template's function map.// It must be called before the template is parsed.// It panics if a value in the map is not a function with appropria

2021-02-08 17:59:24 2888

原创 手工绑定 Kubernetes PVC 和 PV

背景一般而言,用户只需要声明 PVC,Kubernetes 的 StorageClass 就能动态帮我们创建 PV 并绑定了。但有时候我们希望为 PVC 绑定我们手动创建的 PV,这时候就需要一些手工介入了。步骤只需要在 PVC 声明时,将绑定字段 volumeName 预填好就行了,想绑谁帮谁,是不是很简单呢!apiVersion: v1kind: PersistentVolumemetadata: name: example-pvspec: capacity: storag

2020-12-29 20:13:33 1288

原创 Minio 创建 Bucket

minio 创建 bucket 说明minio 的 web 系统暂未提供创建 bucket 的能力,因此需要借助命令行工具# 启动 docker 客户端容器docker run -it --entrypoint=/bin/sh minio/mc# 添加 server(名字 minio, access key minio, secret key minio123)mc alias set minio http://11.116.10.67:9000 minio minio123# 在 minio

2020-12-01 14:54:32 11606

原创 Kubernetes 安装 local-path-storage

安装 local-path-storage# kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yamlnamespace/local-path-storage createdserviceaccount/local-path-provisioner-service-account createdclusterrol.

2020-10-25 17:26:39 2678 1

原创 Kubernetes Operator 切换日志格式为 klog

本文仅作备忘在使用 KubeBuilder 构建 Operator 时,默认的日志格式是 zap 样式的,其日志初始化语句如下:ctrl.SetLogger(zap.Logger(true))有时候因为没有格式化打印日志的需要,可以修改日志输出形式,例如切换为 klog 格式,只需修改上述初始化语句为:import( "k8s.io/klog/klogr")...ctrl.SetLogger(klogr.New())......

2020-09-25 21:37:59 1257

原创 centos 7 基于 containerd 运行 Kubernetes 集群

1. 安装 containerd# yum install -y yum-utils# yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo# yum install containerd -y2. 初始化 containerd 配置# containerd config default > /etc/containerd/config.toml#

2020-09-05 14:48:34 2648

原创 Shell 脚本判断命令是否存在

方案一#!/usr/bin/env bashif which sha1sum >/dev/null 2>&1; then sha1sum="sha1sum"else sha1sum="shasum -a1"fi方案二#!/usr/bin/env bashif ! command -v docker >/dev/null 2>&1; then echo "not exists"fi

2020-09-05 11:11:20 1939

原创 request canceled (Client.Timeout exceeded while awaiting headers)

问题描述某 Kubernetes 集群,负载高 Node 状态总是时而出现 NotReady 状态,集群不稳定,查看节点日志,存在如下错误:Error updating node status, will retry: error getting node "node01": Get https://x.x.x.x:6443/api/v1/nodes/node01?timeout=10s: net/http: request canceled (Client.Timeout exceeded while

2020-08-17 20:13:39 8797

原创 macOS Catalina 启动 U 盘制作教程

准备条件Mac 电脑16G 以上存储空间的 U 盘制作步骤1. 使用 App Store 下载 Catalina 系统打开 App Store 后,在搜索栏键入 Catalina ,回车搜索点击 ”获取“ 完成 macOS Catalina 系统的下载。注意: 下载完成会自动打开安装界面,先不要安装,退出即可。2. 准备 U 盘将 U 盘插入电脑 USB 口,打开 “磁盘工具”,找到 U 盘的挂载路径###### 3. 命令行制作启动 U 盘打开 ”终端”, 输入如下命令,使用 c

2020-07-12 22:46:32 4279

原创 本地编译执行 Kubernetes e2e 测试

一、Kubernetes e2e 测试简介Kubernetes e2e(end-to-end) 测试是单元测试和集成测试的补充,其主要目标是确保 Kubernetes 行为的一致可靠,并在单元和集成测试不足时,在用户真正使用软件之前捕获难以测试的 Bug。Kubernetes e2e 测试基于 Ginkgo 和 Gomega 实现。二、在本地运行 Kubernetes e2e 测试要在本地运行 e2e 测试,方法有很多,官方建议基于 kubetest 启动,但相对来说环境要求较高。本文介绍一种比较简单

2020-07-09 12:38:11 2923

原创 Shell 小技巧 -- 原地更新终端输出信息 & 闪动效果 & 字体高亮

一、原地更新终端输出信息在使用 Linux 系统时会常常看到一些命令、程序脚本能够实时地刷新输出信息,而不是每次通过新的一行输出信息,这样我们就能够一方面动态地显示程序运行的进度,另一方面尽量地精简屏幕上的输出信息,从而使得我们对结果有更好的把握。要实现该功能,只需利用 \r 这个回车符即可。注意,Linux 环境下,回车的作用是将光标移到行首,而换行才是移到下一行。例子:#!/bin/bashfor i in {1..100}do printf "\rProcess: %3d" $i

2020-06-17 12:03:32 6916 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除