【自动化】基于ansible部署k8s1.29集群
Ansible-K8S-YAML编写指北
1. 集群环境介绍
1.1 集群IP、角色软件规划
| 主机名称 | IP地址 | 说明 | 软件 |
|---|---|---|---|
| Master01 | 10.168.1.161 | master | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx |
| Master02 | 10.168.1.162 | master | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx |
| Master03 | 10.168.1.163 | master | kube-apiserver、kube-controller-manager、kube-scheduler、etcd、kubelet、kube-proxy、nfs-client、haproxy、keepalived、nginx |
| Node01 | 10.168.1.164 | node | kubelet、kube-proxy、nfs-client、nginx |
| Node02 | 10.168.1.165 | node | kubelet、kube-proxy、nfs-client、nginx |
| HA地址 | 10.168.1.160 | 公用master |
1.2 集群Linux主机介绍
- OracleLinux7.9 最小化安装、仅配置好IP、网关(模拟PRD环境,其余操作都是远程进行)
- 离线部署,但是需要配置DNS防止后续补丁升级
- 极限安装配置基线:2CPU、4GB
- docker数据目录不要定义到系统存储
- ansible的核心是清单和剧本
- ntp、dns与repo仓库使用外网地址,生产中替换为本地
1.3 ansible配置优化
grep -vE '^#|^$' /etc/ansible/ansible.cfg
[defaults]
host_key_checking = False #忽略指纹
deprecation_warnings = False #忽略回显警告
interpreter_python = auto_legacy_silent #忽略警告
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]
2. OS环境初始化
2.1 主机清单文件布局
- ansible_ssh_user=账户 ansible_ssh_pass='密码' #使用密码账户作为验证凭据
#以下命令会清空旧数据 注意备份!
cat > /etc/ansible/hosts << EOF
#etcd集群IP
[etcd]
10.168.1.161 hostname=etcd-01 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
10.168.1.162 hostname=etcd-02 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
10.168.1.163 hostname=etcd-03 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
#主节点IP
[kube_master]
10.168.1.161 hostname=mrzsir-master01 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
10.168.1.162 hostname=mrzsir-master02 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
10.168.1.163 hostname=mrzsir-master03 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
#控制节点IP
[kube_node]
10.168.1.164 hostname=mrzsir-node01 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
10.168.1.165 hostname=mrzsir-node02 ansible_ssh_user=root ansible_ssh_pass='Mrz*****'
EOF
2.2 OS初始化剧本
--- #yaml资源开头格式
- hosts: kube_master kube_node #主机组
remote_user: root
vars:
TEMP_DIR: templates
tasks: #任务组
- name: 修改主机名
raw: "echo {{hostname|quote}} > /etc/hostname"
- name: 刷新主机名
shell: hostname {{hostname|quote}}
- name: 关闭防火墙
service:
name: firewalld
state: stopped
enabled: no
- name: 临时关闭selinux
shell: "setenforce 0"
failed_when: false
- name: 永久关闭selinux
replace:
path: /etc/selinux/config
regexp: '^SELINUX=enforcing'
replace: 'SELINUX=disabled'
- name: 修改HOSTS
tags: cp-hosts
copy:
src: ./{{ TEMP_DIR }}/hosts #文件一定要在当前路径
dest: /etc
- name: 修改DNS
shell: echo "nameserver 119.29.29.29" >> /etc/resolv.conf && echo "nameserver 223.6.6.6" >> /etc/resolv.conf
- name: 创建repo备份目录
file:
dest: /etc/yum.repos.d/bak
state: directory
- name: 备份旧repo文件
copy: remote_src=True src=/etc/yum.repos.d/*ol7.repo dest=/etc/yum.repos.d/bak
ignore_errors: yes
- name: 模糊匹配旧repo文件-> files_to_delete
shell: mv /etc/yum.repos.d/*ol7.repo /etc/yum.repos.d/bak
ignore_errors: yes
- name: 下发新repo文件
tags: cp-repo
copy:
src: ./{{ TEMP_DIR }}/Centos-7.repo #文件一定要在当前路径
dest: /etc/yum.repos.d/Centos-7.repo
- name: 批量安装软件
yum: name={{item}} state=present
loop:
- vim
- ntpdate
- wget
- psmisc
- net-tools
- nfs-utils
- telnet
- yum-utils
- device-mapper-persistent-data
- lvm2
- git
- tar
- curl
- sysstat
# - iostat
# - iftop
# - iotp
- lrzsz
- ipvsadm
- ipset
- sysstat
- conntrack
- libseccomp
- name: 设置上海时区
shell: ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- name: 添加ntp同步计划任务
cron:
name: "ntp同步阿里云时间服务器"
hour: "1"
job: "ntpdate ntp.aliyun.com >/dev/null 2>&1"
state: present
- name: 刷新时间
shell: ntpdate ntp.aliyun.com
- name: 关闭交换分区
shell: sed -ri 's/.*swap.*/#&/' /etc/fstab && swapoff -a && sysctl -w vm.swappiness=0
- name: 内核设置-1
tags: set-limits
copy:
src: ./{{ TEMP_DIR }}/limits.conf #文件一定要在当前路径
dest: /etc/security/limits.conf
- name: 创建内核参数设置文件夹-1
file:
dest: /etc/modules-load.d
state: directory
- name: ipvs.conf配置
tags: set-limits
copy:
src: ./{{ TEMP_DIR }}/ipvs.conf #文件一定要在当前路径
dest: /etc/modules-load.d/ipvs.conf
- name: k8s.conf配置
tags: set-limits
copy:
src: ./{{ TEMP_DIR }}/k8s.conf #文件一定要在当前路径
dest: /etc/sysctl.d/k8s.conf
- name: 生效ipvs配置
service: name=systemd-modules-load state=restarted
- name: 生效sysctl
shell: sysctl --system
2.3 批量磁盘分区
#仅适用OracleLinux,自带数据状态校测,多次执行不影响已分区的磁盘数据,其它OS请自行测试
#分区完后必须手动重启服务器检查磁盘挂载状态
---
- hosts: kube_master kube_node
tasks:
- name: 创建新卷组
lvg:
vg: vg_data
pvs: /dev/sdb
- name: 创建逻辑卷并加入到卷组
lvol:
vg: vg_data
lv: lv_data
size: 100%VG #使用全部卷可用容量
resizefs: true #可以扩展
force: no #如果有数据,强制创建
state: present
- name: 格式化xfs文件系统
filesystem:
fstype: xfs
dev: /dev/vg_data/lv_data
- name: 挂载LV
mount:
path: /data #挂载点
src: /dev/vg_data/lv_data #挂载设备
fstype: xfs
state: mounted # 挂载
opts: defaults
转载请注明-MrZ-个人博客
THE END
1
二维码
海报
【自动化】基于ansible部署k8s1.29集群
Ansible-K8S-YAML编写指北
项目地址
1. 集群环境介绍
1.1 集群IP、角色软件规划
主机名称
IP地址
说明
软件
Master01
10.168.1.161
master
kube-apiserver、kube-controller-manager、kube-scheduler、etcd……
共有 0 条评论