使用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 响应头。
为什么会跨域说到跨域不得不谈的就是浏览器的同源策略,跨域也是因为浏览器这个机制引起的,这个机制的存 ...
查看kubernetes节点的硬件配置
kubectl describe node 可以查看到信息, 这里使用jq进行一下数据处理格式化.
1kubectl get node -o json | jq '.items[] | "===========================================", "机器名: \(.metadata.labels."kubernetes.io/hostname") ", "CPU: \(.status.capacity.cpu) 核", "内存大小: \(.status.capacity.memory)"'
输出结果类似于:
找出占用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
快速安装 node exporter
复制粘贴就能用,适用于虚拟机安装, k8s环境看这个, 更方便Kubernetes中使用Prometheus对集群节点做监控
12345678910111213141516171819202122[ -d /data/src ] || mkdir -p /data/srccd /data/src/[ -f /data/src/node_exporter ] || wget https://file.babudiu.com/f/2Bf8/node_exporter-1.6.1.linux-amd64.tar.gztar xf node_exporter-1.6.1.linux-amd64.tar.gz/bin/cp node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/ && rm -rf /data/src/node_exporter-1.6.1.linux-amd64cat >/etc/systemd/system/node_exporter.service <<EOF[Unit]D ...
Dockerfile中ADD文件的路径问题
首先看一个案例
当前目录的文件如下:
12345678[root@devops_build watcher_svr]# tree.├── 1├── 2│ └── 3└── Dockerfile1 directory, 3 files
Dockerfile文件内容如下:
123FROM harbor.vrzbq.com/base/node:14.20.1-busterADD * /code/WORKDIR /code
本意是想把当前目录下的所有文件放到容器内的/code目录, 这个时候使用 docker build 后无法启动, 进入容器, 打开/code一看:
123456789[root@devops_build watcher_svr]# docker run -it test bashroot@cb7543054ef2:/code# ls -altotal 12drwxr-xr-x 2 root root 4096 Sep 22 08:47 .drwxr-xr-x 1 root root 4096 Sep 22 08:47 ..-rw-r--r-- 1 root root ...
k8s解除service端口限制
我自己写了一个svc的yaml文件,部署的时候报错,不在默认的范围内,默认范围是: 30000-32767
kubectl apply -f nginx-src.yaml
报错:
1The Service "nginx" is invalid: spec.ports[0].nodePort: Invalid value: 80: provided port is not in the valid range. The range of valid ports is 30000-32767
如果是kubeadm部署修改配置文件 vim /etc/kubernetes/manifests/kube-apiserver.yaml
在启动参数里面添加如下一行
1- --service-node-port-range=1-65535
重启 kube-apiserver
1kubectl delete pod -n kube-system kube-apiserver-xxx
使用RedisShake进行Redis迁移
对于自建的redis, 我们可以将rdb/aof文件拷贝到目的redis, 启动恢复, 但是云redis或者某些特殊情况, 比如没有云平台的权限等等情况, 可以使用工具来进行迁移.
RedisShake 是阿里云 Tair 团队 积极维护的一个项目。它的演变可以追溯到其初始版本,该版本是从 redis-port 分支出来的。官方文档https://tair-opensource.github.io/RedisShake/zh/guide/introduction.html
安装12wget https://github.com/tair-opensource/RedisShake/releases/download/v4.0.0/redis-shake-linux-amd64.tar.gztar xf redis-shake-linux-amd64.tar.gz
同步迁移创建一个配置文件 redis_sync.toml
12345678910111213[sync_reader]cluster = false # 是否为集群address = &quo ...
MySQL查询出所有没有主键的表
作者:May22Night链接:https://www.jianshu.com/p/f484c63e5c96
压缩版:1SELECT a.TABLE_SCHEMA,a.TABLE_NAME FROM (SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN('mysql','information_schema','performance_schema','sys','sysdb')) as a LEFT JOIN (SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='PRIMARY KEY' AND TABLE_SCHEMA NOT IN('mysql','information_ ...