Ansible 自动化部署K8S1.34.1
Kubernetes 安装与配置自动化
项目简介
- 该项目使用 Ansible 来自动化部署和配置 Kubernetes 集群,包含多个角色和任务,支持高可用性部署,并集成了一些常用的 Kubernetes 插件(如 Calico、CoreDNS、Helm 等)。项目中的主要目标是通过精心设计的
site.yml
和相关的 Ansible 角色(roles
)来简化 Kubernetes 集群的安装与配置。 - Ansible 脚本配置过程完全按照这个文档编写:https://blog.csdn.net/qq_39965541/article/details/151965990?spm=1011.2415.3001.5331
- 脚本用到的所有安装包下载地址:https://pan.baidu.com/s/19iY9wQrCxC7hX6kHBrcALA?pwd=i25f (下载下来放到 packages 目录即可,再本页面下载的不用直接下载下来就是全量的安装包)
- githup 项目地址 :git@github.com:peopleurl/ansible-k8s-bootstrap.git
目录结构
ansible-k8s-1.34.1/
├── packages # K8S 相关的安装包 (这个安装包 比较大已经其放到百度云 下载下来解压覆盖这个目录即可)
├── group_vars/└── all.yml # 全局变量配置 (写的着急 只添加了一部分变量)
├── inventory/ # 存放 K8S 清单文件(inventory)
│ └── hosts.yml # 定义了 Kubernetes 集群的主机信息
├── roles/ # 存放各个角色的配置
│ ├── ca # Kubernetes CA 证书相关配置
│ ├── calico # Calico 网络插件
│ ├── copy-ca # 复制 CA 证书到各节点
│ ├── coredns # CoreDNS 插件
│ ├── cri # 配置容器运行时
│ ├── etcd # ETCD 集群配置
│ ├── ha # 高可用性配置(Keepalived+Haproxy)
│ ├── helm # Helm 包管理工具配置
│ ├── ingress-nginx # Ingress Nginx 控制器配置
│ ├── kube-master # 主节点配置
│ ├── kube-node # 工作节点配置
│ ├── Metrics # 集群监控(Metrics)配置
│ └── prepare # 集群准备工作(如依赖安装等)
├── site.yml # Ansible 主 playbook 文件
└── README.md # 脚本说明文件
安装与使用
系统要求
- 支持 Ansible 的操作系统
- 需要提前升级内核版本到4.19以上,或者系统本
- 我当前的系统版本:AlmaLinux release 10.0 内核:6.12.0-55.9.1.el10_0.x86_64
- Centos7 系统不能用,这个系统再启动 containerd 时候会报错 尽量使用最新的linux系统去安装
安装 Ansible
我当前使用的系统,如果需要部署多个节点 比如10个以上 需要增加 ansible 主机配置要不会特别卡。
AlmaLinux release 10.0 (Purple Lion)
dnf install -y epel-release
dnf install -y ansible-core
修改 ansible 配置
## 再 /etc/ansible/ansible.cfg 这个文件中 添加这两行
[defaults]
host_key_checking = False
配置清单文件 (hosts.yml
)
项目中的清单文件定义了 Kubernetes 集群中各节点的主机名与 IP 地址。根据你的集群环境,修改文件 inventory/hosts.yml
中的 ansible_host
和其他配置项。
## 如果有多个 master 或者 node 节点 按照我那个直接在下面添加即可all:children:kube_control_plane: hosts:master01:ansible_host: 192.168.1.11keepalived_state: MASTERpriority: 100master02:ansible_host: 192.168.1.12keepalived_state: BACKUPpriority: 90master03:ansible_host: 192.168.1.13keepalived_state: BACKUPpriority: 80kube_node: 如果没有 node 节点将这个删除 并同步修改site.yml 一并删除 kube_node 这个组hosts:worker01:ansible_host: 192.168.1.14worker02:ansible_host: 192.168.1.15worker03:ansible_host: 192.168.1.16## etcd 集群是奇数节点 比如 1个 3个 或者5个节点 根据需求修改就行etcd_cluster: ## 如果etcd节点 是和 master 节点再一起的 直接将下面的替换为master节点hosts:etcd01:ansible_host: 192.168.1.17etcd02:ansible_host: 192.168.1.18etcd03:ansible_host: 192.168.1.19
执行 Playbook
site.yml
是主要的 Ansible Playbook 文件,包含了多个任务和角色。可以直接运行以下命令来启动自动化配置过程:
## 可以再这条命令的末尾加上 -vv 输出详细日志
ansible-playbook -i inventory/hosts.yml site.yml
当前的这个ansible 脚本还不能完全做到离线安装 有几个步骤需要安装相应的工具,如果没有外网可以提前安装如下工具
dnf install -y ipvsadm ipset sysstat conntrack libseccomp wget git vim lsof tar unzip zip sysstat nc bash-completion keepalived haproxy
yum install -y ipvsadm ipset sysstat conntrack libseccomp wget git vim lsof tar unzip zip sysstat nc bash-completion keepalived haproxy
角色说明
- prepare: 执行集群的准备工作,包括安装必要的依赖、配置工具等。
- cri: 配置容器运行时(Container Runtime Interface),如 Docker 或 containerd。
- ca: 配置 Kubernetes 集群的 CA 证书。
- copy-ca: 将 CA 证书分发到各节点。
- etcd: 配置 ETCD 集群,Kubernetes 的关键数据存储。
- ha: 配置 Kubernetes 高可用性(Keepalived)。
- kube-master: 配置 Kubernetes master 节点,安装 API server、controller manager、scheduler 等。
- kube-node: 配置 Kubernetes 工作节点,安装 Kubelet、KubeProxy 等。
- calico: 安装并配置 Calico 网络插件,提供网络策略和网络管理功能。
- coredns: 安装并配置 CoreDNS,作为 DNS 服务提供集群服务发现。
- helm: 安装并配置 Helm,Kubernetes 的包管理工具。
- ingress-nginx: 配置 Nginx Ingress Controller,用于管理外部访问。
- Metrics: 配置监控系统,如 Prometheus、Metrics Server 等。
高可用性配置
在 site.yml
中,kube_control_plane
组中的节点使用 Keepalived 和 HA 配置来实现高可用性,确保 Kubernetes master 节点的高可用性。通过 keepalived_state
和 priority
设置每个 master 节点的状态和优先级。
集群节点配置
集群节点被分为三大组:
- kube_control_plane: 主节点,运行 Kubernetes 控制层(API server、controller manager、scheduler 默认我把node相关组件也安装上了 如果不需要删除 这个配置即可 修改这个文件 site.yml 即可)。
- kube_node: 工作节点,运行 Kubelet 和容器化应用。
- etcd_cluster: ETCD 集群,用于存储 Kubernetes 的所有集群数据。
资源解压密码:1qazxsw2