K3s 和 K8s 中 Leader 选举方案的区别
参考:https://www.reddit.com/r/kubernetes/comments/kqx5ql/difference_between_master_and_worker_concepts_in/ Leader 选举方案的不同在于用于备份主服务器的数据库 Leader 选举是针对分布式数据库 etcd 的。由于 etcd 往往存在于 Kubernetes 中的主节点上,所以会和 K3s 混淆。 K3s 默认使用 SQLite,因此不需要 leader 选举。
K3s 安装 - 机器提前准备
手动加载 CentOS7 box 文件配置 Vagrantfile123456789101112131415161718192021222324252627Vagrant.configure("2") do |config| (1..3).each do |i| config.vm.define "k3s-node#{i}" do |node| # 设置虚拟机的Box node.vm.box = "centos/7" # 设置虚拟机的主机名 node.vm.hostname="k3s-node#{i}" # 设置虚拟机的IP node.vm.network "private_network", ip: "192.168.56.#{99+i}", netma...
K3s 卸载
卸载 K3sServer 节点执行1sh /usr/local/bin/k3s-uninstall.sh Agent 节点执行1sh /usr/local/bin/k3s-agent-uninstall.sh 清除配置1rm -rf $HOME/.kube 如果是外部数据库,卸载完需要记得清除 database 的数据 MySQL:清空 K3s 创建的 kine 表
K3s 高可用安装
安装版本:K3s (v1.21.7+k3s1) 参考站内 K3s 实践高可用架构图。 官方文档参考顺序(官方文档记录的顺序有点乱)1234560. 查看对应版本: https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-6-3/1. 基础架构: https://rancher.com/docs/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-ha-with-external-db/2. 负载均衡: https://rancher.com/docs/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/nginx/3. 部署 K3s: https://rancher.com/docs/rancher/v2.6/en/installation/r...
关于 K3s 的证书轮换策略
前言官方文档 K3s 启动时会自动生成 CA 证书,CA 证书的有效期为 10 年。其他证书有效期为 1 年,如果证书已经过期或剩余的时间不足 90 天,则在 K3s 重启时轮换证书。K3s 服务只是一个进程,K3s 服务重启不会影响正在运行的 Pod,也不会影响你的业务。 证书轮换方式(3 种任选其一)使用 crontab + shell 脚本 方式实现证书轮换编写脚本 upgradeCert.sh,并放在主节点服务器上。 查看主节点位置: 1kubectl get nodes -l 'node-role.kubernetes.io/control-plane'|awk '{if (NR>1){print $1}}' Server 节点脚本 1234567891011121314151617181920#!/bin/bash# 目标目录DIR="/var/lib/rancher/k3s/server/tls"now=$(date +%s)# 递归查找 .crt 文件for...
定时自动重启 Pod 服务
方法1:滚动重启从 1.15 版开始,Kubernetes 允许滚动重启 Deployment,这是最快的重启方式: 1kubectl rollout restart deployment [deployment_name] 该命令会逐步关闭并重启 Deployment 中的每个 Pod 容器,重启过程中应用仍然可用,因为大多数容器仍在运行。 方法2:使用环境变量通过设置或更改环境变量,可以强制 Pod 重新启动并同步变更。例如,更改容器部署日期: 1kubectl set env deployment [deployment_name] DEPLOY_DATE="$(date)" 方法3:缩放副本数使用 scale 命令将副本数设置为 0 来关闭容器: 1kubectl scale deployment [deployment_name] --replicas=0 再将副本数恢复为大于零的值来重新启动: 1kubectl scale deployment [deployment_name] --replicas=1 Kubernetes 会销...
最大最小内存设置为一致
在 Kubernetes 中,像 CPU 这样的资源被称作"可压缩资源"(compressible resources)。它的典型特点是,当可压缩资源不足时,Pod 只会"饥饿",但不会退出。而像内存这样的资源,则被称作"不可压缩资源"(incompressible resources)。当不可压缩资源不足时,Pod 就会因为 OOM(Out-Of-Memory)被内核杀掉。 1. 容器最小内存和最大内存设置为一致简单来理解:最小内存等同于 k8s 的 resources.requests 资源,最大内存等同于 resources.limits 资源。参考:为容器和 Pod 分配内存资源 | Kubernetes 上述配置中,查看对应的 YAML 文件可以看到,对应的 memory 的请求和限制保持一致。 一般情况下,对于核心资源,我们推荐 requests == limits,这是为什么呢? Pod 的三种 QoS 类别 Guaranteed:当 Pod 里的每一个 Container 都同时设置了 request...
查看 Pod 是否正常打印日志
查看 Pod 是否正常打印日志,并发送 Webhook 通知到企业微信。 12345678910111213141516171819202122232425262728293031323334#!/bin/sh# 获取当前UTC时间utc_now=`date -u`# 将时间转换为timestamptimestamp_now=`date -d "$utc_now" +%s`PODNAME=NAMASPACE=function restart_pod() { for i in `kubectl get pod -n iot|grep $PODNAME|awk '{print $1}'`;do for time in `kubectl logs --tail=1 --timestamps $i -n $NAMASPACE | awk '{print $1}'`;do timestamp_pod=`date -d "$time" +%...
根据 PID 查找 Pod 信息
编辑 ~/.bashrc,粘贴以下函数,并执行 source ~/.bashrc 使其生效,使用时执行 podinfo $pid通过 PID 获取 Pod 名称12345podinfo() { CID=$(cat /proc/$1/cgroup | awk -F '/' '{print $5}') CID=$(echo ${CID:0:8}) crictl inspect -o go-template --template='{{index .status.labels "io.kubernetes.pod.name"}}' $CID} 通过 PID 获取 Pod UID123podUid() { cat /proc/$1/mountinfo | grep "etc-hosts" | awk -F / {'print $6'}...
滚动更新控制副本数
在 Kubernetes 中,Deployment 提供了两种更新策略: Recreate:适用于停机发布,设置 spec.strategy.type=Recreate,表示 Deployment 在更新 Pod 时,会先杀掉所有正在运行的 Pod,再创建新的 Pod RollingUpdate:适用于零停机发布,设置 spec.strategy.type=RollingUpdate,表示 Deployment 会以滚动更新的方式逐个更新 Pod 滚动更新控制参数服务在滚动更新时,Deployment 控制器的目的是:将旧版本(old_rs)副本数减少至 0、将新版本(new_rs)副本数量增至期望值(replicas)。Kubernetes 提供了以下两个参数: maxUnavailable:和期望 ready 的副本数相比,不可用副本数的最大比例(或最大值),这个值越小,越能保证服务稳定,更新越平滑 maxSurge:和期望 ready 的副本数相比,超过期望副本数的最大比例(或最大值),这个值调得越大,副本更新速度越快 取值范围数值(两者不能同时为 0) maxUn...
