Ansible一键部署Kubernetes集群

一、环境准备

主机

ip地址

角色

k8s-master

192.168.252.141

master

k8s-node1

192.168.252.142

node

k8s-node2

192.168.252.143

node

二、实战

Ansible部署

主节点安装Ansible

yum -y install epel-release
yum -y install ansible
ansible --version

开启记录日志

vim /etc/ansible/ansible.cfg  
修改:
#log_path = /var/log/ansible.log ==> log_path = /var/log/ansible.log

去掉第一次连接ssh ask确认

vim /etc/ansible/ansible.cfg  
修改:
#host_key_checking = False  ==> host_key_checking = False

配置主机清单

vim /etc/ansible/hosts
内容:
[master]
192.168.252.141
[node]
192.168.252.142
192.168.252.143[k8s:children]
master
node[k8s:vars]
ansible_ssh_user=root
ansible_ssh_pass=syh2025659
ansible_ssh_port=22k8s_version=1.20.2

测试连通性

ansible k8s -m ping

编排 Ansible playbook

mkdir /root/k8s-install-workspace
cd /root/k8s-install-workspace
mkdir -p ./install-k8s/{package,init,install-docker,install-k8s,master-init,install-cni,install-ipvs,master-join,node-join,install-ingress-nginx,install-nfs-provisioner,install-harbor,install-metrics-server,uninstall-k8s}/{files,templates,vars,tasks,handlers,meta,default}tips:
package目中放的是提前导入的jar包 下面脚本需要直接提前导入这样子更快

我的网盘链接:

通过百度网盘分享的文件:k8s-install-workspace

链接:百度网盘 请输入提取码

提取码:ruj1

提前将package目录中的包导入进去

节点初始化

cd /root/k8s-install-workspace
vim ./install-k8s/init/files/hosts
内容:
192.168.252.141 k8s-master
192.168.252.142 k8s-node1
192.168.252.143 k8s-node2

准备脚本

脚本思路:

修改主机名-->配置hosts解析-->配置秘钥互相通信(通过expect来发送指令)-->对时间进行同步-->关闭防火墙-->关闭swap分区-->关闭selinux-->iptables 检查桥接流量-->启用ipvs的所需模块

cd /root/k8s-install-workspace
vim ./install-k8s/init/templates/init.sh
内容:
#!/usr/bin/env bash### 【第一步】修改主机名
# 获取主机名
hostnamectl set-hostname $(grep `hostname -i` /tmp/hosts|awk '{print $2}')### 【第二步】配置hosts
# 先删除
for line in `cat /tmp/hosts`
dosed -i "/$line/d" /etc/hosts
done
# 追加
cat /tmp/hosts >> /etc/hosts### 【第三步】添加互信
# 先创建秘钥对
ssh-keygen -f ~/.ssh/id_rsa -P '' -q# 安装expect
yum -y install expect -y# 批量推送公钥
for line in `cat /tmp/hosts`
doip=`echo $line|awk '{print $1}'`
password={{ ansible_ssh_pass }}expect <<-EOFspawn ssh-copy-id -i /root/.ssh/id_rsa.pub $ip
expect {"(yes/no)?"{send "yes\n"expect "*assword:" { send "$password\n"}}"*assword:"{send "$password\n"}
}expect eof
EOF
done### 【第四步】时间同步
yum -y install ntpdate
ntpdate ntp.aliyun.com### 【第五步】关闭防火墙
systemctl stop firewalld
systemctl disable firewalld### 【第六步】关闭swap
# 临时关闭;关闭swap主要是为了性能考虑
swapoff -a
# 永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab### 【第七步】禁用SELinux
# 临时关闭
setenforce 0
# 永久禁用
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config### 【第八步】允许 iptables 检查桥接流量
sudo modprobe br_netfilter
lsmod | grep br_netfilter# 先删
rm -rf /etc/modules-load.d/k8s.confcat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOFsudo modprobe overlay
sudo modprobe br_netfilterrm -rf /etc/sysctl.d/k8s.conf# 设置所需的 sysctl 参数,参数在重新启动后保持不变
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF#加载模块
modprobe br_netfilter#加载⽹桥过滤及内核转发配置⽂件
sysctl -p /etc/sysctl.d/k8s.conf#配置ipvs功能
yum -y install ipset ipvsadmcat <<EOF > /etc/modules-load.d/ipvs.conf 
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack_ipv4
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOFcat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack
EOFchmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules# 应用 sysctl 参数而不重新启动
sudo sysctl --system

