K8S系列文章 之 编写自动化部署K8S脚本

介绍

通过ansible脚本+shell实现自动化部署k8s基础集群(v1.25.0)

部署结构

1. 通过二进制部署包镜像安装k8s集群、目录etcd节点只支持1-3个节点、最多三个etcd节点

2. 因k8s版本相对较新、需要升级内核来支持后台程序、当前版本只支持Cento7,内核版本(5.19.4-1.el7.elrepo.x86_64)

3. 采用k8s二进制安装,通过system进行管理,采用本地yum仓库,版本是:1.25.0

4. 部署节点安装docker的yum源是基于Centos7.5/7.6,版本是:19.03.14

5. 部署节点安装ansible时,使用离线安装,版本:2.9.27

操作步骤

环境准备

作用IP地址操作系统配置
k8s-node01 192.168.59.143CentOS7最低配置2C2G
k8s-master01192.168.59.142CentOS7最低配置2C2G
ansible192.168.59.144CentOS7最低配置1C1G
  • node节点可以填写多个,根据实际情况确认,但是不能超出单master节点的限制
  • master节点至少是三个少一个都不是高可用版本
  • 高可用部署时需要为keepalived提前确认好vip的信息

备注

  • 单独找一台机器用于部署ansible服务,升级内核时需要重启服务器
  • 部署节点部署重启,否则会导致执行报错
  • 但是需要确保机器资源充足,且相关的端口不会冲突(38081【yum】、38082【registry】)
  • 相关的网络关系需要提前确认

关闭swap 

swapoff -a  # 临时 
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久 
echo "关闭swap  !" 

配置静态IP 参考下面命令

echo "配置静态IP"
cat >> /etc/sysconfig/network-scripts/ifcfg-ens33 << EOF 
IPADDR=192.168.59.143
NETMASK=255.255.255.0 
GATEWAY=192.168.59.2
DNS1=8.8.8.8
EOFsed -i 's/dhcp/static/' /etc/sysconfig/network-scripts/ifcfg-ens33
cat /etc/sysconfig/network-scripts/ifcfg-ens33
systemctl restart network

配置部署Ansible 免密登录到其他所有机器

ssh-keygen ssh-copy-id root@192.168.59.142ssh-copy-id root@192.168.59.143

解压部署包

#上传部署包(xshell)
yum -y install lrzsz 
rz install_k8s_binary_20220905.tar.gz
#解压
tar -xvf install_k8s_binary_20220905.tar.gz -C /opt

修改host文件

#部署机器,初始脚本、安装包镜像
[deploy_server]
192.168.59.144 ansible_user="root" ansible_ssh_pass="1234567"  ansible_ssh_port=22 hostname="Ansible"#apiserver、controller、scheduler
[kubernetes_master]
192.168.59.142 ansible_user="root" ansible_ssh_pass="1234567"  ansible_ssh_port=22  hostname="k8s-master01"#kubelet、proxy
[kubernetes_node]
192.168.59.143 ansible_user="root" ansible_ssh_pass="1234567"  ansible_ssh_port=22  hostname="k8s-node01"#单节点或者三节点其他的暂时不支持
[etcd]
192.168.59.142 ansible_user="root" ansible_ssh_pass="1234567"  ansible_ssh_port=22 ETCD_NAME="k8s-master01"#不填写,则不安装镜像仓库
[docker_repositry]
#192.168.1.136 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-node01"#双节点
[haproxy_keepalived]
#192.168.1.12 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-haproxy"
#192.168.1.12 ansible_user="root" ansible_ssh_pass="1"  ansible_ssh_port=22 hostname="k8s-haproxy"[nodes:children]
kubernetes_master
kubernetes_node
haproxy_keepalived
etcd[all:vars]
#interface="ens33"              #部署机器的网卡名称
#高可用
master_vip="192.168.59.142"#布尔值 true or false
install_kubelet_enable="true"  #master节点是否安装kubelet、kube-proxy  
network_enable="false"         #联网状态下,加载网络yum仓库
Basic_enable="true"            #安装基础软件包    
clear_cert_data="false"        #清理上一次生成的证书及清理cfssl的安装包#k8s 组件服务
dashboard_enable="false"       #安装dashboard服务
prometheus_enable="false"      #安装Prometheus服务
ingress_enable="false"         #安装ingress服务

初始化环境

[root@registry]# cd /opt/install_k8s_binary[root@registry install_k8s_binary]# sh Run.sh1) 初始化环境(ansible))2) 安装k8s集群(v1.25.0)(二进制)----------------------------------------------------------------------------请输入对应的数字编号:1请输入部署机的地址(192.168.59.144):#部署机的地址,通过脚本获取的地址,确认无误后直接回车即可

执行结果

安装docker服务安装ansible服务,修改ansible.cfg配置准备离线yum仓库挂载点是:部署包的下的yum目录准备离线registry仓库,相关挂载点是: /var/images/

安装k8s集群

