- 博客(319)
- 收藏
- 关注
原创 Mac OS 安装 CGO 交叉编译环境 x86_64-linux-gnu-gcc
Mac OS 安装 CGO 交叉编译环境 x86_64-linux-gnu-gcc,解决 CGO 编译难题。
2023-02-22 14:51:08
437
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
1041
原创 修改 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
2518
2
原创 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
716
原创 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
834
原创 基于 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
172
原创 配置 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
7804
原创 Prometheus 多租写入 Thanos Receiver 配置
背景描述当采集指标过多时,超过单个 prometheus 的处理能力,我们通常会采用多个 prometheus 实例分别采集一定的指标分片,然后通过 thanos 做聚合,对外提供统一查询服务。本文通过简单的实验,演示 thanos 的分片数据采集与聚合查询能力,架构如下:实验假设存在两个 prometheus 实例,分别采集不同的监控指标分片,prometheus 实例均通过 remote write 方式将数据写入 thanos receiver。receiver 采用多副本方式运行,并通过 h
2022-03-04 23:48:39
846
原创 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
1903
原创 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
1092
原创 使用 Telepresence 2 本地调试(开发)Kubernetes 应用
Telepresence 2 可以形象地比喻为: Kubernetes 项目开发的瑞士军刀!它能够将你的本地环境和远程的 Kubernetes 集群打通,让你的本地应用就像运行在集群内的 Pod 一样访问集群内的其他服务以及被集群内的其他服务访问。Telepresence 2 会在远端集群中运行一个 agent 程序,同时修改本地的网络设置,通过一个加密隧道转发你本地计算机和远端集群的流量,让你的本地计算机就像运行在集群内的 Pod 一样,能够访问集群内的其他服务(无论是通过 Service 域名还是直
2021-10-21 11:05:40
1179
原创 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
325
原创 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
1171
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
2915
原创 查找 Docker 容器内文件系统在宿主机上的位置
Docker 文件系统是在宿主机上完成 Merge 后,再挂载到容器内的,我们可以通过 `docker inspect` 命令快速定位容器文件系统在宿主机上对应的目录:```sh# docker inspect --format='{{.GraphDriver.Data.MergedDir}}' <容器 ID>/var/lib/docker/overlay2/756eb8b3d8663ff88c75c8b2cb24a5ea3d4762da69c68bd9c92bfe3c0c56b36
2021-05-25 10:21:17
4067
原创 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
2483
原创 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
1003
原创 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
742
原创 CentOS 7 安装和使用 7zip
安装 epel 源(前置)yum -y install epel-release安装 7zipyum install p7zip -y解压文件7za x file.7z
2021-04-01 18:12:38
396
原创 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
1265
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
1993
原创 手工绑定 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
705
原创 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
10019
原创 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
2150
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
881
原创 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
2359
原创 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
1761
原创 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
7186
原创 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
3840
原创 本地编译执行 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
2298
原创 Shell 小技巧 -- 原地更新终端输出信息 & 闪动效果 & 字体高亮
一、原地更新终端输出信息在使用 Linux 系统时会常常看到一些命令、程序脚本能够实时地刷新输出信息,而不是每次通过新的一行输出信息,这样我们就能够一方面动态地显示程序运行的进度,另一方面尽量地精简屏幕上的输出信息,从而使得我们对结果有更好的把握。要实现该功能,只需利用 \r 这个回车符即可。注意,Linux 环境下,回车的作用是将光标移到行首,而换行才是移到下一行。例子:#!/bin/bashfor i in {1..100}do printf "\rProcess: %3d" $i
2020-06-17 12:03:32
4354
2
原创 Linux 下的任务切换神器 Ctrl+Z
一、引言不知道各位有没有遇到过如下囧境:”正在开心地使用 vim 编辑文件,突然发现忘记复制某些内容,只能暂时保存退出,复制好后重新打开文件继续编辑,或者干脆再打开一个终端,搞得十分凌乱?”。那有没有一种不退出 vim 程序,又能自由切到终端上执行其他命令的方法呢?当然有啦,而且不止一种(比如在 vim 命令模式下输入 :!command,不过这并不是今天想要介绍的内容),今天我们就利用 Ctrl+Z 快捷键来实现。二、使用 Ctrl+Z 完成多任务切换在 Linux 系统中,按下 Ctrl+Z 实
2020-06-13 17:17:33
2820
原创 Proxmox 的 LXC上跑 Docker
Proxmox VE 6.1 基于 LXC 容器环境运行 Docker,配置步骤:1. LXC 容器不要开启特权模式,否则登陆可能会出现问题(测试时一直登陆失败);2. 生成 LXC 容器化虚拟机后,需要修改 /etc/pve/xxx.conf,追加如下内容:```shlxc.apparmor.profile: unconfinedlxc.cgroup.devices.allow: alxc.cap.drop:```保存配置后,重启 LXC 容器化虚拟机,就能在内部安装和使用
2020-05-13 15:06:24
5076
原创 使用 U 盘 安装 Proxmox VE 6.1
Proxmox VE 是基于 QEMU/KVM 和 LXC 的开源服务器虚拟化管理解决方案,可以使用集成的、易于使用的 Web 接口或 CLI 管理虚拟机、容器、集群、存储和网络。PVE 有方便易用的 WEB 界面,用户可通过网页的方式来管理服务器上使用 kvm 以及 lxc 技术运行的虚拟机。一、启动 U 盘准备 下载启动盘制作工具:https://rufus.ie/ 下载 Proxmox VE 6.1 ISO 镜像:https://www.proxmox.com/en...
2020-05-13 11:43:21
852
原创 CentOS 下使用 URLOS 快速部署 DzzOffice 企业办公套件
一、 背景简介DzzOffice 是一套开源办公套件,适用于企业、团队搭建自己的 类似「Google企业应用套件」、「微软 Office365」的企业协同办公平台,本文介绍如何在 CentOS 上使用 URLOS 快速部署 DzzOffice 套件。二、 部署步骤2.1 安装 URLOS# curl -LO www.urlos.com/siu && sh siu...
2020-04-15 19:22:23
592
原创 kubeadm join: couldn't validate the identity of the API Server
执行 kubeadm join 报如下错误:error execution phase preflight: couldn't validate the identity of the API Server: abort connecting to API servers after timeout of 5m0s出现该问题可能有多种原因:1. token 过期此时需要通过 k...
2020-03-26 16:58:46
4774
2
原创 K8s 的 UUID 是如何生成的?
引言不知道各位有没有注意到,在 K8s 系统中,每个实例对象都有自己的 UID(其实就是UUID),用于唯一标识自己,比如 Pod、ConfigMap 等对象的 metadata 内都有一个叫做 uid 的字段。为什么要有这个字段呢?因为仅靠 kind/namespace/name 是没办法确定实例还是那个实例的,比如实例被重建,kind/namespace/name 等信息并不会变化,这时候就...
2020-03-16 10:47:12
3762
1
原创 ERROR: musl-1.1.24-r1: temporary error (try again later)
问题介绍使用 alpine 作为基础镜像构建应用镜像时,执行到 RUN apk add musl-dev 时报错:ERROR: musl-1.1.24-r1: temporary error (try again later)官方的解释请戳:https://github.com/gliderlabs/docker-alpine/issues/334解决方案修改 Docker 的启动参数...
2020-03-09 13:36:35
1734
原创 Kube Proxy 工作模式对比分析
引言Kube Proxy 是 Kubernetes 生态的核心组件之一,主要负责处理访问 Service 的流量(包括通过 Cluster IP 以及 Node Port),自动将 Client 对 Kubernetes Service 的请求代理到正确的 Pod 或 Node 后端。截止 1.18 版本,Kube Proxy 能够支持的运行模式有 4 种,其平台支持情况如下表:Mod...
2020-03-03 10:58:45
1241
原创 0.1 + 0.2 == 0.3 吗?
1. 背景这要从一段 golang 代码讲起:func main() { var a float32 = 0.1 var b float32 = 0.2 var c float32 = 0.3 fmt.Println(a + b == c) // true var aa float64 = 0.1 var bb float64...
2020-03-01 23:53:05
1104
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人