任务编排

将hosts发送给所有节点然后发送初始化节点的脚本然后进行执行

cd /root/k8s-install-workspace
vim ./install-k8s/init/tasks/main.yml
内容:
- name: cp hostscopy: src=hosts dest=/tmp/hosts
- name: init cptemplate: src=init.sh dest=/tmp/init.sh
- name: init installshell: sh /tmp/init.sh

安装docker

编写脚本

通过查询阿里云的安装docker-ce的方式进行安装docker然后配置加速器然后配置cgroup然后启动docker

cd /root/k8s-install-workspace
vim ./install-k8s/install-docker/files/install-docker.sh
内容:
#!/usr/bin/env bash# step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
yum makecache fast
yum -y install docker-ce
# Step 4: 开启Docker服务
systemctl start docker
systemctl enable docker
# 修改文件 /etc/docker/daemon.json,没有这个文件就创建
# 添加以下内容后,重启docker服务:
cat >/etc/docker/daemon.json<<EOF
{"registry-mirrors": ["https://hub.uuuadc.top","https://docker.anyhub.us.kg","https://dockerhub.jobcher.com","https://dockerhub.icu","https://docker.ckyl.me","https://docker.awsl9527.cn"],"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
# 重启
systemctl restart docker# 查看
systemctl status docker containerd

任务编排

将脚本发送至所有节点然后执行脚本

cd /root/k8s-install-workspace
vim ./install-k8s/install-docker/tasks/main.yml
内容:
- name: install docker cpcopy: src=install-docker.sh dest=/tmp/install-docker.sh
- name: install dockershell: sh /tmp/install-docker.sh

安装k8s并提前将镜像导入

检查k8s是否安装安装好的话直接下一步,阿里云上找repo源然后进行安装,可以更改版本下面的版本,然后将准备好的镜像tar包进行导入就可以了。

cd /root/k8s-install-workspace
vim ./install-k8s/install-k8s/templates/install-k8s.sh
内容:
#!/usr/bin/env bash# 检查是否已经安装
yum list installed kubelet
if [ $? -eq 0 ];thenexit 0
ficat > /etc/yum.repos.d/kubernetes.repo <<EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOFyum install -y kubelet-1.20.2-0.x86_64 kubeadm-1.20.2-0.x86_64 kubectl-1.20.2-0.x86_64DOCKER_CGROUPS=`docker info |grep 'Cgroup' | awk ' NR==1 {print $3}'`cat > /etc/sysconfig/kubelet<<EOF
KUBELET_EXTRA_ARGS="--cgroup-driver=$DOCKER_CGROUPS --pod-infra-container-image=k8s.gcr.io/pause:3.2"
EOFsystemctl daemon-reload
systemctl enable kubelet && systemctl restart kubelet
systemctl is-active kubelet#导入镜像
docker load < /tmp/kube-apiserver.tar
docker load < /tmp/kube-proxy.tar
docker load < /tmp/kube-controller-manager.tar
docker load < /tmp/kube-scheduler.tar
docker load < /tmp/etcd.tar
docker load < /tmp/pause.tar
docker load < /tmp/coredns.tar
docker load < /tmp/calico-cni.tar
docker load < /tmp/calico-kube-controller.tar
docker load < /tmp/calico-node.tar
docker load < /tmp/calico-pod.tar

任务编排

将tar包和执行脚本发送到各个节点的临时目录然后执行脚本

cd /root/k8s-install-workspace
vim ./install-k8s/install-k8s/tasks/main.yml
内容:
- name: copy tarISOcopy: src=/root/k8s-install-workspace/install-k8s/package/ dest=/tmp/        #这个我是把提前准备好的包放到package里面了
- name: install k8s cp  template: src=install-k8s.sh dest=/tmp/install-k8s.sh
- name: install k8sshell: sh /tmp/install-k8s.sh

初始化k8s-master并应用网络插件

编写脚本

在主节点进行初始化然后将目录创建好然后从网上拉取calico的yml文件然后进行应用

cd /root/k8s-install-workspace
vim ./install-k8s/master-init/templates/master-init.sh
内容:
#!/usr/bin/env bash# 判断是否已经初始化了
kubectl get nodes |grep -q `hostname` 1>&2 >/dev/null
if [ $? -eq 0 ];thenexit 0
fiip=`hostname -i`kubeadm init --kubernetes-version=v1.20.2 --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=$iprm -rf $HOME/.kube
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/configcurl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -Okubectl apply -f calico.yaml

任务编排

将脚本发送到master节点进行执行即可

cd /root/k8s-install-workspace
vim ./install-k8s/master-init/tasks/main.yml
内容:
- name: k8s master init cptemplate: src=master-init.sh dest=/tmp/master-init.sh
- name: k8s master initshell: sh /tmp/master-init.sh

node节点加入k8s集群

通过ssh命令获取主节点初始化后的node加入集群节点的命令在node节点上执行进行node节点加入集群

cd /root/k8s-install-workspace
vim ./install-k8s/node-join/files/node-join.sh
内容:
#!/usr/bin/env bash# 获取master ip,假设都是第一个节点为master
maser_ip=`head -1 /tmp/hosts |awk '{print $1}'`# 判断节点是否加入
ssh $maser_ip "kubectl get nodes|grep -q `hostname`"
if [ $? -eq 0 ];thenexit 0
fi`ssh $maser_ip kubeadm token create --print-join-command`

任务编排

将脚本发送到所有node节点

cd /root/k8s-install-workspace
vim ./install-k8s/node-join/tasks/main.yml
内容:
- name: node join cpcopy: src=node-join.sh dest=/tmp/node-join.sh
- name: node joinshell: sh /tmp/node-join.sh

k8s 环境安装编排 roles

进行角色编排

cd /root/k8s-install-workspace
vim ./install-k8s/install-k8s.yaml
内容:
- hosts: k8sremote_user: rootroles:- init
- hosts: k8sremote_user: rootroles:- install-docker
- hosts: k8sremote_user: rootroles:- install-k8s
- hosts: masterremote_user: rootroles:- master-init
- hosts: noderemote_user: rootroles:- node-join

启用剧本

cd /root/k8s-install-workspace/install-k8s
ansible-playbook  install-k8s.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/18532.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Comfy UI Manager 自定义节点管理

在 Stable Diffusion Web UI 中&#xff0c;可以通过插件的方式&#xff0c;扩展更多的功能&#xff0c;如&#xff1a;tagger提示词反推、ControlNet 等。 同样的在 Comfy UI 中有类似的功能实现&#xff0c;不过在 Comfy UI 中叫做自定义节点。 通过安装自定义节点的方式&a…

第二十周:机器学习

目录 摘要 ABSTRACT 一、吴恩达机器学习exp2——逻辑回归 1、logistic函数 2、数据预处理 3、损失函数 4、梯度下降 5、设定评价指标 6、决策边界 7、正则化 二、动手深度学习pytorch——数据预处理 1、数据集读取 2、缺失值处理 3、转换为张量格式 总结 摘要…

从人-物到人-机再到人-AI

从 人-物 到 人-机 再到 人-AI &#xff0c;这一演化过程展现了人类与技术、工具的互动方式随着时代的发展而发生的深刻变化。这一变化不仅是技术进步的体现&#xff0c;更是社会、文化以及工作方式的根本转变。以下是这一演变的主要特点及其背后的影响&#xff1a; 1. 人-物时…

go-zero(三) 数据库操作

go-zero 数据库操作 在本篇文章中&#xff0c;我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API&#xff0c;包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库&#xff0c;并创建user 表 …

【ASR技术】WhisperX安装使用

介绍 WhisperX 是一个开源的自动语音识别&#xff08;ASR&#xff09;项目&#xff0c;由 m-bain 开发。该项目基于 OpenAI 的 Whisper 模型&#xff0c;通过引入批量推理、强制音素对齐和语音活动检测等技术。提供快速自动语音识别&#xff08;large-v2 为 70 倍实时&#xf…

【C++ 算法进阶】算法提升十六

目录 背包问题变种 &#xff08;动态规划&#xff09;题目题目分析 连续可组成数字题目题目分析 min-patches题目 最小补丁问题题目分析代码 逆序对个数 &#xff08;归并排序&#xff09;题目题目分析 约瑟夫环问题 &#xff08;公式&#xff09;题目题目分析 背包问题变种 &a…

链表的基本操作

链表&#xff0c;由若干个结点组成&#xff0c;每个结点包含数据域和指针域。结点结构如下图所示&#xff1a; 一般来讲&#xff0c;链表中只会有一个结点的指针域为空&#xff0c;该结点为尾结点&#xff0c;其他结点的指针域都会存储一个结点的内存地址。链表中也只会有一个结…

C#高级:Winform中的自定义窗体输入

目录 一、多样式输入&#xff08;无封装&#xff09; 1.代码 2.效果 二、单输入框封装 1.使用 2.封装 3.效果 三、组合框批量输入封装 1.使用 2.封装 3.效果 一、多样式输入&#xff08;无封装&#xff09; 1.代码 private async void button1_Click(object send…

memblock内存分配器

一、简述 memblock 是 Linux 内核中的一个内存管理子系统&#xff0c;主要用于在系统启动早期阶段管理物理内存。它在内核初始化期间负责管理内存&#xff0c;直到更复杂的内存管理子系统&#xff08;如伙伴系统&#xff09;接管。 二、工作原理 初始化&#xff1a;在内核启…

【C++滑动窗口】1248. 统计「优美子数组」|1623

本文涉及的基础知识点 C算法&#xff1a;滑动窗口及双指针总结 LeetCode1248. 统计「优美子数组」 给你一个整数数组 nums 和一个整数 k。如果某个连续子数组中恰好有 k 个奇数数字&#xff0c;我们就认为这个子数组是「优美子数组」。 请返回这个数组中 「优美子数组」 的数…

⽂件内容的读写

文件 InputStream &#xff08;字节流读出 抽象类&#xff09; InputStream 只是⼀个抽象类&#xff0c;要使⽤还需要具体的实现类 FileInputStream&#xff08;字节流读出&#xff09; OutputStream&#xff08;字节流写入&#xff09; Reader&#xff08;字符流读入&#xff…

FreeRTOS消息队列实验与出现的问题

目录 实验名字&#xff1a;队列操作实验 1、实验目的 2、实验设计 3、实验工程 4、实验程序与分析 ●任务设置 ● 其他应用函数 ● main()函数 ● 任务函数 ●中断初始化及处理过程 5.程序运行结果分析 6.进行实验移植时所遇到的问题 1.项目中mymalloc等函数缺少 …

el-cascader 使用笔记

1.效果 2.官网 https://element.eleme.cn/#/zh-CN/component/cascader 3.动态加载&#xff08;官网&#xff09; <el-cascader :props"props"></el-cascader><script>let id 0;export default {data() {return {props: {lazy: true,lazyLoad (…

Linux之进程概念(2)

Linux之进程概念&#xff08;2&#xff09; 孤儿进程 父进程如果提前退出&#xff0c;那么子进程后退出&#xff0c;进入Z之后&#xff0c;那该如何处理呢&#xff1f; 父进程先退出&#xff0c;子进程就称之为“孤儿进程” 孤儿进程被1号init进程领养&#xff0c;当然要有in…

1+X应急响应(网络)日志分析:

日志分析&#xff1a; Web日志分析&#xff1a; http协议&#xff1a; http版本演变&#xff1a; http协议工作原理&#xff1a; http协议的特点&#xff1a; http请求报文&#xff1a; http请求方法&#xff1a; http响应报文&#xff1a; UserId&#xff1a;注册网站的序列号…

go-zero(二) api语法和goctl应用

go-zero api语法和goctl应用 在实际开发中&#xff0c;我们更倾向于使用 goctl 来快速生成代码。 goctl 可以根据 api快速生成代码模板&#xff0c;包括模型、逻辑、处理器、路由等&#xff0c;大幅提高开发效率。 一、构建api demo 现在我们通过 goctl 创建一个最小化的 HT…

计算机编程中的设计模式及其在简化复杂系统设计中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的…

latex中,两个相邻的表格,怎样留一定的空白

目录 问题描述 问题解决 问题描述 在使用latex写论文时&#xff0c;经常表格需要置顶写&#xff0c;则会出现两个表格连在一起的情况。下一个表名容易与上面的横线相连&#xff0c;如何通过明令&#xff0c;留出一定的空白。 问题解决 在第二个表格的 \centering命令之后…

leetcode01——合并两个有序数组

0.本题学到的知识 1.python的操作中&#xff0c;哪些是在原数据上进行操作的&#xff1f; 新开辟的行为&#xff1a;list1list1[m:n] 原数据&#xff1a;list1[a:b]list1[m:n] 新开辟&#xff1a;list1list1list2 原数据&#xff1a;list1.append(list2[i]); list1.extend(list…

深度学习的艺术:揭秘卷积神经网络(CNN)的神秘面纱

深度学习的艺术&#xff1a;揭秘卷积神经网络&#xff08;CNN&#xff09;的神秘面纱 一、CNN的构成要素二、CNN的工作流程三、CNN的应用领域四、CNN的优势与局限 #引言&#xff1a; 在人工智能的璀璨星空中&#xff0c;卷积神经网络&#xff08;CNN&#xff09;如同一颗耀眼的…