登录部署机器上执行Run.sh脚本

执行结果如下:

登录master的节点

因本地虚拟机限制,目前使用单节点测试部署,一主一从的也测试可行高可用版本尚未测试

部署包下载

链接: https://pan.baidu.com/s/1-_yDvPnE7Jt167S_9IzWzw?pwd=egwf

提取码: egwf 

  • 目前版本,后续会更新
  • 初始化环境时,如果启动报错,出现…iptable…的字段这可以重新执行一次初始化即可正常启动
  • 目前containerd的镜像仓库配置的是初始化的地址,如果需要使用k8s集群,则需要手动修改containerd的配置文件<自行百度添加>(后续优化

部署验证模板案例

K8S 使用deployment 部署nginx服务
# cat deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: my-nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:latestports:- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:name: ngx-servicelabels:app: nginx
spec:type: NodePortselector:app: nginxports:- port: 80targetPort: 80nodePort: 32500

创建deploy

# kubectl apply -f deploy.yaml 
deployment.apps/nginx-deploy created
service/ngx-service created

查看pod及svc服务

[root@k8s-master01 home]# kubectl get pod,svc
NAME                           READY   STATUS    RESTARTS   AGE
pod/my-nginx-cd55c47f5-5z7pr   1/1     Running   0          2m20s
pod/my-nginx-cd55c47f5-dw8qk   1/1     Running   0          2m20s
pod/my-nginx-cd55c47f5-qqrjl   1/1     Running   0          2m20sNAME                  TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
service/kubernetes    ClusterIP   10.96.0.1      <none>        443/TCP        54m
service/ngx-service   NodePort    10.106.47.18   <none>        80:32500/TCP   2m20s
[root@k8s-master01 home]# 

浏览器访问地址:ip:32500,正常即可.

总结

上述则是当前部署中可运行正常的服务执行Run.sh 输入init,则可以调试脚本,对应的启动文件,修改,则可以进行调试(playbook/tools/deploy_test.yaml)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg+nginx实现rtsp协议摄像头web端播放

ffmpegnginx实现rtsp协议摄像头web端播放 环境准备准备nginx环境添加rtmp模块添加hls转发 使用ffmpeg&#xff0c;将摄像头rtsp转为rtmp并推送到nginxVLC播放验证 环境准备 nginx&#xff08;需要安装rtmp模块&#xff09;ffmpeg 6.0vlc播放器&#xff08;本地播放验证&#x…

大数据课程H2——TELECOM的电信流量项目实现

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解TELECOM项目的数据收集&#xff1b; ⚪ 了解TELECOM项目的数据清洗&#xff1b; ⚪ 了解TELECOM项目的数据导出&#xff1b; ⚪ 了解TELECOM项目的数据可视化&…

观察者模式(C++)

定义 定义对象间的一种一对多(变化)的依赖关系&#xff0c;以便当一个对象(Subject)的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并自动更新。 ——《设计模式》GoF 使用场景 一个对象&#xff08;目标对象&#xff09;的状态发生改变&#xff0c;所有的依赖对…

SpringBoot第33讲:SpringBoot集成ShardingJDBC - 基于JPA的读写分离

SpringBoot第33讲&#xff1a;SpringBoot集成ShardingJDBC - 基于JPA的读写分离 本文是SpringBoot第33讲&#xff0c;主要介绍分表分库&#xff0c;以及SpringBoot集成基于 ShardingJDBC 的读写分离实践 文章目录 SpringBoot第33讲&#xff1a;SpringBoot集成ShardingJDBC - 基…

uni-app:实现点击按钮出现底部弹窗(uni.showActionSheet+自定义)

一、通过uni.showActionSheet实现底部选择 效果 代码 <template><view><button click"showActionsheet">点击打开弹窗</button></view> </template><script> export default {methods: {showActionsheet() {uni.showAct…

消息队列项目(2)

我们使用 SQLite 来进行对 Exchange, Queue, Binding 的硬盘保存 对 Message 就保存在硬盘的文本中 SQLite 封装 这里是在 application.yaml 中来引进对 SQLite 的封装 spring:datasource:url: jdbc:sqlite:./data/meta.dbusername:password:driver-class-name: org.sqlite.…

Python 中的机器学习简介:多项式回归

一、说明 多项式回归可以识别自变量和因变量之间的非线性关系。本文是关于回归、梯度下降和 MSE 系列文章的第三篇。前面的文章介绍了简单线性回归、回归的正态方程和多元线性回归。 二、多项式回归 多项式回归用于最适合曲线拟合的复杂数据。它可以被视为多元线性回归的子集。…

APP外包开发的学习流程

学习iOS App的开发是一项有趣和富有挑战性的任务&#xff0c;是一个不断学习和不断进步的过程。掌握基础知识后&#xff0c;不断实践和尝试新的项目将使您的技能不断提升。下面和大家分享一些建议&#xff0c;可以帮助您开始学习iOS App的开发。北京木奇移动技术有限公司&#…

DAY02_Spring—第三方资源配置管理Spring容器Spring注解开发Spring整合Mybatis和Junit

目录 一 第三方资源配置管理1 管理DataSource连接池对象问题导入1.1 管理Druid连接池1.2 管理c3p0连接池 2 加载properties属性文件问题导入2.1 基本用法2.2 配置不加载系统属性2.3 加载properties文件写法 二 Spring容器1 Spring核心容器介绍问题导入1.1 创建容器1.2 获取bean…

软件架构师思维塑造

一、软件系统设计的六项原则 1、单一职责原则&#xff08;Single Responsibility Principle&#xff09; 2、开闭原则&#xff08;Open Closed Principle&#xff09; 3、里氏替换原则&#xff08;Liskov Substitution Principle&#xff09; 4、迪米特法则&#xff08;Law of …

微服务 云原生:基于 Gogs + Drone 进行项目 CI/CD

传统构建部署 以一个简单的前后端项目来说&#xff0c;分别编写前后端的 Dockerfile 文件并构建镜像&#xff0c;然后编写 docker-compose.yml 构建部署&#xff0c;启动运行。 一个简单的例子&#xff1a; 前端&#xff1a; 项目名&#xff1a;kubemanagement-web技术栈&am…

Java中Date方法详解

先进行专栏介绍 本专栏是自己学Java的旅途&#xff0c;纯手敲的代码&#xff0c;自己跟着黑马课程学习的&#xff0c;并加入一些自己的理解&#xff0c;对代码和笔记 进行适当修改。希望能对大家能有所帮助&#xff0c;同时也是请大家对我进行监督&#xff0c;对我写的代码进行…

eeglab(自用)

目录 1.加载、显示数据 2.绘制脑电头皮图 3.绘制通道光谱图 4.预处理工具 5.ICA去除伪迹 5. 提取数据epoch 1.加载、显示数据 观察事件值(Event values)&#xff1a;该数据集中包含2400个事件&#xff0c;每个事件指定了EEG.event结构的字段Type(类型)、position(位置)和…

【Linux命令详解 | cat命令】Linux系统中用于显示或连接文件的命令

文章标题 简介一&#xff0c;参数列表二&#xff0c;使用介绍1. 显示文件内容2. 创建文件3. 连接文件4. 显示行号5. 压缩空行6. 显示特殊字符7. 显示行号和特殊字符8. 从标准输入读取9. 显示文件开头或结尾10. 备份文件11. 显示文件内容至多屏幕大小12. 转义正则表达式13. 显示…

java文件

一.File类 二.扫描指定目录&#xff0c;并找到名称中包含指定字符的所有普通文件&#xff08;不包含目录&#xff09;&#xff0c;并且后续询问用户是否要删除该文件 我的代码: import java.io.File; import java.io.IOException; import java.util.Scanner;public class Tes…

瑞芯微RK3568核心板-4G联网测试

​ &#x1f308;引言 RK3568是瑞芯微针对AIOT和工业市场推出的一款高性能、低功耗、功能丰富的应用处理器。它采用了四核ARM架构64位Cortex-A55处理器&#xff0c;主频高达2.0GHz&#xff0c;集成瑞芯微自研1TOPS算力NPU, 同时集成Mali-G52 2EE GPU&#xff0c;支持4K60fps …

React Native连接Zebra斑马打印机通过发送CPCL指令打印(Android 和 iOS通用)

自 2015 年发布以来&#xff0c;React Native 已成为用于构建数千个移动应用程序的流行跨平台移动开发框架之一。通常&#xff0c;我们有开发人员询问如何将 Link-OS SDK 与 React Native 应用程序集成&#xff0c;以便在 Zebra 打印机上打印标签。在本教程中&#xff0c;我们将…

深度学习常用的激活函数

深度学习的核心思想是通过多层次的神经网络结构&#xff0c;逐步抽取和表示数据中的高级特征&#xff0c;从而实现对复杂数据模式的学习和识别。 神经网络结构&#xff1a; 深度学习使用多层次的神经网络&#xff0c;包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习…

一、Webpack相关(包括webpack-dev-server用以热更新和html-webpack-plugin)

概念与功能&#xff1a; webpack是前端项目工程化的具体解决方案。它提供了友好的前端模块化开发支持&#xff0c;以及代码压缩混淆、处理浏览器端JavaScript的兼容性、性能优化等强大的功能。 快速上手&#xff1a;隔行变色 -S实际是--save的简写&#xff0c;表示安装的第三方…

以太网DHCP协议(十)

目录 一、工作原理 二、DHCP报文 2.1 DHCP报文类型 2.2 DHCP报文格式 当网络内部的主机设备数量过多是&#xff0c;IP地址的手动设置是一件非常繁琐的事情。为了实现自动设置IP地址、统一管理IP地址分配&#xff0c;TCPIP协议栈中引入了DHCP协议。 一、工作原理 使用DHCP之…