2022
12
JOBCHER BLOG
优雅的使用Conda管理python环境
背景 很多时候,避免不了同时使用 python2 和 python3 的环境,也避免不了不同的工作所需要不同版本的库文件,比如在想用 TensorFlow 较早版本的同时;还想运行 Pytorch 最新版;还想顺便学习 Nao 机器人编程,学习 Django 后台,这个时候,一款非常好用的包管理工具就显得十分重要了,这就是我写这篇博客的原因,这篇博客将会讲解: 如何安装 conda; 如何更换 conda 的下载源; 如何使用 canda; Linux 安装 conda 在 Ubuntu 上安装 Anaconda 的步骤如下: 首先,你需要下载 Anaconda 的安装包。你可以从 Anaconda 的官方网站上下载最新版本的 Anaconda for Linux。选择适合你的系统的版本(Python 3.x)。 访问下载链接:https://www.anaconda.com/products/distribution#download-section 下载完成后,你可以在终端中导航到下载的文件所在的目录。你可以使用 cd 命令来改变目录。例如,如果你的下载文件在 Downloads 文件夹中,你可以输入以下命令: 1cd ~/Downloads 然后,你需要运行 bash 命令来安装 Anaconda。假设你下载的 Anaconda 文件名为 “Anaconda3-2020.02-Linux-x86_64.sh”,你可以输入以下命令: 1bash Anaconda3-2020.02-Linux-x86_64.sh 请注意,你需要将上述命令中的 “Anaconda3-2020.02-Linux-x86_64.sh” 替换为你实际下载的文件名。 4. 接下来,你会看到 Anaconda 的许可协议。按 Enter 键滚动到底部,然后输入 ‘yes’ 来接受许可协议。 5. 然后,你需要确认 Anaconda 的安装位置。你可以选择默认位置或输入新的位置。 6.
11
JOBCHER BLOG
Chrome浏览器启动参数大全(命令行参数)
背景 在开发 Web 项目当中,浏览器必不可少,而浏览器的启动参数可以帮我们实现很多功能。 常用参数 序号 参数 说明 1 –allow- ted-plugins 不停用过期的插件。 2 –allow-running-insecure-content 默认情况下,https 页面不允许从 http 链接引用 javascript/css/plug-ins。添加这一参数会放行这些内容。 3 –allow-scripting-gallery 允许拓展脚本在官方应用中心生效。默认情况下,出于安全因素考虑这些脚本都会被阻止。 4 –disable-desktop-notifications 禁用桌面通知,在 Windows 中桌面通知默认是启用的。 5 –disable-file-system 停用 FileSystem API。 6 –disable-preconnect 停用 TCP/IP 预连接。 7 –disable-remote-fonts 关闭远程字体支持。SVG 中字体不受此参数影响。 8 –disable-web-security 不遵守同源策略。 9 –disk-cache-dir 将缓存设置在给定的路径。 10 –disk-cache-size 设置缓存大小上限,以字节为单位。 11 –dns-prefetch-disable 停用 DNS 预读。 12 –enable-print-preview 启用打印预览。 13 –extensions-update-frequency 设定拓展自动更新频率,以秒为单位。 14 –incognito 让浏览器直接以隐身模式启动。 15 –keep-alive-for-test 最后一个标签关闭后仍保持浏览器进程。(某种意义上可以提高热启动速度,不过你最好得有充足的内存) 16 –kiosk 启用 kiosk 模式。(一种类似于全屏的浏览模式) 17 –lang 使用指定的语言。 18 –no-displaying-insecure-content 默认情况下,https 页面允许从 http 链接引用图片/字体/框架。添加这一参数会阻止这些内容。 19 –no-referrers 不发送 Http-Referer 头。 20 –no-startup-window 启动时不建立窗口。 21 –proxy-server 使用给定的代理服务器,这个参数只对 http 和 https 有效。 22 –start-maximized 启动时最大化。 23 –single-process 以单进程模式运行 Chromium。(启动时浏览器会给出不安全警告)。 24 –user-agent 使用给定的 User-Agent 字符串。 25 –process-per-tab 每个分页使用单独进程。 26 –process-per-site 每个站点使用单独进程。 27 –in-process-plugins 插件不启用单独进程。 28 –disable-popup-blocking 禁用弹出拦截。 29 –disable-javascript 禁用 JavaScript。 30 –disable-java 禁用 Java。 31 –disable-plugins 禁用插件。 32 –disable-images 禁用图像。 更多参数 由于水平有限,下表为网络翻译,了解跟多可根基参数,查找相关资料。
JOBCHER BLOG
Jenkins 编译Android apk 流水线
背景 Jenkins 编译 Android apk,上传 apk 包,生成下载二维码,并推送钉钉 安装 Android 环境 安装 JDK 1# 这里使用的是openjdk 1.8.0版本,有需要的话需要到java官网上进行下载对应的JDK版本。 2$ yum install java -y 3 4# 其他版本JDK的安装方式 5$ mv jdk1.8.0_161 /usr/local/ 6$ ln -s /usr/local/jdk1.8.0_161 /usr/local/jdk 7$ vim /etc/profile #配置JDK的环境变量 8export JAVA_HOME=/usr/local/jdk 9export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH 10export CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar 11$ source /etc/profile #重新加载系统环境变量 12$ java -version #查看java版本 Android SDK 安装 1# 下载sdk工具包 2$ wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip 3 4# 创建sdk工具文件夹和解压工具包 5$ mkdir -p /opt/android/sdk 6$ unzip sdk-tools-linux-3859397.zip -d /opt/android/sdk 7 8# 使用sdkmanager工具配置构建工具和平台版本 9$ cd /opt/android/sdk/tools/bin/ 10$ .
JOBCHER BLOG
Kubernetes — 更新证书
背景 使用 kubeadm 安装 kubernetes 集群非常方便,但是也有一个比较烦人的问题就是默认的证书有效期只有一年时间,所以需要考虑证书升级的问题 检查证书 由 kubeadm 生成的客户端证书默认只有一年有效期,我们可以通过 check-expiration 命令来检查证书是否过期: 1kubeadm alpha certs check-expiration 该命令显示 /etc/kubernetes/pki 文件夹中的客户端证书以及 kubeadm 使用的 KUBECONFIG 文件中嵌入的客户端证书的到期时间/剩余时间。 手动更新 kubeadm alpha certs renew 这个命令用 CA(或者 front-proxy-CA )证书和存储在 /etc/kubernetes/pki 中的密钥执行更新。 高可用的集群,这个命令需要在所有控制面板节点上执行 具体执行 接下来我们来更新我们的集群证书,下面的操作都是在 master 节点上进行 备份节点 1$ mkdir /etc/kubernetes.bak 2$ cp -r /etc/kubernetes/pki/ /etc/kubernetes.bak 3$ cp /etc/kubernetes/*.conf /etc/kubernetes.bak 备份 etcd 数据目录 1$ cp -r /var/lib/etcd /var/lib/etcd.bak 执行更新证书的命令 1kubeadm alpha certs renew all --config=kubeadm.yaml 检查更新 1kubeadm alpha certs check-expiration 更新下 kubeconfig 文件 1kubeadm init phase kubeconfig all --config kubeadm.
JOBCHER BLOG
Oracle Instant Client 安装配置实现远程连接oracle
背景 关于 Oracle 数据库一直是许多初学者比较头疼的地方,一方面受限于线上文档比较少,令一方面在企业中不得不接触和使用 Oracle 数据库,这篇文章是教大家如何通过配置 oracle client 来远程访问 Oracle 数据库。本文会通过 python3 和 cx_Oracle 来实现对 Oracle 的访问和增删改查 下载 oracle 客户端 官方地址下载 安装 下载并安装你的 oracle client,因为我连接的 11g oracle,所以下载 11.2 版本 1# 下载 2wget https://download.oracle.com/otn/linux/instantclient/11204/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm 3# 安装 4rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm 配置环境变量 1# 直接运行 2export ORACLE_HOME=/usr/lib/oracle/11.2/client64 3export ORABIN=/usr/lib/oracle/11.2/client64/bin 1# 编辑环境变量配置文件 2vim /etc/profile 1# 底部增加内容 2export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 3export ORACLE_HOME=/usr/lib/oracle/11.2/client64 4export TNS_ADMIN=/usr/lib/oracle/11.2/client64 5export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib 6export ORABIN=/usr/lib/oracle/11.2/client64/bin 7PATH=$PATH:$ORABIN 8export PATH 9 10export PATH=$ORACLE_HOME:$PATH 11export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin 1# 刷新环境变量 2source /etc/profile 下载 cx_Oracle 1pip3 install cx_Oracle 创建 Oracle.
JOBCHER BLOG
shell功能脚本集合
28 合 1 多功能脚本 脚本说明: 多合一脚本,DD 系统,BBR,xray,TG 搭建等等·常用的各种脚本基本都有! 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 支持安装 BBR,搭建 KCPtun,ssr 多用户版 安装 V2ary,Tg 专用代理(Go 版),安装 Goflyway 小鸡性能测试,回程线路测试,云监控 傻瓜式一键 DD 包 一键开启默认 bbr Netflix 解锁检测 xray 安装 宝塔面板,闲蛋面板,x-ui 面板,WARP 一键配置 脚本特点: 目前网上的各个一键脚本基本都是只有 安装/启动/重启 等基础功能,对于小白来说还是不够简单方便。常用的各种脚本基本都有! 下载安装: 1bash <(curl -s -L https://git.io/JPj82) gfw_push 一键安装 脚本说明: 监测服务器 IP 是否被墙并推送至 Telegram 一键脚本 系统支持: CentOS6+ / Debian6+ / Ubuntu14+ 下载安装: 1bash <(curl -s -L git.io/JPjzm) 服务器测速 脚本说明: 服务器一键测速脚本 系统支持: CentOS7 / Debian7+ / Ubuntu14+ 下载安装: 1bash <(curl -s -L git.
JOBCHER BLOG
zlibary 无法下载 解决方案
zlibary 无法下载 因为 zlib 最近被封,导致现在通过正常方法下载不了电子书,但是不要慌,我们可以通过暗网进行下载~ 安装 brave 浏览器 官网下载 下载你需要的版本,这个下载浏览器很简单,我就不多说了 配置 tor 配置 编辑 tor 配置 使用 tor 浏览 zlibary tor 暗网版
10
JOBCHER BLOG
Logstash 自动重载配置文件
工作原理 检测到配置文件变化 通过停止所有输入停止当前pipline 用新的配置创建一个新的管道 检查配置文件语法是否正确 检查所有的输入和输出是否可以初始化 检查成功使用新的 pipeline 替换当前的pipeline 检查失败,使用旧的继续工作. 在重载过程中,jvm 没有重启. Logstash 自动重新加载配置 为了可以自动检测配置文件的变动和自动重新加载配置文件,需要在启动的时候使用以下命令: 1./bin/lagstash -f configfile.conf --config.reload.automatic 启动 Logstash 的时候使用--config.reload.automatic或-r选项来开启自动重载配置。 修改检测间隔时间 默认检测配置文件的间隔时间是3秒,可以通过以下命令改变 1--config.reload.interval <second> 如果 Logstash 已经运行并且没有开启自动重载,你可以强制 Logstash 重新载入配置文件并且重启管道通过发送一个 SIGHUP 信号。比如: 1kill -1 <pid> 其中是正在运行的 Logstash 的进程号。 注意!!! stdin输入插件不支持自动重启. syslog作为输入源,当重载配置文件时,会崩溃. 解决方法
JOBCHER BLOG
macOS 13 升级 软件失效
关于 macOS 13 软件失效 Warning: You are using macOS 13. We do not provide support for this pre-release version. You will encounter build failures with some formulae. Please create pull requests instead of asking for help on Homebrew’s GitHub, Twitter or any other official channels. You are responsible for resolving any issues you experience while you are running this pre-release version. 简单来说就是 macOS13 版本 暂时不提供技术支持 解决方法 升级完 macos13 之后发现了比较麻烦的问题,很多软件出现了不兼容,这真的很无奈,对于我们这些做 IT 的人来说,这是致命的。我以 git 软件举例,有以下几个方法。
JOBCHER BLOG
Nexus3 使用和部署
Nexus3 docker-compose 安装 创建外部存储 1mkdir -p /data/nexus 2chmod +777 -R /data/nexus 运行 docker-compose 1version: '3' 2services: 3 nexus3: 4 image: sonatype/nexus3:3.42.0 5 container_name: nexus3 6 ports: 7 - 8081:8081 8 - 5000:5000 9 volumes: 10 - /data/nexus:/nexus-data 11 environment: 12 - INSTALL4J_ADD_VM_PARAMS=-Xms1024m -Xmx1024m -XX:MaxDirectMemorySize=1024m -Djava.util.prefs.userRoot=/some-other-dir 13 restart: always 14 # 赋予外部root权限 15 privileged: true docker-compose up -d 运行 docker-compose
githubAction set-output弃用错误
githubAction set-output弃用错误
githubAction set-output 弃用错误 The set-output command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/ 原因 如果您有一个使用 设置输出的GitHub Actionsecho ::set-output key=value工作流程,您已经开始看到无用的弃用警告。这是修复它的方法。查看官方链接基本上得不到什么帮助! 修复方法 更新其它人的 action 方法 1将 @actions/core 提升到 1.10.0 修改自己的 aciton 方法 1run: echo "::set-output name=KEY::VALUE" 2## 改为 3run: echo "KEY=VALUE" >>$GITHUB_OUTPUT 建议:使用自己的方法 总结 平台经营者非常肆意妄为的修改自己的代码内容弃用功能,无限的权力滋生傲慢……我相信大部分开发这并没有注意到这个告警,知道流水线服务报错之后才会注意到,希望微软可以对能更加包容不同的开发者,尊重开发者社区。
JOBCHER BLOG
打开web 3.0的大门——IPFS使用
背景 有很多朋友问我什么是 web3.0,web3.0 似乎离我们非常远。有人会说 web3.0 是未来下一代的技术很有前景!但是举出一个具体的例子,似乎又非常困难。使用 web3.0 是一件非常高科技的事情。本文就是通过各 IPFS 给各位初学者和对 web3.0 感兴趣的人使用介绍,看完本篇文章,你就能进入 web3.0 的世界了~ IPFS 星际文件系统(InterPlanetary File System). IPFS 是一个分布式的 web, 点到点超媒体协议. 可以让我们的互联网速度更快, 更加安全, 并且更加开放. IPFS协议的目标是取代传统的互联网协议HTTP 下载安装 本文不会对技术做更深入探讨,只在应用层面上介绍 下载 官网 下载 windows 下载 MAC 安装 运行 .exe 文件开始安装,选择是要为您自己还是为计算机上的所有用户安装应用程序。点击下一步: 选择应用程序的安装位置。默认位置通常很好。点击下一步: 等待安装完成,然后单击完成: 您现在可以在状态栏中找到 IPFS 图标: 使用 打开软件 可以正常使用了!是不是很简单接下来浏览器直接查看 web3.0 站点 站点 我的 web3.0 blog: ipfs.jobcher.com 对标 youdTube 的视频网站: d.tube Orbit,QQ 在 IPFS 上的替代者: orbit.chat Akasha,对标 facebook,微信等社交工具:akasha.world
JOBCHER BLOG
Kubernetes — Rook云存储介绍和部署
Rook 云存储介绍和部署 Rook 将分布式存储软件转变为自我管理,自我缩放和自我修复的存储服务。它通过自动化部署,引导、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。 Rook 使用基础的云原生容器管理、调度和编排平台提供的功能来履行其职责。 Rook 利用扩展点深入融入云原生环境,为调度、生命周期管理、资源管理、安全性、监控和用户体验提供无缝体验。 部署 使用 helm 部署 1helm init -i jimmysong/kubernetes-helm-tiller:v2.8.1 2helm repo add rook-alpha https://charts.rook.io/alpha 3helm install rook-alpha/rook --name rook --namespace rook-system 直接使用 yaml 文件部署 1kubectl apply -f rook-operator.yaml 不论使用那种方式部署的 rook operator,都会在 rook-agent 中看到 rook-agent 用户无法列出集群中某些资源的错误,可以通过为 rook-agent 的分配 cluster-admin 权限临时解决,详见 Issue 1472。 使用如下 yaml 文件创建一个 ClusterRoleBinding 并应用到集群中。 1kind: ClusterRoleBinding 2apiVersion: rbac.authorization.k8s.io/v1beta1 3metadata: 4 name: rookagent-clusterrolebinding 5subjects: 6 - kind: ServiceAccount 7 name: rook-agent 8 namespace: rook-system 9roleRef: 10 kind: ClusterRole 11 name: cluster-admin 12 apiGroup: "" 部署 rook cluster 创建完 rook operator 后,我们再部署 rook cluster。
JOBCHER BLOG
Kubernetes — 基于K8S搭建Ceph分布式存储
基于 K8S 搭建 Ceph 分布式存储 前提 正常运行的多节点 K8S 集群,可以是两个节点也可以是更多。 每一个节点需要一个没有被分区的硬盘,最好大小一致不然会浪费。 没错其实就是一个要求,必须有集群才能进行容器管理,必须有硬盘才能做存储这些都是基础。 添加硬盘 主机 IP 磁盘 master01 10.12.12.51 SATA 20G master02 10.12.12.52 SATA 20G master03 10.12.12.53 SATA 20G worker01 10.12.12.54 SATA 20G worker02 10.12.12.55 SATA 20G 在 5 个节点都加 20g 存储 重启 k8s 节点 1kubectl cordon <节点> 2kubectl drain <节点> --ignore-daemonsets --delete-emptydir-data 3# 虚拟机重启后 4kubectl uncordon <节点> 查看新增存储 1fdisk -l 看到新增 20g 存储,不要格式化分区硬盘!!! 1Disk /dev/sdb: 20 GiB, 21474836480 bytes, 41943040 sectors 2Disk model: QEMU HARDDISK 3Units: sectors of 1 * 512 = 512 bytes 4Sector size (logical/physical): 512 bytes / 512 bytes 5I/O size (minimum/optimal): 512 bytes / 512 bytes ROOK 自动创建 Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。 Rook 将存储软件转变为自我管理、自我扩展和自我修复的存储服务,它通过自动化部署、引导、配置、置备、扩展、升级、迁移、灾难恢复、监控和资源管理来实现此目的。 Rook 使用底层云本机容器管理、调度和编排平台提供的工具来实现它自身的功能。 Rook 目前支持Ceph、NFS、Minio Object Store和CockroachDB。 Rook 使用Kubernetes原语使Ceph存储系统能够在Kubernetes上运行。 下载 1git clone https://github.
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.