.1. 什么是 ccze ccze 是 Linux 一个用于彩色化日志文件输出的工具。它可以将文本文件中的日志内容进行颜色标记,以提高可读性。
.2. 安装 # 对于Debian/Ubuntu系统 sudo apt-get install ccze # 对于CentOS/RHEL系统 sudo yum install ccze .3. 使用 -A 选项用于启用ANSI颜色代码 cat nginx.log |ccze -A cat nginx.log |ccze -A | more journalctl -xeu docker|ccze -A|more docker logs xxx |ccze 导出 HTML
cat /var/log/messages |ccze -h > ~/messages.html .4. 参考 https://www.cnblogs.com/flashfish/p/11230141.html https://lintut.com/colorize-log-files-on-linux-using-ccze-tool/.1. 为什么安装 WSL .2. 安装 WSL .3. 配置优化 .4. 安装基础软件 .5. 参考 .1. 为什么安装 WSL 如果你的操作系统是 windows 系列则有必须了解一下 WSL,对于开发者来说必备的工具。
Windows Subsystem for Linux(简称WSL)是微软开发的一种允许在Windows操作系统上运行Linux二进制可执行文件(ELF格式)的兼容层。WSL将Linux内核的子系统嵌入到Windows中,使得用户可以在Windows环境中使用Linux工具、命令和应用程序。
WSL的主要特点包括:
全面兼容性:WSL提供了高度兼容的Linux系统调用接口,可以运行大多数基于Linux的工具和应用程序,无需进行修改或重新编译。
轻量化和快速启动:WSL只需要很小的资源开销,并且可以在几秒钟内启动。这使得在Windows系统上使用Linux工具和应用程序变得更加便捷。
文件系统互通:WSL可以访问Windows文件系统,并且Windows和Linux之间的文件共享也变得非常容易。用户可以在Windows和Linux之间方便地共享文件和目录。
命令行工具:WSL支持使用各种命令行工具,如Bash、Zsh、Fish等,提供了丰富的Shell环境和命令行工具集。
自定义配置和扩展:WSL允许用户自定义Linux发行版,并且可以通过安装各种软件包来扩展功能。用户可以选择安装适合自己需求的发行版,并根据需要进行自定义配置。
使用WSL可以带来许多好处,例如在Windows环境中开发和运行Linux软件、使用Linux命令行工具和脚本、学习和测试Linux等。WSL目前有两个主要版本,即WSL 1和WSL 2,用户可以根据自己的需求选择适合自己的版本。
总之,WSL为Windows用户提供了与Linux系统无缝集成的能力,使得在Windows环境下使用Linux变得更加方便和灵活。
.2. 安装 WSL # 打开PowerShell作为管理员,执行以下命令,以启用WSL特性 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart # 然后,执行以下命令以启用虚拟机平台: dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 更新 WSL
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi 将WSL 2设置为默认版本:
wsl --set-default-version 2 安装最新的 Ubuntu 最新发行版本:
wsl --install # 一会需要设置帐号和密码 将安装的 ubuntu 设置默认系统.1. 什么是 Firewalld Firewalld 是一个在 Linux 系统上提供动态防火墙管理的工具。它是一个用户和管理员友好的前端,用于配置和管理 iptables 规则,并提供了一种简化的方式来管理网络连接和保护系统免受未经授权的访问。
Firewalld 的主要特点包括:
基于区域的防火墙:Firewalld 将网络接口划分为不同的区域,例如公共区域、内部区域和信任区域。每个区域都有其自己的安全策略和规则集。 动态更新规则:Firewalld 允许实时添加、删除和修改防火墙规则,而无需重启防火墙服务或中断网络连接。 服务和应用程序级别的访问控制:Firewalld 允许根据服务或应用程序的名称来控制网络访问权限,而不仅仅是基于端口号。 高级网络管理功能:Firewalld 支持网络地址转换(NAT)、端口转发、IPSec 和 IPv6 等高级网络功能。 兼容性和扩展性:Firewalld 可以与其他网络管理工具和服务集成,如 NetworkManager 和 SELinux。 使用 Firewalld,管理员可以轻松地配置和管理系统的防火墙设置,保护系统免受恶意网络活动和未经授权的访问。它提供了一种灵活且强大的方式来管理网络连接,并根据实际需求进行定制配置。
需要注意的是,Firewalld 本身并不是防火墙,而是一个防火墙管理工具。
.2. 工作原理 Firewalld 的工作原理可以简要概括如下:
区域和服务定义:Firewalld 使用预定义的区域和服务来管理网络连接和访问控制。区域定义了特定接口的安全策略,而服务定义了允许的网络服务和端口。
运行时状态:Firewalld 在运行时维护一个状态,以跟踪网络连接和防火墙规则的变化。它监视网络接口上的数据包流量,并根据规则进行决策。
防火墙规则集:Firewalld 根据配置文件中定义的防火墙规则集来处理传入和传出的数据包。规则可以基于源 IP、目标 IP、源端口、目标端口等条件进行匹配,并决定是允许还是拒绝数据包。
动态更新:Firewalld 允许在运行时动态地添加、删除和修改防火墙规则,而无需重启防火墙服务或中断网络连接。这使得管理员可以实时地对网络连接进行调整和控制。
网络地址转换(NAT)和端口转发:Firewalld 支持配置网络地址转换(NAT)和端口转发规则,以便将数据包从一个网络接口转发到另一个接口或端口。
D-Bus 接口:Firewalld 提供了一个 D-Bus 接口,使其他应用程序和工具可以与其交互并管理防火墙设置。
Firewalld 是通过定义防火墙规则最终交由内核的 netfilter 进行包过滤实现防火墙功能。
.3. 架构图 以下是官方给出的架构图,https://firewalld.org/documentation/architecture.html
Firewalld 是一个复杂的系统,包含了多个组件和模块来实现其功能。以下是关于每个组件的简要介绍:
前端组件:
firewall-cmd:firewall-cmd 是 Firewalld 的命令行前端工具,用于管理和配置防火墙规则、区域、服务等。 firewall-config:firewall-config 是一个图形化的前端工具,提供了一个易于使用的界面来配置和管理防火墙设置。 firewall-applet:firewall-applet 是 Firewalld 的系统托盘应用程序,可以在系统托盘中显示防火墙状态,并提供快速访问配置选项的功能。 firewall-offline-cmd:firewall-offline-cmd 是一个离线命令行工具,用于在没有网络连接的情况下配置和管理防火墙规则。 核心组件:1. 什么是 Chrony 2. 安装 3. chrony.conf 配置 3.1. 服务端配置 3.2. 客户端配置 4. 常用命令 5. 实战分析 5.1. 服务器时钟跟踪状态信息 5.2. 查看时钟层级 5.3. 时间源的统计信息 5.4. chronyc tracking 6. 防火墙设置 7. 离线环境时钟同步设置 7.1. 主服务器配置 7.2. 客户端配置 7.3. 如果仍然有问题,查看日志 1. 什么是 Chrony Chrony 是一款用于时钟同步的程序,它可以通过网络协议(如 NTP、UDP)与外部时间源进行通信,从而使本地系统的时钟与参考时钟保持同步。相比其他时钟同步程序,Chrony 具有更高的精度和更好的稳定性,特别适用于在网络不稳定或移动设备上使用。
以下是 Chrony 的一些主要特点:
渐进式时钟调整:Chrony 通过缓慢地调整时钟频率和偏移量来避免大幅度调整引起的系统不稳定性。 时钟纠正算法:Chrony 使用一种称为 MLE(Maximum Likelihood Estimation)的算法来计算时钟偏移量和频率误差,从而提高时钟同步的准确性和稳定性。 无需 root 权限:Chrony 可以在普通用户下运行,并且不需要 root 权限。 安全性:Chrony 支持加密和身份验证,以防止恶意攻击和数据篡改。 网络适应性:Chrony 可以根据网络延迟和时钟偏移量自适应地选择最佳的时间源。 相比 NTP 更加精准好用。推荐使用 Chrony。
总的来说,Chrony 是一款功能强大、精度高、稳定性好、安全性高的时钟同步程序,广泛用于各种 Linux 和 Unix 系统中。1. 查看 Release # 查看当前 Default 命名空间下的 Release helm ls # 查看所有命名空间下的 Release helm ls -A # 查看指定命名空间下的 Release helm ls -n <namespace> # 查看状态 helm status <release-name> # 卸载 helm delete <release-name> 2. 部署 helm install <release-name> <helm-Repository> -f values.yaml helm install <release-name> <helm-Repository> --set name=xxx -f values.yaml 3. 仓库 helm - 针对Kubernetes的Helm包管理器 helm repo add - 添加chart仓库 helm repo index - 基于包含打包chart的目录,生成索引文件 helm repo list - 列举chart仓库 helm repo remove - 删除一个或多个仓库 helm repo update - 从chart仓库中更新本地可用chart的信息 # 搜索 helm search hub redis # 搜索官网上的资源 helm search repo redis # 搜索本地添加的仓库资源 # 搜索更多版本列表 helm search repo -l metrics-server/metrics-server # 下载指定版本,CHART VERSION helm search repo metrics-server/metrics-server --version 3.1. 介绍 Chart 模板才是 Helm 的灵魂所在,学会模板才算入门 Helm,让我们一起学习吧.
2. 模板语法 模板命令要括在 {{ 和 }} 之间。
如:
apiVersion: v1 kind: ConfigMap metadata: name: {{ .Release.Name }}-configmap data: myvalue: "Hello World" 3. 内置对象 系统自带一些内置对象,可以在模板里使用.
Release: Release对象描述了版本发布本身。包含了以下对象:
Release.Name: release名称 Release.Namespace: 版本中包含的命名空间(如果manifest没有覆盖的话) Release.IsUpgrade: 如果当前操作是升级或回滚的话,该值将被设置为true Release.IsInstall: 如果当前操作是安装的话,该值将被设置为true Release.Revision: 此次修订的版本号。安装时是1,每次升级或回滚都会自增 Release.Service: 该service用来渲染当前模板。Helm里始终Helm Values: Values对象是从values.yaml文件和用户提供的文件传进模板的。默认为空
Chart: Chart.yaml文件内容。 Chart.yaml里的所有数据在这里都可以可访问的。比如 {{ .Chart.Name }}-{{ .Chart.Version }} 会打印出 mychart-0.1.0
Files: 在chart中提供访问所有的非特殊文件的对象。你不能使用它访问Template对象,只能访问其他文件。 请查看这个 文件访问部分了解更多信息
Files.Get 通过文件名获取文件的方法。 (.Files.Getconfig.ini) Files.GetBytes 用字节数组代替字符串获取文件内容的方法。 对图片之类的文件很有用 Files.Glob 用给定的shell glob模式匹配文件名返回文件列表的方法 Files.1. 什么是 Helm Helm是一个Kubernetes的包管理工具,它可以帮助我们简化Kubernetes应用程序的部署和管理。使用Helm,可以将Kubernetes应用程序打包成易于安装、升级和卸载的chart包,并且可以在不同的Kubernetes环境中重复使用这些chart包。
2. Helm 三个概念 Chart 代表着 Helm 包,即模板代码的集合 Repository 用来存放和共享 charts 的地方 Release 运行在 Kubernetes 集群中的 chart 的实例 3. 安装 Helm 官方地址: https://github.com/helm/helm/releases # linux amd64 wget https://get.helm.sh/helm-v3.13.0-linux-amd64.tar.gz tar -zxvf helm-v3.13.0-linux-amd64.tar.gz cd linux-amd64 cp helm /usr/local/sbin 4. 快速入门 4.1. 添加 Repository 仓库 https://artifacthub.io/ # 添加 Helm Char 仓库 helm repo add bitnami https://charts.bitnami.com/bitnami # 查看添加的仓库列表 helm repo ls # 更新 charts 列表 helm repo update 4.2. 搜索 Chart # 搜索 charts 列表 helm search repo bitnami # 搜索指定的 charts 包名,如 nginx helm search repo nginx 4.1. 设置共享目录 前提:必须关闭虚拟机,再点击设置
如图所示:
2. 使用共享目录 # 安装 open-vm-tools yum install -y open-vm-tools # 共享目录生效 vmhgfs-fuse /mnt/hgfs/ # 设置软链 mkdir /opt/vm-share ln -s /mnt/hgfs/vm-share/ /opt/vm-share 3. 设置开机启动 cat >> /etc/rc.local <<EOF vmhgfs-fuse /mnt/hgfs/ EOF1. 目录 1. 目录 2. 什么是 Kubernetes 的高可用 3. Haproxy + Keepalived 优缺点 3.1. Haproxy 3.2. Keepalived 4. 架构图 5. Haproxy 5.1. 底层原理 5.2. VRRP 底层原理 5.4. 安装(二进制方式) 6. KeepAlived 6.1. 底层原理 6.3. 安装 7. 参考 8. 关于作者 2. 什么是 Kubernetes 的高可用 高可用性是指系统或应用程序在面对故障或异常情况时能够保持持续运行和提供服务的能力。在构建高可用的Kubernetes集群时,可以采取以下一些高级方法和策略:
多节点部署:使用多个节点来部署Kubernetes集群,确保即使某个节点发生故障,其他节点仍然可以继续提供服务。
负载均衡:通过在集群前端引入负载均衡器,将流量分发到多个节点上,实现负载均衡和故障转移。这样即使某个节点发生故障,负载均衡器可以将流量重新路由到其他健康的节点上。
自动伸缩:利用Kubernetes的自动伸缩功能,根据实际负载情况自动调整集群的节点数量,以满足应用程序的需求。这样可以在高负载时增加节点数量,保证性能,而在低负载时减少节点数量,节省资源。
容器健康检查:通过定义容器的健康检查机制,Kubernetes可以监控容器的运行状态,并在容器出现故障或异常时自动重启或替换容器,确保应用程序的持续可用性。
数据备份和恢复:定期对关键数据进行备份,并建立可靠的数据恢复机制,以防止数据丢失或损坏。这可以通过使用Kubernetes的持久化存储卷(Persistent Volume)和备份工具来实现。
故障切换和容错:通过使用Kubernetes的故障切换功能,可以在节点或容器发生故障时自动将服务切换到备用节点或容器上,确保应用程序的连续性和可用性。
监控和告警:建立全面的监控系统,实时监测集群和应用程序的运行状态,并设置告警机制,及时发现和处理潜在的故障或异常情况。
通过采取这些高级方法和策略,可以有效地提高Kubernetes集群的可用性和稳定性,确保应用程序在运行时不会出现服务中断。
3. Haproxy + Keepalived 优缺点 Haproxy和Keepalived是常用的组合,用于实现负载均衡和高可用性的解决方案。下面是它们的优缺点:
3.1. Haproxy Haproxy的优点:
高性能:Haproxy是一个高性能的负载均衡器,能够处理大量的并发连接和请求。 灵活的配置:Haproxy提供了丰富的配置选项,可以根据需求进行灵活的负载均衡策略和规则配置。 健康检查:Haproxy支持对后端服务器进行健康检查,可以自动排除故障的服务器,确保只将请求转发到健康的服务器上。 SSL终止:Haproxy可以作为SSL终止器,将SSL/TLS连接解密后再转发给后端服务器,减轻服务器的负担。 Haproxy 的缺点:
单点故障:Haproxy本身是单点,如果Haproxy节点发生故障,可能会导致服务中断。 配置复杂:Haproxy的配置相对复杂,需要一定的学习和经验来正确配置和管理。 3.2. Keepalived Keepalived 的优点:1. 介绍限流 限流是一种通过对系统请求进行限制和控制,避免系统过载,保证系统稳定性和安全性的技术手段。
2. Istio 限流 首先确认需要限流的应用是否已经加载了 sidecar,如果还未安装 istio, 请参考:https://yezihack.github.io/posts/istio-install 创建 app-ratelimit.yaml:
设置流速间隔时间:token_bucket.fill_interval 设置流速令牌数量:token_bucket.max_tokens 选择哪些应用限流:workloadSelector.labels apiVersion: networking.istio.io/v1alpha3 kind: EnvoyFilter metadata: name: app-ratelimit spec: workloadSelector: labels: app: my-app # 用来选择需要进行配置的工作负载 configPatches: - applyTo: HTTP_FILTER match: listener: filterChain: filter: name: "envoy.filters.network.http_connection_manager" patch: operation: INSERT_BEFORE value: name: envoy.filters.http.local_ratelimit typed_config: "@type": type.googleapis.com/udpa.type.v1.TypedStruct type_url: type.googleapis.com/envoy.extensions.filters.http.local_ratelimit.v3.LocalRateLimit value: stat_prefix: http_local_rate_limiter token_bucket: # 令牌桶算法的配置信息,用于控制每秒放行的请求数量。 max_tokens: 10 # 指定令牌桶中最多可以存储的令牌数,即最大可用令牌数 tokens_per_fill: 10 # 指定每次填充令牌桶的令牌数,即每次可用令牌数。 fill_interval: 60s # 定填充令牌桶的时间间隔,即每隔多长时间填充一次令牌桶。 filter_enabled: # 控制是否启用该过滤器的开关。 runtime_key: local_rate_limit_enabled default_value: numerator: 100 denominator: HUNDRED filter_enforced: # 制是否强制执行该过滤器的开关。 runtime_key: local_rate_limit_enforced default_value: numerator: 100 denominator: HUNDRED response_headers_to_add: - append: false header: key: x-local-rate-limit value: 'true' kubectl apply -f app-ratelimit.