1. 介绍 在 Kubernetes 环境中进行 故障分析与调试 是一项重要的技能,因为 Kubernetes 涉及众多的组件和服务,且其工作负载通常是分布式的。在面对问题时,分析和调试的技巧将帮助你更快速地定位问题并找到解决方案
2. 涉及工具 kubectl crictl kubeadm journalctl netstat ss lsof tcpdump ip iptables firewall-cmd 3. 网络问题 首先,我们需要了解 k8s 整个网络架构,数据包是如何流转的,才能快速定位问题。
架构图如下(以flannel为例):
具体如何排查,网络问题千万种,这里只提供一种思路,仅供参考。
第一步:基本参数,如 overlay,br_netfilter,net.ipv4.ip_forward 等是否配置正确 第二步:防火墙,如 iptables, firewalld 第三步:路由表,如 ip route 第四步:网络插件,如 flannel, calico 第五步:服务发现,如 coredns 第六步:网络策略,如 networkpolicy 第七步:网络日志,如 kubectl describe pod, kubectl logs pod, flannel, calico,journalctl -fu kubelet 第八步:抓包诊断,如 tcpdump, ss, netstat # 基本参数 ## 1 为开启,0 为关闭 ## 查看方法一 lsmod | grep -E 'overlay|br_netfilter' cat /proc/sys/net/ipv4/ip_forward cat /proc/sys/net/bridge/bridge-nf-call-iptables cat /proc/sys/net/bridge/bridge-nf-call-ip6tables ## 查看方法二 modprobe overlay modprobe br_netfilter sysctl net.1. Containerd 软件安装 1.1. Containerd 组件介绍 2. runc 安装 3. crictl 安装 3.1. crictl 配置 4. containerd 配置 4.1. 修改配置 4.2. 配置镜像加速 5. 添加 containerd 到 systemd 6. Containerd 使用说明 6.1. crictl 命令 6.2. cri 命令 1. Containerd 软件安装 https://github.com/containerd/containerd/releases # 下载 wget https://github.com/containerd/containerd/releases/download/v1.7.22/containerd-1.7.22-linux-amd64.tar.gz # 解压 tar -zxvf containerd-1.7.22-linux-amd64.tar.gz # 移动 mv bin/* /usr/local/bin/ -> # ctr version Client: Version: v1.7.22 Revision: 7f7fdf5fed64eb6a7caf99b3e12efcf9d60e311c Go version: go1.22.7 1.1. Containerd 组件介绍 序列 名称 介绍 1 containerd-shim-runc-v1 containerd 的旧版本 shim 进程,用于管理单个容器的生命周期。 2 containerd-shim-runc-v2 containerd 的更新版本 shim 进程,用于管理单个容器的生命周期。 3 containerd-stress 用于压力测试 containerd 的工具。 4 containerd containerd 的主要守护进程,负责管理容器的生命周期和镜像存储。 5 containerd-shim containerd 的 shim 进程,用于在容器和 containerd 守护进程之间建立通信。 6 ctr containerd 的命令行界面(CLI)工具,允许直接与 containerd 守护进程交互。 2.1. 目录 1. 目录 2. 介绍 3. Docker 4. Docker-Compose 5. 二进制包 5.1. 下载及创建目录 5.2. 配置环境变量 5.3. 配置my.cnf 5.4. 初使化并启动mysql 6. k8s Deployment 7. 参考链接 2. 介绍 MySQL 是一个开源的关系型数据库管理系统,广泛用于各种应用程序中。它支持多种存储引擎,包括 InnoDB、MyISAM 等,并且具有高性能、可靠性和易用性等特点。MySQL 可以在多种操作系统上运行,包括 Windows、Linux 和 macOS 等。
本次采用多种方式部署 MySQL,包括 Docker、Docker-Compose、二进制包、k8s-Deployment。
3. Docker docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=your_power_password -v /data/mysql:/var/lib/mysql mysql:5.7.44 4. Docker-Compose cat > docker-compose.yml <<EOF version: '3' services: mysql: image: mysql:5.7.44 container_name: mysql ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=your_power_password volumes: - /data/mysql:/var/lib/mysql EOF # 创建其它帐号 cat > docker-compose.Kubernetes 升级操作 1. 目录 Kubernetes 升级操作 1. 目录 2. 升级需知 3. 升级流程 4. 检查集群 5. 备份操作 5.1. 备份 etcd 数据 5.2. 备份 flannel 二进制文件 5.3. 备份 kubernetes 文件 6. 升级主master 6.1. 查看当前版本 6.2. 设置版本号 7. 规划升级版本 8. 查询 9. 升级主master 9.1. 设置版本号 9.2. 获取当前集群配置 9.3. kubeadm 升级 9.4. 查看计划&差异 9.5. 升级主master 9.6. 升级组件 9.7. 验证升级 10. 升级其它 master 11. 升级 worker 节点 11.1. 排空节点 11.2. 升级节点 11.3. 验证 12. 回滚 13.Docker 版本 https://github.com/kubernetes/kubernetes/blob/release-1.20/build/dependencies.yaml k8s 不同版本,支持的 docker 版本不同,导致安装和升级,版本冲突,需要提前了解。
版本对应关系 Kubernetes 版本 支持的 Docker 版本 1.20.x 18.09, 19.03, 20.10 1.19.x 18.09, 19.03, 20.10 1.18.x 18.09, 19.03, 19.03 flanned 选择版本:https://github.com/flannel-io/flannel/blob/v0.24.4/Documentation/kube-flannel.yml
ingress-nginx 选择版本:https://github.com/kubernetes/ingress-nginx?tab=readme-ov-file#changelog1. 网络配置 cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static # 修改成 static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=f72ecf66-d8b0-456b-9e61-05297b1d4131 DEVICE=ens33 ONBOOT=yes # 开机启动 IPADDR=192.168.9.100 # 设置本机IP GATEWAY=192.168.9.2 # 设置本机的网关 NETMASK=255.255.255.0 # 设置本机的掩码 # 设置DNS cat /etc/resolv.conf nameserver 223.5.5.5 nameserver 114.114.114.114 # 重启网络服务 systemctl restart network # 查看网络状态 ip addr # 测试网络 ping www.baidu.com PING www.a.shifen.com (220.181.38.148) 56(84) bytes of data. 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=8.00 ms 64 bytes from 220.1. 目录 1. 目录 2. Categraf 介绍 3. 小试牛刀 3.1. Categraf 下载源码 3.2. 配置 golang 环境 3.3. Categraf 编译 3.4. 运行 categraf 4. 二次开发 4.1. 目录说明 4.2. 插件开发 4.2.1. 配置文件 4.2.2. 代码逻辑 4.2.3. 注册 插件 4.2.4. 编译源码 5. 推送至 prometheus 5.1. 安装 prometheus 5.2. prometheus 配置 systemd 5.3. 启动 prometheus 5.4. categraf 配置 prometheus 5.5. prometheus 查看 categraf 上报的数据 6. 参考 2. Categraf 介绍 Categraf 是一个开源的监控采集 Agent,类似 Telegraf、Grafana-Agent、Datadog-Agent,希望对所有常见监控对象提供高质量的监控数据采集能力,采用了 All-in-one 的设计理念,可以同时支持指标、日志、链路追踪数据的采集1. 介绍 2. 版本介绍 3. 生成 elastic 证书及密码 3.1. elastic 证书配置代码 3.2. 添加到 secret 中 3.3. 生成密码加入 secret 4. helm 配置 4.1. 添加 helm repo 4.2. 下载 elastic 4.3. 获取 values.yaml 5. elastic values 配置 5.1. 配置 master values.yaml 5.2. 配置 data values.yaml 5.3. 配置 client values.yaml 6. 部署 6.1. 观察 1. 介绍 Elasticsearch 是一个基于 Lucene 构建的开源搜索引擎。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口。Elasticsearch 是用 Java 语言开发的,并且是 Apache 许可条款下的开源产品。
以下是 Elasticsearch 的一些关键特性:
分布式:Elasticsearch 设计为分布式,可以很容易地扩展到数百台服务器,处理 PB 级别的数据。1. 查看系统信息 # 查看 MySQL 版本信息 SELECT VERSION(); # 查看 MySQL 服务器启动时间 SHOW GLOBAL STATUS LIKE 'Uptime'; # 查看当前连接的用户和主机信息 SELECT USER(), CURRENT_USER(), @@hostname; # 查看帐号列表 SELECT User, Host FROM mysql.user; # 查看 MySQL 数据库中当前可用的存储引擎 SHOW ENGINES; # 检查 MySQL 服务器允许的最大连接数 SHOW VARIABLES LIKE 'max_connections'; # 查看 MySQL 服务器当前运行的线程数 SHOW GLOBAL STATUS LIKE 'Threads_running'; # 查看 MySQL 当前的连接数 SHOW STATUS WHERE `variable_name` = 'Threads_connected'; ## 或 SELECT COUNT(*) FROM information_schema.processlist; # 查看 MySQL 数据库中当前正在运行的进程 SHOW PROCESSLIST; # MySQL 服务器监听的网络地址 SHOW GLOBAL VARIABLES LIKE 'bind_address'; # MySQL服务器监听的TCP/IP端口号 SHOW GLOBAL VARIABLES LIKE 'port'; # 查看 show global variables like '%messages%'; # 查看模式 SELECT @@sql_mode; -- 设置全局sql_mode SET GLOBAL sql_mode = 'modes'; -- 设置当前连接的sql_mode SET SESSION sql_mode = 'modes'; -- 或者 SET sql_mode = 'modes'; 动态设置变量 SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 2.1. 什么是 MySQL 主从同步 2. 主从原理 3. 主从配置参数 3.1. server_id 3.2. log_bin 3.3. sync_binlog 3.4. relay_log 3.5. log_slave_updates 3.6. read_only 3.7. sync_master_info 3.8. sync_relay_log 3.9. sync_relay_log_info 3.10. expire_logs_days 3.11. max_binlog_size 3.12. binlog_format 3.13. 实例配置 4. 主从常用命令 5. 测试数据 6. 主从同步(docker) 6.1. 准备 6.2. 主库 6.3. 从库 6.4. 停止主从同步 6.5. 删除 mysql 7. 一主多从同步(docker) 7.1. 准备 7.2. 主库 7.3. 从库01 7.4. 从库02 7.5. 停止主从同步 7.6. 删除 mysql 8. 主从(主)从部署(docker) 8.1. 准备 8.