Ansible playbook 介绍与操作
一、概述
playbook 与 ad-hoc 相比,是一种完全不同的运用 ansible 的方式,类似与 saltstack 的 state 状态文件。ad-hoc 无法持久使用,playbook 可以持久使用。
playbook 是由一个或多个 play 组成的列表,play 的主要功能在于将事先归并为一组的主机装扮成事先通过 ansible 中的 task 定义好的角色。
从根本上来讲,所谓的 task 无非是调用 ansible 的一个 module。将多个 play 组织在一个 playbook 中,即可以让它们联合起来按事先编排的机制完成某一任务。
参考文档:https://ansible-tran.readthedocs.io/en/latest/docs/playbooks.html
Ansible 的基础介绍和环境部署可以参考这篇文章:
二、playbook 核心元素
Hosts 执行的远程主机列表
Tasks 任务集
Varniables 内置变量或自定义变量在 playbook 中调用
Templates 模板,即使用模板语法的文件,比如配置文件等
Handle ...
Ansible 介绍与操作
一、概述
Ansible是新出现的自动化运维工具,基于 Python 开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible 特点:
部署简单,只需要在主控端部署 Ansible 环境,被控端无需作任何操作
默认使用SSH 协议对设备进行管理
主从集中化管理
配置简单、功能强大、扩展性强
支持 API 及自定义模块、可以通过 Python 轻松扩展
通过 Playbooks 来定制强大的配置、状态管理
对云计算平台、大数据都有很好的支持
官方文档:https://docs.ansible.com/ansible/latest/GitHub 地址:https://github.com/ansible/ansible
二、Ansible 架构
上图为 ansible 的基本架构,从上图可以了解到其由以下部分组成:
核心:ansible
核心模块(Core Modules):这些都是 ansible 自带的模块
扩展模块(Custom Modules):如果核心模 ...
用 Ansible 简化 K8S 部署
一、概述
Ceph 在 k8s 中用做共享存储还是非常方便的,Ceph 是比较老牌的分布式存储系统,非常成熟,功能也强大,支持三种模式(快存储、文件系统存储、对象存储),所以接下来就详细讲解如何在 k8s 使用 ceph,关于 ceph 的介绍可以参考以下几篇文章:
[*分布式存储系统 Ceph 环境部署*](https://blog.kkun.site/2023/01/05/Ceph 环境部署)
[*分布式存储系统 Ceph操作*](https://blog.kkun.site/2023/01/09/分布式存储系统 Ceph操作)
前提是需要一个 k8s 环境,
二、Ceph Rook 介绍
Rook是一个开源的云原生存储编排工具,**提供平台、框架和对各种存储解决方案的支持,以和云原生环境进行本地集成。
Rook 将存储软件转变成自我管理、自我扩展和自我修复的存储服务,通过自动化部署、启动、配置、供应、扩展、升级、迁移、灾难恢复、监控和资源管理来实现。Rook 底层使用云原生容器管理、调度和编排平台提供的能力来提供这些功能。
Rook 利用扩展功能将其深度地集成到云原生环 ...
解决ArgoCD Ingress资源一直处于Progressing状态
解决ArgoCD Ingress资源一直处于Progressing状态这个问题,其实需要分版本做不同的处理。主要是通过ArgoCD健康检查的自定义的资源检查来排除对Ingress的检查,主要请参考这两篇文章:https://argo-cd.readthedocs.io/en/stable/operator-manual/health/#ingresshttps://github.com/argoproj/argo-cd/issues/1704
我这里是使用的Ngnix Ingress,并且版本为v1.20.0所以进行如下设置:
1kubectl edit cm -n argocd argocd-cm
1234567data:ba resource.customizations: | networking.k8s.io/Ingress: health.lua: | hs = {} hs.status = "Healthy" return hs
如果是v1.20.0版本以 ...
分布式存储系统 Ceph操作
一、概述
Ceph 是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供**块存储服务(rbd)*、*对象存储服务(rgw) 以及 文件系统存储服务(cephfs),Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。目前也是 OpenStack 的主流后端存储。
关于 Ceph 更详细的介绍和环境部署可以参考这篇文章:分布式存储系统 Ceph 介绍与环境部署
二、cephadm 工具的使用cephadm 官方文档
1)cephadm 工具的介绍
cephadm 是用于管理 Ceph 集群的实用程序或者是管理工具。
Cephadm 的目标是提供一个功能齐全、健壮且维护良好的安装和管理层,可供不在 Kubernetes 中运行 Ceph 的任何环境使用。具体特性如下:
将所有组件部署在容器中—— 使用容器简化了不同发行版之间的依赖关系和打包复杂度。当然,我们仍在构建 RPM 和 Deb 软件包,但是随着越来越多的用户过渡到 cephadm(或 Rook)并构建容器,我们看到的特定于操作系统 ...
Ceph 环境部署
一、概述
Ceph 是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs),Ceph 在存储的时候充分利用存储节点的计算能力,在存储每一个数据时都会通过计算得出该数据的位置,尽量的分布均衡。目前也是 OpenStack 的主流后端存储。
特点:
高性能
摒弃了传统的集中式存储元数据寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高。
考虑了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。
能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据。
高可用性
副本数可以灵活控制。
支持故障域分隔,数据强一致性
多种故障场景自动进行修复自愈。
没有单点故障,自动管理。
高可扩展性
去中心化。
扩展灵活。
随着节点增加而线性增长。
特性丰富
支持三种存储接口:块存储、文件存储、对象存储。
支持自定义接口,支持多种语言驱动。
Ceph GitHub 地址官方文档
二、Ceph 架构支持三种接口:
Object:有原生的 ...
配置Kubelet的垃圾回收
Kubelet的垃圾回收功能可以清理不再使用的容器和镜像,kubelet对容器进行垃圾回收的频率是每分钟一次,对镜像进行垃圾回收的频率是每五分钟一次。
不推荐使用外部的垃圾回收工具,因为这些工具有可能会删除 kubelet 仍然需要的容器或者镜像。
镜像回收
容器回收
配置
Deprecation
镜像回收Kubernetes 通过 imageManager 配合 cadvisor 管理所有镜像的生命周期。
镜像的垃圾回收策略主要考虑两方面因素: HighThresholdPercent 和 LowThresholdPercent。
磁盘利用率超过 high threshold 将触发垃圾回收动作
垃圾回收功能将删除最近最少使用的镜像,直到磁盘利用率低于 low threshold
容器回收容器的垃圾回收侧率主要考虑三个用户自定义的变量:
MinAge: 容器创建到现在的最小时长,低于此时长的不能被垃圾回收;如果设置为 0,则禁用该选项
MaxPerPodContainer:以 Pod UID + 容器名 作为组合键,MaxPerPodContainer 指定了同一个 Pod ...
K8S 和 Docker容器中的退出状态码
什么是容器退出码当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是 Kubernetes 用户,容器故障是 pod 异常最常见的原因之一,了解容器退出码可以帮助您在排查时找到 pod 故障的根本原因。
以下是容器使用的最常见的退出码:
退出码
名称
含义
0
正常退出
开发者用来表明容器是正常退出
1
应用错误
容器因应用程序错误或镜像规范中的错误引用而停止
125
容器未能运行
docker run 命令没有执行成功
126
命令调用错误
无法调用镜像中指定的命令
127
找不到文件或目录
找不到镜像中指定的文件或目录
128
退出时使用的参数无效
退出是用无效的退出码触发的(有效代码是 0-255 之间的整数)
134
异常终止 (SIGABRT)
容器使用 abort() 函数自行中止
137
立即终止 (SIGKILL)
容器被操作系统通过 SIGKILL 信号终止
139
分段错误 (SIGSEGV)
容器试图访问未分配给它的内存并被终止
143
优雅终止 (SIGTERM)
容器收到即将终止的警告,然后终止
2 ...
harbor对接minio和NFS
一、前言Harbor 的部署可以使用 NFS 存储,虽然可以使用 rsync+inotify 做数据同步做解决单点问题,但是 NFS 效率/性能有限,没有对象存储那么强大,所以一般使用对象存储居多,这里选用 MinIO 对象存储软件,当然也可以使用Ceph或者其它对象存储。都部署在 k8s 集群上,k8s 基础环境部署可以参考文章:二进制部署一套完整的企业级K8s集群
二、MinIO on K8S 部署
MinIO 的介绍可以参考这篇文章:高性能分布式对象存储 MinIO 部署
这里使用 Helm 部署 MinIO ,关于 Helm 的介绍可以参考官方文档
官方文档:https://helm.sh/zh/docs/
部署步骤如下:
1)下载安装 MinIO 包1234567mkdir -p /opt/k8s/bigdata/minio;cd /opt/k8s/bigdata/minio# 添加数据源helm repo add bitnami https://charts.bitnami.com/bitnami# 下载helm pull bitnami/minio# 解压部 ...
使用 Containerlab + Kind 快速部署 Cilium BGP 环境
使用 Containerlab + Kind 快速部署 Cilium BGP 环境1.1 Cilium 介绍Cilium 是一款基于 eBPF 技术的 Kubernetes CNI 插件,Cilium 在其官网上对产品的定位为 “eBPF-based Networking, Observability, Security”,致力于为容器工作负载提供基于 eBPF 的网络、可观察性和安全性的一系列解决方案。Cilium 通过使用 eBPF 技术在 Linux 内部动态插入一些控制逻辑,可以在不修改应用程序代码或容器配置的情况下进行应用和更新,从而实现网络、可观察性和安全性相关的功能。
1.2 Cilium BGP 介绍BGP(Border Gateway Protocol,边界网关协议)是一种用于 AS(Autonomous System,自治系统)之间的动态路由协议。BGP 协议提供了丰富灵活的路由控制策略,早期主要用于互联网 AS 之间的互联。随着技术的发展,现在 BGP 协议在数据中心也得到了广泛的应用,现代数据中心网络通常是基于 Spine-Leaf 架构,其中 BGP 可用于 ...