Kubernetes使用存储挂载单个文件
一般来说, 挂载存储都是把一个PV挂载到一个路径, 挂载后此路径下原来的文件就会不见, 只能看到挂载后的文件, 和在Linux下挂载磁盘是一样的. 那么现在有个需求:
需求此服务是java程序, 数据库使用的是内嵌的h2 database, 下图中的两个文件就是数据库的文件. 这两个文件是存在于根目录下的, 假设此程序数据库文件是代码写死的(真实情况是: 数据库路径是可以更改的), 现在要部署到kubernetes中, 并对数据库做持久化.
使用subpath根据之前挂载configmap到单个文件的经验, 我们应该使用subpath来挂载, 先创建好pvc, yml如下
1234567891011apiVersion: v1kind: PersistentVolumeClaimmetadata: name: metabase-pvcspec: storageClassName: managed-nfs-storage accessModes: - ReadWriteOnce resources: requests: storage: 10Gi
st ...
使用kubeadm部署一套高可用k8s 1.26集群 for AlmaLinux9
基于AlmaLinux9使用kubeadm搭建集群, ubuntu部署文档, 有疑问的地方可以看官方文档
准备机器
我的机器详情如下, 配置至少为4C4G
hostname
IP
作用
public
10.0.0.3
ingress和apiserver的负载均衡,nfs存储
master1
10.0.0.11
k8s master节点
master2
10.0.0.12
k8s master节点
master3
10.0.0.13
k8s master节点
worker1
10.0.0.21
k8s worker节点
worker2
10.0.0.22
k8s worker节点
每台机器都做域名解析,或者绑定hosts(直接使用ip地址会有警告)
123456vim /etc/hosts10.0.0.3 public kube-apiserver10.0.0.11 master110.0.0.12 master210.0.0.13 master3
每台机器都关闭防火墙和SELinux
负载均衡机器必须要关闭,因为6443不是nginx的标 ...
前后端跨域问题
啥是跨域跨源资源共享(CORS,或通俗地译为跨域资源共享)是一种基于 HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的“预检”请求。在预检中,浏览器发送的头中标示有 HTTP 方法和真实请求中会用到的头。
跨源 HTTP 请求的一个例子:运行在 https://domain-a.com 的 JavaScript 代码使用 XMLHttpRequest 来发起一个到 https://domain-b.com/data.json 的请求。
出于安全性,浏览器限制脚本内发起的跨源 HTTP 请求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。这意味着使用这些 API 的 Web 应用程序只能从加载应用程序的同一个域请求 HTTP 资源,除非响应报文包含了正确 CORS 响应头。
为什么会跨域说到跨域不得不谈的就是浏览器的同源策略,跨域也是因为浏览器这个机制引起的,这个机制的存 ...
将ova或qcow2导入到PVE虚拟机
比如我们从VMware Workstation导出的虚拟机镜像(ova或者ovf), 如果我想要导入到proxmox中, proxmox默认是不支持导入OVA虚拟机的, 可以通过转换虚拟机虚拟磁盘的方法将虚拟磁盘附加到现有的pve虚拟机中.
提取vmdk虚拟磁盘文件这一步如果是ova, 则需要用解压缩软件解压一下, 如果是ovf, 直接就能看到vmdk文件
转换虚拟磁盘文件使用工具 qemu-img 进行转换, 如果是导入到pve, 可以不转换, 使用qm命令会自动转换的.
12345# 从另一台PVE导出qcow2可以这样qemu-img convert -p -O qcow2 -c /dev/mapper/pve-vm--110--disk--0 VM110.qcow2# 从vmdk文件转换可以这样 -c 是压缩qemu-img convert -c -f vmdk myvm-disk1.vmdk -O qcow2 myvm-disk1.qcow2
在PVE上创建新的虚拟机此步骤需要记录一下虚拟机的ID
上传虚拟磁盘文件到PVEpve本质上就是debian linux, 你可以 ...
使用tailscale打通内网
家里有一台群晖nas, 通过quickconnect连接太慢了, 并且有些操作不能通过quickconnect, 比如直接smb挂载目录
群晖nas安装群晖国内应用商店已经下架了这个APP, 你可以尝试着在应用中心搜索tailscale, 如果可以搜索到, 就直接安装即可. 搜索不到的话, 可以使用离线安装的方式:
到官网下载离线SPK包:https://pkgs.tailscale.com/stable/#spks根据你的系统架构来下载包, intel cpu 下载x86_64架构的包. 然后进入群晖软件中心, 点击手动安装, 上传spk包安装
第一次打开tailscale 需要登录, 登录页面不支持quickconnect远程连接, 所以建议在家配置好tailscale
windows安装安装成功后, 右键任务栏图标,点击login登录tailscale账号
登录成功后,可以在官网https://login.tailscale.com/admin/machines 查看到所有的设备和IP地址等信息。
访问方式tailscale可以使用ip地址来访问,或者使用tailscale的d ...
查看kubernetes节点的硬件配置
kubectl describe node 可以查看到信息, 这里使用jq进行一下数据处理格式化.
1kubectl get node -o json | jq '.items[] | "===========================================", "机器名: \(.metadata.labels."kubernetes.io/hostname") ", "CPU: \(.status.capacity.cpu) 核", "内存大小: \(.status.capacity.memory)"'
输出结果类似于:
爷的青春结束了
前言回忆是抓不到的月光握紧就变黑暗,回忆是美好的,但不要沉迷于回忆,不要尝试安装模拟器去回忆之前的老游戏啦,会浪费现在的时间,童年是找不回来了,过好当下吧。
为啥写这篇文章时间过的太快, 看着身边的东西都变了样,有时候突然想起很久以前玩过的游戏,但是怎么也想不起名字,就算想起来了,搜索引擎都搜不到相关的文章,只能勉强搜到一些包浆了的图,所以还是记录下来,对自己的过去做个记录。
俄罗斯方块机磁带机和CD机小学时候听的磁带机,听的最多的就是刀郎的歌,什么《2002年的第一场雪》啦。
CD机,听的第一首歌是 林俊杰 - 就是我
FC游戏机FC游戏机指的是任天堂的红白机, 但是在中国普及开来的时候已经是盗版遍地了, 不仅仅是机器盗版, 还有很多盗版游戏, 还记得外星科技等等开发的那些塞尔达?
模拟器网上到处都是, 很多都是在线玩的.
一个背景音乐下载网站: https://www.zophar.net/music/
开源nfs编辑器: https://famistudio.org/
小霸王当时村里已经有小伙伴用上了盗版小霸王(没错,是盗版的小霸王,真的小霸王还是比较贵的),和小霸王一样拥有键盘 ...
找出占用Kubernetes节点磁盘的Pod
有部分开发不规范导致日志写入容器, 在k8s环境下导致节点磁盘空间占用过高, 解决方案有:
通过监控告警来提前预防
挂载磁盘, 容器日志写入磁盘
使用自动清理脚本
kubectl查询每个pod占用磁盘空间1kubectl get --raw /api/v1/nodes/10.20.20.12/proxy/stats/summary | jq '.pods[] | "PodName: \(.podRef.name)", "usedBytes: \(.containers[].rootfs.usedBytes)", "======================================================"'
输出结果如图:
Docker相关操作查看容器磁盘占用12345# 节点上查看磁盘使用情况,并安装从大到小排序,可以看到各个容器的占用磁盘空间。docker ps -a --format "table {{.Size}}\t ...
Linux里安装crontab并运行
常见的linux发行版都自带了crontab服务, 但是我们常用的容器镜像是没有的, 不要问我为什么要在容器里运行crontab…Linux定时执行任务crontabLinux的crontab无法执行的一些问题
CentOS/RedHat系列安装1yum install -y cronie
配置文件位置后面的root是用户名
1/var/spool/cron/root
启动命令12345# 后台运行crond# 前台运行crond -f
Ubuntu/Debian系列安装1sudo apt-get install -y cron
配置文件位置后面的root是用户名
1/var/spool/cron/crontabs/root
启动命令12345# 后台运行cron# 前台运行cron -f
Alpine安装官方镜像自带了
配置文件位置后面的root是用户名
1/etc/crontabs/root
启动命令12345# 前台运行crond -f# 后台运行crond
自动清理日志脚本
公司的业务服务会打日志到磁盘, 程序已经做了日志切割, 时间一长磁盘占满会导致业务异常, 普通的清理逻辑是使用crontab定时删除文件, 比如每天1点删除创建日期超过30天的日志文件, 大部分情况下工作是OK的, 但是执行周期太长, 如果当天日志暴增, 不能及时删除文件. 也会有隐患, 优化版脚本如下:
日志清理分以下几种:
历史日志, 并且未在写入的日志, 这种可以直接删除掉.
当前正在写入的日志, 需要清理, 这种不能删除, 可以通过清空文件的方式来释放空间
set -euo pipefail 的作用:set -e: 脚本中有任何一条命令执行失败, 整个脚本就失败set -u: 脚本中的变量有任何一个变量为空, 整个脚本执行失败-o pipefail: 脚本中的管道中任何一条命令执行失败, 也会认为脚本执行失败
脚本内容:
123456789101112131415161718192021222324252627282930313233#!/bin/bashset -uo pipefail# 磁盘的文件系统(df -h里面显示的)FILESYSTEM="/dev ...