2022
10
JOBCHER BLOG
Kubernetes — 探针和生命周期
Kubernetes — 探针和生命周期 用于判断容器内应用程序是否已经启动。 存活(Liveness)探针 用于探测容器是否运行,如果探测失败,kubelet 会根据配置的重启策略进行相应的处理,若没有配置探针该返回值默认为 success 就绪(Readiness)探针 用于探测容器内的程序是否健康,如果返回值为 success,那么代表这个容器已经完全启动,并且程序已经是可以接受流量的状态 启动(Startup)探针 用于探测容器是否启动,如果配置了 startup 就会先禁止其他探测,直到它成功,成功后将不在运行探测 Pod 检测方式 ExecAction:在容器执行一个命令,返回值为 0,则认为容器健康 TCPSocketAction:通过 TCP 连接检查容器是否联通,通的话,则认为容器正常 HTTPGetAction:通过应用程序暴露的 API 地址来检查程序是否正常的,如果状态码为 200-400 之间,则认为容器健康 gRPCAction:通过 gRPC 的检查机制,判断容器是不是正常 StartupProbe 启动探针 有时候,会有一些现有的应用在启动时需要较长的初始化时间。 要这种情况下,若要不影响对死锁作出快速响应的探测,设置存活探测参数是要技巧的。 技巧就是使用相同的命令来设置启动探测,针对 HTTP 或 TCP 检测,可以通过将 failureThreshold * periodSeconds 参数设置为足够长的时间来应对糟糕情况下的启动时间。 1ports: 2 - name: liveness-port 3 containerPort: 8080 4 hostPort: 8080 5 6livenessProbe: 7 httpGet: 8 path: /healthz 9 port: liveness-port 10 failureThreshold: 1 11 periodSeconds: 10 12 13startupProbe: 14 httpGet: 15 path: /healthz 16 port: liveness-port 17 failureThreshold: 30 18 periodSeconds: 10 幸亏有启动探测,应用程序将会有最多 5 分钟(30 * 10 = 300s)的时间来完成其启动过程。 一旦启动探测成功一次,存活探测任务就会接管对容器的探测,对容器死锁作出快速响应。 如果启动探测一直没有成功,容器会在 300 秒后被杀死,并且根据restartPolicy来执行进一步处置。
JOBCHER BLOG
windows-exporter 监控
windows-exporter 监控安装 windows_exporter 下载安装 启动 下载 msi 版本,输入一下命令启动 1msiexec /i C:\Users\Administrator\Downloads\windows_exporter.msi ENABLED_COLLECTORS="ad,iis,logon,memory,process,tcp,scheduled_task" TEXTFILE_DIR="C:\custom_metrics\" 卸载 1msiexec /uninstall C:\Users\Administrator\Downloads\windows_exporter.msi 添加 prometheus 监控 prometheus.yaml 1# 新增 windows-exporter 2- job_name: "windows-exporter" 3 file_sd_configs: 4 - files: 5 - "./file_sd/windows-exporter.yaml" ./file_sd/windows-exporter.yaml 1# 新增 windows-exporter 2- targets: ["192.168.0.6:9182"] 3 labels: 4 instance: windows-task 添加 alertmanager 告警 1# 告警信息 2groups: 3 - name: sanjiang windows 任务计划程序告警 4 rules: 5 - alert: windows实例任务告警 6 expr: windows_scheduled_task_state{state="disabled",task=~"/ETL_kettle_tasks/.*"}==1 7 for: 30s 8 labels: 9 severity: critical 10 target: "{{$labels.
JOBCHER BLOG
Kubernetes — 开放标准(OCI、CRI、CNI、CSI、SMI、CPI)概述
Kubernetes — 开放标准(OCI、CRI、CNI、CSI、SMI、CPI)概述 什么是 Kubernetes 开放标准?— K8s 开放标准简介 开放标准有助于和补充像 Kubernetes 这样的系统,Kubernetes 是用于编排容器的事实上的标准平台。开放标准定义了实施 Kubernetes 的最佳实践,并在支持此实施方面发挥着至关重要的作用。开放标准由开源 Kubernetes 社区而非某个特定供应商制定,以确保更高的效率、避免供应商锁定以及更轻松地将其他软件集成到技术堆栈中。 OCI 容器开放接口规范,由多家公司共同组成于 2015 年 6 月成立的项目(Docker, Google, CoreOS 等公司),并由 Linux 基金会运行管理,旨在围绕容器格式和运行时制定一个开放的工业化标准,目前主要有两个标准文档:容器运行时标准 (runtime spec)和 容器镜像标准(image spec) OCI 是一个开放的治理结构,其明确目的是围绕容器格式和运行时创建开放的行业标准。 它提供了必须由容器运行时引擎实现的规范。两个重要的规格是: runC:种子容器运行时引擎。大多数现代容器运行时环境都使用 runC 并围绕这个种子引擎开发附加功能。 这种低级运行时用于启动容器的各种工具,包括 Docker 本身。 OCI 规范:关于如何运行、构建和分发容器的映像、运行时和分发规范。 虽然 Docker 经常与容器技术同步使用,但社区一直致力于 OCI 的开放行业标准。 Image-Spec image-spec 定义了如何构建和打包容器镜像。 本规范的目标是创建可互操作的工具,用于构建、传输和准备要运行的容器映像。 Runtime-Spec runtime-spec 指定容器的配置、执行环境和生命周期。 这概述了如何运行在磁盘上解压的“文件系统包(filesystem bundle)”。概括地说,OCI 实现会下载一个 OCI 映像,然后将该映像解压缩到一个 OCI 运行时文件系统包中。 Distribution-Spec Distribution-Spec 提供了一个标准,用于一般内容的分发,特别是容器图像的分发。它是 OCI 项目的最新补充。 实现分发规范的容器注册表为容器映像提供可靠、高度可扩展、安全的存储服务。 客户要么使用云提供商实施、供应商实施,要么使用分发的开源实施。 CRI CRI(Container Runtime Interface):容器运行时接口,提供计算资源。​ ​kubernetes1.
JOBCHER BLOG
kubernetes 部署插件 (Flannel、Web UI、CoreDNS、Ingress Controller)
k8s 部署插件 Kubernetes 是高度可配置且可扩展的。因此,大多数情况下, 你不需要派生自己的 Kubernetes 副本或者向项目代码提交补丁,本文会介绍几种常用的 k8s 插件,如果大家喜欢的话,希望大家点赞支持。 1. Flannel 网络插件 Flannel是由 go 语言开发,是一种基于 Overlay 网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel 是 CoreOS 开发,专门用于 docker 多主机互联的一个工具,简单来说,它的功能是让集群中的不同节点主机创建的容器都具有全局唯一的虚拟IP地址 主要功能: 为每个 node 分配 subnet,容器将自动从该子网中获取 IP 地址 当有 node 加入到网络中时,为每个 node 增加路由配置 下载并安装 1wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 2kubectl apply -f kube-flannel.yml 如果 yml 中的"Network": 10.244.0.0/16和kubeadm init xxx --pod-network-cidr不一样,就需要修改成一样的。不然可能会使得Node间Cluster IP不通。 2. Ingress Controller Ingress 是对集群中服务的外部访问进行管理的 API 对象,典型的访问方式是 HTTP。 Ingress 可以提供负载均衡、SSL 终结和基于名称的虚拟托管 下面是一个将所有流量都发送到同一 Service 的简单 Ingress 示例: Ingress 可为 Service 提供外部可访问的 URL、负载均衡流量、终止 SSL/TLS,以及基于名称的虚拟托管。 Ingress 控制器 通常负责通过负载均衡器来实现 Ingress,尽管它也可以配置边缘路由器或其他前端来帮助处理流量。
09
JOBCHER BLOG
Cloudflare Zero Trust 内网穿透
Cloudflare Zero Trust 内网穿透 最快的 Zero Trust 应用访问和互联网浏览平台 增加可见性,消除复杂性,降低远程和办公室用户的风险。杜绝数据丢失、恶意软件和网络钓鱼,保护用户、应用程序和设备安全。 使用 Tunnel 隧道来实现内网传统,实现内网访问各类应用 安装部署 https://dash.teams.cloudflare.com/ Docker 部署 在 docker 环境运行 <token> 是你个人令牌 1docker run -d --name cloudflared cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <token> Linux 部署 X86-64 位 1curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm && \ 2sudo yum localinstall -y cloudflared.rpm && \ 3sudo cloudflared service install <token> X86-32 位 1curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-386.rpm && 2 3sudo yum localinstall -y cloudflared.rpm && 4 5sudo cloudflared service install <token> arm64 1curl -L --output cloudflared.
JOBCHER BLOG
苏州旅行
苏州旅行 新冠肺炎 COVID-19 警告 苏州,古称吴,现简称苏,是中华人民共和国江苏省东南部的一个地级市,位于长江三角洲和太湖平原的中心地带,著名的鱼米之乡、状元之乡、院士之乡、经济重镇、历史文化名城,自古与杭州共享有“上有天堂、下有苏杭”美誉。 苏州景点 day1 金鸡湖 苏州金鸡湖,是国家5A级景区,但却是免费开放的。湖东与湖西高楼林立,展现了苏州现代的一面。夜晚,灯光璀璨,如群星般夺目;霓虹闪烁,如银河般绚烂~ 金鸡湖十景 苏州中心 东方之门 音乐喷泉 金鸡湖大桥 文化艺术中心 月光码头 诚品书店 国金中心 望湖角 李公堤 day2 苏州博物馆 地址:姑苏区东北街204号 交通:乘坐游1、游2、游5、55、178、202、309、313、518、529路等到苏州博物馆 门票:免费(可在官网提前预约) 开放时间:每星期二至星期日- 9:00~17:00(16:00停止入馆) ◆建议用时:2-3小时 拙政园 拙政园和苏州博物馆紧临,两者之间步行不会超过3分钟,而平江路是在拙政园的南门沿着门前的东北街往东走,大约在150米处右转过桥就是了,因此可以把这三处安排在同一天,建议游览顺序是拙政园—苏州博物馆—平江路。 淡季(1、2、3、6、11、12月):70元 旺季(4、5、7、8、9、10月):90元 day3 虎丘 地址:姑苏区山塘街虎丘山门内8号 交通:南门入口:146、游1、游2路虎丘首末站;北门入口:32、快线3号虎丘北门站 门票:淡季:60.00元 旺季:80.00元 开放时间: 7:30-17:30/17:00 建议用时:2-3小时 苏州美食 饭店 苏帮菜——浓油赤酱里的姑苏风情 鲃肺汤是取生长于太湖一带的鲃鱼,将其肉与肝加入火腿、香菇、笋片等辅料,在鸡汤中共同熬煮,汤鲜味美,是一道不可多得的汤品。 酱方是采用上乘猪五花为原料,经 24 小时腌制后,加入卤汁炖煮 3 小时而成。肉的色泽鲜亮诱人,入口外皮 Q 弹、肉质紧实。 响油鳝糊是以将新鲜鳝鱼切成段,加酱油等佐料爆炒。因鳝糊上桌时油滋滋作响,而得名“响油鳝糊”。菜色深红,口味鲜甜,油而不腻。 樱桃肉因肉形状及色泽极似樱桃而得名,是将优质的五花肉切成小块,以文火炖煮七八小时而成。肥而不腻,满口精华。 松鼠鳜鱼是将鳜鱼在油锅内炸至金黄,再淋上由番茄酱等熬制的酱汁而成。因炸开的鱼肉形似松鼠而得名,入口酥脆酸甜。 碧螺虾仁是将新鲜虾仁配以碧螺春为佐料烹制而成,色泽清淡雅致,虾肉饱满 Q 弹,鲜甜中夹杂了茶叶的香味。 推荐餐厅: 珍珠饭店:蚌肉金花菜 吴门人家:吴门人家6:30-9:00供应早茶,提供糖粥、豆腐花、苏式面、馄饨等各类苏式点心,价格为20元/人 得月楼:松鼠桂鱼、响油鳝糊、清炒虾仁、油爆虾、蟹粉豆腐、狮子头等 松鹤楼:店内供应的菜品与得月楼也是大同小异 小吃 苏式汤面——老苏州的早餐 推荐餐厅: 同得兴:枫镇大肉面 孙盛兴奥灶面馆: 奥灶鸭和爆鱼的浇头 韦复兴: 阳春面 苏式点心——吴侬软语般的甜糯滋味 推荐餐厅: 随柳居:糖粥、泡泡小馄饨 新梅华·茶点餐厅:糖芋艿 老苏州大客堂·特色小吃:响油鳝糊、生煎、锅贴 生煎——一口爆汁的苏州人气美食 推荐餐厅: 哑巴生煎:泡泡小馄饨、牛肉粉丝汤 大阿二生煎:两面黄、生煎 馄饨——别具风味的平凡美食 推荐餐厅: 绿杨馄饨:鲜肉、三鲜、鸡丝、鸡汁虾肉、荠菜、香菇馄饨 熙盛源:无锡小笼、红汤馄饨、开洋馄饨、蟹粉小笼 烧饼豆浆——寻常美食中的苏州味道 推荐餐厅: 王氏林记烧饼(双塔菜场店):大饼油条、豆浆 阊门姚记豆浆:24 小时通宵营业,咸豆浆、荷叶包美人 糕团——苏州风俗必备美食 推荐餐厅: 黄天源:定胜糕、猪油糕、薄荷糕 明月楼(糕团店):桂花糕、炒肉团子 长发西饼:鲜肉月饼 胥城鲜肉月饼:鲜肉月饼
JOBCHER BLOG
懒人烧排骨
【主料】 精排骨(500 克) 【辅料】 食用面碱(约 2 克) 柠檬(半个) 生姜(1 小块) 小葱(2 根) 八角(1 颗) 桂皮(1 小块) 香叶(半片) 冰糖(约 50 克) 可乐(1000 克) 【调味料】 食用盐(适量) 料酒(适量) 生抽酱油(20 克)
k8s CNI 问题 连接认证失效
k8s CNI 问题 连接认证失效
k8s CNI 问题 连接认证失效 删除 calico 换成 flannel 后,容器没有正常启动 network: error getting ClusterInformation: connection is unauthorized: Unauthorized] 解决问题 删除掉 /etc/cni/net.d/ 目录下的 calico 配置文件即可。 要删除所有节点的配置文件 1sudo rm -rf /etc/cni/net.d/*calico* 不要重复网络插件
k8s.gcr.io国内无法连接解决方法
k8s.gcr.io国内无法连接解决方法
k8s.gcr.io 国内无法连接解决方法 Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 这个一看知道什么原因了,应该 GFW!那好吧,只能给 docker 加个代理了。 解决问题 添加 mirror 站点 1registry.cn-hangzhou.aliyuncs.com/google_containers
JOBCHER BLOG
Golang 初识(安装、使用)
Golang 初识(安装、使用) Go 导学 go 语言由 google 公司推出。 运行速度快,简单易学 适合区块链开发 拥有丰富指令 可以直接包含 C 语言 语言层面支持并发 Go 方向 网络编程 服务器编程 区块链开发 环境安装 安装环境 安装包下载 https://golang.google.cn/dl/ windows 部署 1wget https://golang.google.cn/dl/go1.19.1.windows-amd64.msi 2# 直接安装 GOPATH 设置 在环境变量 PATH 上直接配置安装地址 编写第一个程序 1package main 2 3import "fmt" 4 5func main() { 6 fmt.Println("Hello World!") 7}
JOBCHER BLOG
headscale 部署使用
Headscale Tailscale 的控制服务器是不开源的,而且对免费用户有诸多限制,这是人家的摇钱树,可以理解。好在目前有一款开源的实现叫 Headscale,这也是唯一的一款,希望能发展壮大。 Headscale 由欧洲航天局的 Juan Font 使用 Go 语言开发,在 BSD 许可下发布,实现了 Tailscale 控制服务器的所有主要功能,可以部署在企业内部,没有任何设备数量的限制,且所有的网络流量都由自己控制。 Headscale 部署 我决定使用docker-compose进行部署 创建存储 1#!/bin/bash 2mkdir -p /opt/headscale 3mkdir -p ./config 4touch ./config/db.sqlite 5curl https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml -o ./config/config.yaml 运行 docker-compose 文件 创建 docker-compose.yaml 1version: "3" 2services: 3 headscale: 4 image: headscale/headscale:latest 5 volumes: 6 - ./config:/etc/headscale/ 7 - ./data:/var/lib/headscale 8 ports: 9 - 8080:8080 10 - 9090:9090 11 - 50443:50443 12 command: headscale serve 13 restart: unless-stopped 运行
清理Docker容器日志
清理Docker容器日志
清理 Docker 容器日志 如果 docker 容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在 Linux 或者 Unix 系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null > *-json.log,当然你也可以通过rm -rf删除后重启 docker。 日志清理脚本 clean_docker_log.sh 1#!/bin/sh 2 3echo "======== start clean docker containers logs ========" 4 5logs=$(find /var/lib/docker/containers/ -name *-json.log) 6 7for log in $logs 8 do 9 echo "clean logs : $log" 10 cat /dev/null > $log 11 done 12 13echo "======== end clean docker containers logs ========" chmod +x clean_docker_log.sh && ./clean_docker_log.sh 设置 Docker 容器日志大小 设置一个容器服务的日志大小上限
JOBCHER BLOG
羊了个羊小程序 破解通关
注意此教程需要通过电脑端完成 操作步骤 1、微信打开羊了个羊小程序,玩第一关 2、进入当前登录的微信数据文件夹 微信左下角 -> 设置 -> 文件管理 -> 打开文件夹 打开后进入当前登录的微信数据文件夹 3、进入当前登录微信数据文件夹后,依次进入 \Applet\wx141bfb9b73c970a9\usr\gamecaches\resources 注意 wx141bfb9b73c970a9 文件名可能不同,但以 a9 结尾 4、修改游戏配置文件 在此文件夹下,有很多 json 文件,找到默认排序的第三个,大小 2k 的文件 我的电脑是 16632884479734.json 文件,用记事本打开,清空里面内容,将 new.txt 文件中的代码复制进此 json 文件,保存关闭 1[1,0,0,[["cc.JsonAsset",["_name","json"],1]],[[0,0,1,3]],[[0,"levelConfigData",{"dailyLevel":[[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001],[80001,80001]],"topicLevel":[[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017],[10017,10017]]}]],0,0,[],[],[]] 之后打开游戏,仅需要完成 4 次第一关九宫格样式即可加入羊群!
JOBCHER BLOG
Featured Post without Image
A sample for showing how carousel handle featured posts that without images.
08
K8S 问题排查:cgroup 内存泄露问题
K8S 问题排查:cgroup 内存泄露问题
K8S 问题排查:cgroup 内存泄露问题 unable to ensure pod container exists: failed to create container for [kubepods besteffort pod5f26dae8-0421-4eab-a3f7-aa51c6848e2b] : mkdir /sys/fs/cgroup/memory/kubepods/besteffort/pod5f26dae8-0421-4eab-a3f7-aa51c6848e2b: cannot allocate memory 查看 linux 内核 1cat /proc/version 2uname -a 可以发现 linux 版本是 3.0 版本 原因 cgroup 的 kmem account 特性在 Linux 3.x 内核上有内存泄露问题,然后k8s用了这个特性,导致后面创建不出新的pod来了 解决方法 1# 修改/etc/default/grub 为 2GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet cgroup.memory=nokmem" 3#加上了 cgroup.memory=nokmem 4# 生成配置 5/usr/sbin/grub2-mkconfig -o /boot/grub2/grub.cfg 6 7# 重启机器 8reboot 验证 1cat /sys/fs/cgroup/memory/kubepods/burstable/pod*/*/memory.kmem.slabinfo 输出信息 1cat: /sys/fs/cgroup/memory/kubepods/burstable/pod0fe273ca-42e0-4223-9fe8-16d8dd1774e9/0fdd5d9c16929fd600dbdf313b5c3ebabad912dc0cb076ed6e7799e028b31481/memory.
JOBCHER BLOG
RocketMQ k8s部署 4主4从集群
RocketMQ k8s 部署 4 主 4 从集群 使用 NFS 配置 StatefulSet 的动态持久化存储 安装 NFS 服务端 1sudo apt update 2sudo apt install nfs-kernel-server nfs-common 安装 NFS 客户端 所有的节点都得执行 sudo apt install nfs-common -y 创建目录 1mkdir -p /data/storage/k8s/rocketmq 使用 NFS 作为StatefulSet持久化存储的操作记录,分别需要创建nfs-provisioner的rbac、storageclass、nfs-client-provisioner和statefulset的pod 创建 nfs 的 rbac 1--- 2apiVersion: v1 3kind: ServiceAccount 4metadata: 5 name: nfs-provisioner 6 namespace: sanjiang 7--- 8kind: ClusterRole 9apiVersion: rbac.authorization.k8s.io/v1 10metadata: 11 name: nfs-provisioner-runner 12 namespace: sanjiang 13rules: 14 - apiGroups: [""] 15 resources: ["persistentvolumes"] 16 verbs: ["get", "list", "watch", "create", "delete"] 17 - apiGroups: [""] 18 resources: ["persistentvolumeclaims"] 19 verbs: ["get", "list", "watch", "update"] 20 - apiGroups: ["storage.
contained 安装及使用
contained 安装及使用
contained 安装及使用 containerd 是一个行业标准的容器运行时,强调简单性、健壮性和可移植性。它可作为 Linux 和 Windows 的守护进程使用,可以管理其主机系统的完整容器生命周期:图像传输和存储、容器执行和监督、低级存储和网络附件等。 containerd is a member of CNCF with graduated status. 早在 2016 年 3 月,Docker 1.11的Docker Engine里就包含了containerd,而现在则是把containerd从Docker Engine里彻底剥离出来,作为一个独立的开源项目独立发展,目标是提供一个更加开放、稳定的容器运行基础设施。和原先包含在 Docker Engine 里containerd相比,独立的containerd将具有更多的功能,可以涵盖整个容器运行时管理的所有需求。 containerd并不是直接面向最终用户的,而是主要用于集成到更上层的系统里,比如Swarm, Kubernetes, Mesos等容器编排系统。 containerd以Daemon的形式运行在系统上,通过暴露底层的gRPC API,上层系统可以通过这些API管理机器上的容器。 每个containerd只负责一台机器,Pull 镜像,对容器的操作(启动、停止等),网络,存储都是由 containerd 完成。具体运行容器由runC负责,实际上只要是符合OCI规范的容器都可以支持。 对于容器编排服务来说,运行时只需要使用containerd+runC,更加轻量,容易管理。 5.独立之后containerd的特性演进可以和Docker Engine分开,专注容器运行时管理,可以更稳定。 安装 centos 1yum install -y containerd.io ubuntu 1apt install -y containerd.io 设置开机自启 1systemctl enable containerd 2systemctl start containerd 3systemctl status containerd 验证 1ctr version ctr 命令 命令 作用 plugins, plugin 提供有关容器插件的信息 version 打印客户端和服务器版本 containers, c, container 管理容器 content 管理内容 events, event 显示容器事件 images, image, i 管理图像 leases 管理租约 namespaces, namespace, ns 管理租命名空间 pprof 为 containerd 提供 golang pprof 输出 run 运行一个容器 snapshots, snapshot 管理快照 tasks, t, task 管理任务 install 安装一个新包 oci OCI 工具 shim 直接与 shim 交互 help, h 显示命令列表或一个命令的帮助
JOBCHER BLOG
Planet 下载及安装
Planet 下载及安装 官网下载 Planet 是一款用于发布和关注 Web 内容的免费开源软件,它不需要集中式服务器或服务。它使用 IPFS 来实现点对点的内容分发。此外,您可以将您的内容链接到以太坊名称 (.eth),以便其他人可以通过 Planet 以 .eth 名称关注您。由于 IPFS 和 ENS 都是去中心化的,因此您可以以去中心化的方式构建您的网站或关注其他网站。 如何使用 标准是 EIP-1577,这个 Content Hash 字段可以接受一些可能的值。例如,IPFS——另一种去中心化的内容分发技术。而vitalik.eth 网站已经在 IPFS 上运行。 通过 Planet 关注来自 vitalik.eth 的更新 使用 Planet 创建网站后,右键单击侧栏中的项目,然后选择Copy IPNS,然后您将在粘贴板中看到如下所示的内容: 1k51qzi5uqu5dgv8kzl1anc0m74n6t9ffdjnypdh846ct5wgpljc7rulynxa74a 公开 ENS 然后您可以像这样将该 IPNS 放入您的 ENS ContentHash 中: 确保在该字符串之前添加了 ipns://。 完成! 然后您的网站将链接到您的 ENS。恭喜!现在你有一个在 ENS + IPFS 上运行的去中心化网站!
JOBCHER BLOG
关系数据库 索引操作
索引 在关系数据库中,如果有上万甚至上亿条记录,在查找记录的时候,想要获得非常快的速度,就需要使用索引。 索引是关系数据库中对某一列或多个列的值进行预排序的数据结构。通过使用索引,可以让数据库系统不必扫描整个表,而是直接定位到符合条件的记录,这样就大大加快了查询速度。 students表: id class_id name gender score 1 1 小明 M 90 2 1 小红 F 95 3 1 小军 M 88 如果要经常根据score列进行查询,就可以对score列创建索引: 1ALTER TABLE students 2ADD INDEX idx_score (score); 使用ADD INDEX idx_score (score)就创建了一个名称为idx_score,使用列score的索引。索引名称是任意的,索引如果有多列,可以在括号里依次写上,例如: 1ALTER TABLE students 2ADD INDEX idx_name_score (name, score); 索引的效率取决于索引列的值是否散列,即该列的值如果越互不相同,那么索引效率越高。反过来,如果记录的列存在大量相同的值,例如gender列,大约一半的记录值是M,另一半是F,因此,对该列创建索引就没有意义。 唯一索引 在设计关系数据表的时候,看上去唯一的列,例如身份证号、邮箱地址等,因为他们具有业务含义,因此不宜作为主键。 但是,这些列根据业务要求,又具有唯一性约束:即不能出现两条记录存储了同一个身份证号。这个时候,就可以给该列添加一个唯一索引。例如,我们假设students表的name不能重复: 1ALTER TABLE students 2ADD UNIQUE INDEX uni_name (name); 通过UNIQUE关键字我们就添加了一个唯一索引。 也可以只对某一列添加一个唯一约束而不创建唯一索引: 1ALTER TABLE students 2ADD CONSTRAINT uni_name UNIQUE (name); 这种情况下,name列没有索引,但仍然具有唯一性保证。 无论是否创建索引,对于用户和应用程序来说,使用关系数据库不会有任何区别。这里的意思是说,当我们在数据库中查询时,如果有相应的索引可用,数据库系统就会自动使用索引来提高查询效率,如果没有索引,查询也能正常执行,只是速度会变慢。因此,索引可以在使用数据库的过程中逐步优化 通过对数据库表创建索引,可以提高查询速度。 通过创建唯一索引,可以保证某一列的值具有唯一性。 数据库索引对于用户和应用程序来说都是透明的。
JOBCHER BLOG
skywalking APM 监控
skywalking 基于 OpenTracing 规范,专门为微服务架构以及云原生服务。 APM 监控 一个基于微服务架构的电商系统 APM (Application Performance Management) 即应用性能管理,属于 IT 运维管理(ITOM)范畴. 分为一下三个方面: Logging 服务在处理某个请求时打印的错误日志,可以将这些日志信息记录到Elasticsearch或是其他存储中。通过 Kibana 或是其他工具来分析这些日志了解服务的行为和状态,大多数情况下。日志记录的数据很分散,并且相互独立。例如错误日志,请求处理过程中关键步骤的日志等等。 Metrics Metric是可以聚合的,例如为电商系统中每个 HTTP 接口添加一个计数器,计算每个接口的 QPS,可以通过简单的加和计算得到系统的总负载情况。 Tracing 在微服务架构系统中一请求会经过很多服务处理,调用链路会非常长,要确定中间哪个服务出现异常是非常麻烦的事情,通过分布式链路追踪,运维人员就可以构建一个请求的视图。视图上战术了一个请求从进入系统开始到返回响应的整个流程。 系统交互图 系统加载图 > 目前流行的APM监控 Zipkin 对 web.xml 进行修改,代码侵入 twitter 开源 Cat 支持 Java、C/C++、Node.Js、Python、go 代码侵入,埋点 美团开源 Pinpoint 基于字节码注入技术,代码无侵入 韩国公司开发,社区交流滞后 只支持 hbase 颗粒度更细 Skywalking 观测性分析平台 基于字节码注入技术,代码无侵入 服务、服务实例、端点指标分析 服务拓扑图分析 服务、服务实例和端点(Endpont)SLA 分析 支持 es,h2,mysql,TiDb,sharding-sphere skywalking 整体框架 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。 左部分 SkyWalking UI :负责提供控台,查看链路等等。 skywalking 配置 使用 docker-compose 安装 使用 mysql 作为存储
JOBCHER BLOG
systemd 守护命令
介绍 systemd 是 linux 中用来启动守护进程,Linux 最早一直采用 init 进程 (systemd 架构图) systemd 命令 systemd 不是一个具体的命令,而是一组命令,用于系统管理的各个方面 1.systemctl systemctl是 Systemd 的主命令,用于管理系统。 1# 重启系统 2$ sudo systemctl reboot 3 4# 关闭系统,切断电源 5$ sudo systemctl poweroff 6 7# CPU停止工作 8$ sudo systemctl halt 9 10# 暂停系统 11$ sudo systemctl suspend 12 13# 让系统进入冬眠状态 14$ sudo systemctl hibernate 15 16# 让系统进入交互式休眠状态 17$ sudo systemctl hybrid-sleep 18 19# 启动进入救援状态(单用户状态) 20$ sudo systemctl rescue 2.systemd-analyze systemd-analyze命令用于查看启动耗时 1# 查看启动耗时 2systemd-analyze 3 4# 查看每个服务的启动耗时 5$ systemd-analyze blame 6 7# 显示瀑布状的启动过程流 8$ systemd-analyze critical-chain 9 10# 显示指定服务的启动流 11$ systemd-analyze critical-chain atd.
docker 问题处理
docker 问题处理
docker 无法启动 打开服务器输入docker ps,输出错误 Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? 怀疑是不是docker.services 部署没成功,systemctl start docker 启动 docker,结果服务器还是报错 Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details. systemctl status docker.service 输出日志: 1● docker.service - Docker Application Container Engine 2 Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled) 3 Active: failed (Result: exit-code) since Thu 2022-08-04 11:43:05 CST; 2min 57s ago 4TriggeredBy: ● docker.
JOBCHER BLOG
kubernetes 存储
kubernetes 存储 k8s 支持多种途径的多种类型的存储。例如 iSCSI,SMB,NFS,以及对象存储。都是不同类型的部署在云上或者自建数据中心的外部存储系统。k8s 上的所有存储都被称作卷 CSI 容器存储接口 CSI 是 k8s 存储体系中一部分,是一个开源项目,定义了一套基于标准的接口,从而使容器能够以一种统一的方式被不同的容器编排的工具使用。可以将插件称为provisioner 持久化 持久化卷 (pv) 持久化卷申请 (pvc) 存储类 (sv) PV 代表 k8s 的存储,pvc 代表的是许可证,赋予 pod 访问 pv 的权限。cs 使分配过程是动态的。 使用 iSCSI 操作存储 iscsi 卷能将 iSCSI (基于 IP 的 SCSI) 卷挂载到你的 Pod 中。 不像 emptyDir 那样会在删除 Pod 的同时也会被删除,iscsi 卷的内容在删除 Pod 时会被保留,卷只是被卸载。 这意味着 iscsi 卷可以被预先填充数据,并且这些数据可以在 Pod 之间共享。 iSCSI 的一个特点是它可以同时被多个用户以只读方式挂载。 这意味着你可以用数据集预先填充卷,然后根据需要在尽可能多的 Pod 上使用它。 不幸的是,iSCSI 卷只能由单个使用者以读写模式挂载。不允许同时写入。 创建 iscsi-pv.yaml iscsi-pvc.yaml iscsi-pv.yaml 1apiVersion: v1 2kind: PersistentVolume 3metadata: 4 name: iscsi-pv 5spec: 6 capacity: 7 storage: 500Gi 8 accessModes: 9 - ReadWriteOnce 10 iscsi: 11 targetPortal: 10.
07
JOBCHER BLOG
linux服务器 删除空间却未释放
linux 服务器 删除空间却未释放 在Linux或者Unix系统中,通过rm或者文件管理器删除文件将会从文件系统的目录结构上解除链接(unlink),然而如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用,这样就会导致我们明明删除了文件,但是磁盘空间却未被释放 获取占用列表状态 1lsof | grep deleted 可以看到哪些文件还被使用,未被释放空间。 释放磁盘空间 一种方法是 kill 掉相应的进程,或者停掉使用这个文件的应用,让 os 自动回收磁盘空间,当 linux 打开一个文件的时候,Linux 内核会为每一个进程在/proc/, /proc/nnnn/fd/目录(nnnn 为 pid)建立一个以其 pid 为名的目录用来保存进程的相关信息,而其子目录 fd 保存的是该进程打开的所有文件的 fd(fd:file descriptor); kill进程是通过截断 proc 文件系统中的文件可以强制要求系统回收分配给正在使用的的文件,这是一项高级技术,仅当管理员确定不会对运行中的进程造成影响时使用。 1kill -9 12345 # PID 重启服务 lsof 命令 lsof全名list opened files,也就是列举系统中已经被打开的文件。我们都知道,linux 环境中,任何事物都是文件,设备是文件,目录是文件,甚至sockets也是文件。
JOBCHER BLOG
logstash 多管道部署
logstash 多管道部署 找到 logstash 目录位置,一般来说在 /etc/logstash 路径下,修改 logstash.yml 1#增加 日志记录 2path.logs: /var/log/logstash 增加管道 增加 conf.d目录下 test.conf input { beats { host => "0.0.0.0" port => 23000 # 修改端口IP } } filter { mutate{ add_field => { "cluster" => "test" # 修改标签 "job" => "logstash" } } } output { file { path => "/data/路径名称" # 路径名称 gzip => false #匹配以空格开头的行 } } 修改 pipelines.yml 1- pipeline.id: 名称 2 path.config: "/etc/logstash/conf.d/配置文件.conf" 3 queue.
06
JOBCHER BLOG
kubernetes 从1.23.x 升级到 1.24.x
kubernetes 从1.23.x 升级到 1.24.x k8s 在1.24.x之后的版本放弃了和 docker 的兼容,使用 containerd 作为底层的容器,直接参照官方文档的资料进行更新就会报错。因为你没有安装 containerd,所以要安装 containerd 并配置才能正确的升级 k8s 我用的是CentOS7.9的版本,因此以下操作都是在CentOS下操作。 Master 节点操作 1.升级 kubeadm 1yum install -y kubeadm-1.24.2-0 --disableexcludes=kubernetes 2kubeadm version 3kubeadm upgrade plan 4sudo kubeadm upgrade apply v1.24.2 2.安装 containerd 1yum install containerd.io -y 2containerd config default > /etc/containerd/config.toml 3vim /var/lib/kubelet/kubeadm-flags.env 修改 kubeadm-flags.env 变量: 1KUBELET_KUBEADM_ARGS="--pod-infra-container-image=k8s.gcr.io/pause:3.6 --container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock" 3.升级 kubelet 1yum install -y kubelet-1.24.2-0 kubectl-1.24.2-0 --disableexcludes=kubernetes 2systemctl daemon-reload && systemctl restart containerd && systemctl restart kubelet 查看状态:
JOBCHER BLOG
编写 kubernetes 资源描述文件
编写 kubernetes 资源描述文件 1. 部署一个应用 1apiVersion: apps/v1 #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本 2kind: Deployment #该配置的类型,我们使用的是 Deployment 3metadata: #译名为元数据,即 Deployment 的一些基本属性和信息 4 name: nginx-deployment #Deployment 的名称 5 labels: #标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组,目前不需要理解 6 app: nginx #为该Deployment设置key为app,value为nginx的标签 7spec: #这是关于该Deployment的描述,可以理解为你期待该Deployment在k8s中如何使用 8 replicas: 1 #使用该Deployment创建一个应用程序实例 9 selector: #标签选择器,与上面的标签共同作用,目前不需要理解 10 matchLabels: #选择包含标签app:nginx的资源 11 app: nginx 12 template: #这是选择或创建的Pod的模板 13 metadata: #Pod的元数据 14 labels: #Pod的标签,上面的selector即选择包含标签app:nginx的Pod 15 app: nginx 16 spec: #期望Pod实现的功能(即在pod中部署) 17 containers: #生成container,与docker中的container是同一种 18 - name: nginx #container的名称 19 image: nginx:1.
JOBCHER BLOG
nginx ssh-key connection exception
nginx ssh-key connection exception Not long ago, I wanted to restart the company’s gitlab server.I couldn’t coonect to ssh when it restarted.emm……I try copy the ssh rsa.pub,but it didn’t work. error log: identity_sign: private key ~/.ssh/id_rsa contents do not match public what is happen? solution reconfigure gitlab ssh key! create new ssh key 1ssh-keygen -t rsa -C 'git@gitlab.com' -f ~/.ssh/gitlab-rsa update config file,enter ~./ssh,open config 1# add host 2Host gitlab.com 3 HostName gitlab.
JOBCHER BLOG
kubernetes manual expansion
k8s manual expansion We find k8s-master node.Input the Command: expand 1kubectl scale --replicas=3 deploy my-test-deploy shrink 1kubectl scale --replicas=1 deploy my-test-deploy trouble cleaning get resource list 1kubectl get deployment 2kubectl get pods 3kubectl get nodes 4# exists in the namespace 5kubectl api-resources --namespaced=true 6# not exists in the namespace 7kubectl api-resources --namespaced=false show info 1kubectl describe pod my-test-pod 2kubectl describe deployment my-test-pod exec container 1kubectl exec -ti my-test-pod /bin/bash
JOBCHER BLOG
nginx exporter 安装配置
nginx exporter 安装配置 二进制安装 1wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.10.0/nginx-prometheus-exporter_0.10.0_linux_amd64.tar.gz 2tar -zxvf nginx-prometheus-exporter_0.10.0_linux_amd64.tar.gz -C ./nginx-exporter 在 nginx 上配置 1./configure \ 2… \ 3--with-http_stub_status_module 4make 5sudo make install 在 nginx.config 上配置 server { # 新增 location /nginx_status { stub_status on; access_log off; } } 重启 nginx 服务 1nginx -t 2nginx -s reload 启动 nginx exporter 1nginx-prometheus-exporter -nginx.scrape-uri http://<nginx>:8080/nginx_status 配置 prometheus 添加 prometheus.yml 1- job_name: "nginx-exporter" 2 file_sd_configs: 3 - files: 4 - "./file_sd/nginx-exporter.yaml" 在 ./file_sd/新建 nginx-exporter.