前提条件:
1、一个cloudflare账号
2、一个域名
使用 Cloudflare Workers 来部署我们的镜像加速服务,这里我的账号是使用的免费计划,每天100,000次请求,个人用足够了
首先安装 wrangler 命令行工具 https://developers.cloudflare.com/workers/cli-wrangler/install-update
安装后执行 wrangler login
会自动跳转到浏览器进行身份验证,我们在页面中选择allow
![image-20240611160122394](https://hugo-doc-img.oss-cn-shanghai.aliyuncs.com/img/image-20240611160122394.png)
前提条件:
1、一个cloudflare账号
2、一个域名
使用 Cloudflare Workers 来部署我们的镜像加速服务,这里我的账号是使用的免费计划,每天100,000次请求,个人用足够了
首先安装 wrangler 命令行工具 https://developers.cloudflare.com/workers/cli-wrangler/install-update
安装后执行 wrangler login
会自动跳转到浏览器进行身份验证,我们在页面中选择allow
使用rdbtools工具
redis-rdb-tools 是一个 python 的解析 rdb 文件的工具,在分析内存的时候,我们主要用它生成内存快照。
主要有以下三个功能:
1 | pip install rdbtools python-lzf |
rdbtools工具包括了3个可执行文件:
rdb – 解析整个rdb文件
redis-memory-for-key – 解析server里的单个key
redis-profiler –解析rdb文件成html格式
1、rdb –help:解析整个rdb文件
环境背景: ack集群,gitlab-runner 运行在k8s中
早上一来同事告诉我好几个项目CI构建都在构建镜像阶段失败
查看日志如下:
1 | buildctl-daemonless.sh --debug build --frontend=dockerfile.v0 --local context=. --local dockerfile=. --output type=image,name=${IMAGE_TAG},push=true --opt build-arg:BUILD_DIR=${BUILD_ARGS} |
内心有点懵逼,我最近也没动过CI的流程,查看了一下docker的文档,发现此错误会出现在/proc/sys/user/max_user_namespaces
太小时,想看可能是凌晨时候这个k8s集群增加了一台服务器,流水线的这个pod被调度到新的机器上,查看一下新机器的max_user_namespaces
,比较偷懒,没有登陆服务器,直接在阿里云控制台远程执行,如下:
max_user_namespaces
值果真是0,使用如下命令修改:
1 | sudo echo "user.max_user_namespaces=28633" >> /etc/sysctl.conf |
再次构建命令发现如下报错:
当我们使用kubernetes集群时,节点上会积累很多不再使用的镜像,虽然kubelet设置的有镜像回收的阈值,但是默认阈值为85%,日常使用中旧的镜像还是会占用很多磁盘空间,可以根据自己容器运行时来使用如下方式清理
1 | docker image prune -f |
首先下载crictl
1 | #!/bin/bash |
如果需要写到cron作为定时任务运行则需要
1 | crictl --runtime-endpoint unix:///run/containerd/containerd.sock rmi --prune |
kuboard是一个给研发使用的k8s dashboard ,研发告诉说我打不开了,打开页面发现页面500 无法访问(此处无图,忘了截图保存了)
首先查看了一个pod状态都正常
1 | [root@dev-tools ~]# kubectl -n kuboard get pod |
想偷个懒,先祭出祖传重启大法看看能不能打开
1 | kubectl -n kuboard rollout restart deployment kuboard-v3 |
重启后还是打不开,于是开始查看日志
kuboard日志
1 | {"level":"warn","ts":"2023-04-12T14:38:31.018+0800","caller":"clientv3/retry_interceptor.go:61","msg":"retrying of unary invoker failed","target":"endpoint://client-5cd98b97-dba1-498e-ae6f-4bcf1408145f/kuboard-etcd-0.kuboard-etcd:2379","attempt":0,"error":"rpc error: code = ResourceExhausted desc = etcdserver: mvcc: database space exceeded"} |
etcd日志
1 | 2023-04-12 06:38:05.763042 W | etcdserver: failed to apply request "header:<ID:12031796812563778311 > txn:<compare:<target:CREATE key:\"kuboard-sso-namespace/auth_req/rmq7qrteaen47y5kdvf3y32w5\" create_revision:0 > success:<request_put:<key:\"kuboard-sso-namespace/auth_req/rmq7qrteaen47y5kdvf3y32w5\" value_size:427 >> failure:<>>" with response "" took (481ns) to execute, err is etcdserver: no space |
Umami 是一种开源、注重隐私的 Google Analytics 替代品。Umami 为您提供了一个强大的网络分析解决方案,不会侵犯您用户的隐私。此外,当您自行托管 Umami 时,您可以完全控制您的数据。
目前看好像直接安装v2.x无法成功,这里采用先安装v1.x然后升级至v2.x。
当前latest版本为v2.2.0
要求
首先安装1.40.0版本的umami
1 | git clone -b v1.40.0 https://github.com/umami-software/umami.git |
启动后访问127.0.0.1:3000查看一下页面是否正常,账号admin 密码umami
Pomerium 是一种身份感知代理,可实现对内部应用程序的安全访问。Pomerium 提供了一个标准化的接口来为应用程序添加访问控制,无论应用程序本身是否具有授权或身份验证。
Pomerium 可用于:
为内部应用程序提供单点登录网关。
基于上下文、身份和设备身份实施动态访问策略。
聚合访问日志和遥测数据。
为自定义、本地和托管应用程序和服务添加统一访问和身份
为基于服务的授权系统执行委托的用户授权:
Istio
谷歌云
作为VPN 替代品
Pomerium 位于最终用户和需要强身份验证的服务之间。在通过您的身份提供商 (IdP) 验证身份后,Pomerium 使用可配置的策略来决定如何路由用户的请求以及他们是否有权访问该服务。
Pomerium 由 4 个逻辑组件组成:
在生产部署中,建议您单独部署每个组件。这允许您限制外部攻击面,以及独立扩展和管理服务。
Sloop 可以监控 Kubernetes event ,记录事件和资源状态变化的历史,并提供可视化来帮助调试过去的事件。
主要特点:
我们可以使用官方提供的镜像安装,sloop
数据文件保存在容器的/data目录下
1 | docker run -it -p 8080:8080 -v ~/.kube/config:/kube/config -v /data:/data -e KUBECONFIG=/kube/config sloopimage/sloop |
我们使用的是阿里云ack pro 托管版集群,创建集群时默认开启采集ingress-nginx的日志,开发和产品那边提了一个需求,排查问题的时候需要查看请求的body
和request headers
中的部分自定义字段用于排错, 查看了一下默认的nginx-ingress的日志输出格式,发现不包含这些信息,所以我们就要修改日志输出的内容,并且还要保证日志采集展示效果正常。
Ingress Controller访问日志格式可以在ConfigMap中看到(默认ConfigMap为kube-system命名空间下的nginx-configuration)。
ACK Ingress Controller默认的日志格式为:
1 | $remote_addr - [$remote_addr] - $remote_user [$time_local] |
注意:改动日志格式后,SLS的日志收集规则也需要做相应改动,否则无法在SLS日志控制台看到正确日志信息。
我们先看一下未修改前日志输出的内容:
1 | 106.15.137.195 - [106.15.137.195] - - [01/May/2022:22:35:13 +0800] "POST /xxl-job-admin/api/registry HTTP/1.1" 200 49 "-" "Java/1.8.0_191" 518 0.004 [harmay-digital-digital-xxl-job-8080] 192.168.94.49:8080 49 0.002 200 3ed90ece4e7fcfb4a555e386a513a143 dev-xxl-job.harmay.com [] 00-e4c221406c5b217f13ae117af5509a48-ecbeec29adbc21ab-01 |
此时我们采集的日志如下:
akcess是一个命令行工具,我们可以用其来生成kubeconfig从而授权对kubernetes集群的访问。
当我们执行akcess allow
命令时候,它会创建相应的role,rolebinding 以及CertificateSigningRequest资源.
这里以x86架构64位的linux系统为例,其余架构请参考 release
1 | export VERSION=0.0.3 |
akcess支持如下命令
1 | [root@master-01 ~]# akcess -h |
允许列出monitoring空间的pod,这里我们直接将输出重定向到文件akcess-demo文件中
1 | [root@master-01 ~]# akcess allow --verb list --resource pods -n monitoring > akcess-demo |