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.hqwc.cn/news/54628.html

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

相关文章

管理类联考——写作——论说文——实战篇——行文篇——通用性强,解释多种现象的经典理论——析原因

前言 本节内容涉及“经济人假设”“自利性偏差”“机会成本”“沉没成本”“信息不对称”“科斯定理”“路径依赖”等理论。这些理论一般用在“现象分析式结构”中“析原因”的部分。 有时候也可以反过来使用&#xff0c;用于“提建议”的部分。 例如&#xff1a; 合作中&…

UML-构件图

目录 1.概述 2.构件的类型 3.构件和类 4.构件图 1.概述 构件图主要用于描述各种软件之间的依赖关系&#xff0c;例如&#xff0c;可执行文件和源文件之间的依赖关系&#xff0c;所设计的系统中的构件的表示法及这些构件之间的关系构成了构件图 构件图从软件架构的角度来描述…

【力扣每日一题】2023.8.5 合并两个有序链表

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们两个有序的链表&#xff0c;要我们保持升序的状态合并它们。 我们可以马上想要把两个链表都遍历一遍&#xff0c;把所有节点的…

Rocky(centos) jar 注册成服务,能开机自启动

概述 涉及&#xff1a;1&#xff09;sh 无法直接运行java命令&#xff0c;可以软连&#xff0c;此处是直接路径 2&#xff09;sh脚本报一堆空格换行错误&#xff1a;需将转成unix标准格式&#xff1b; #切换到上传的脚本路径 dos2unix 脚本文件名.sh 2&#xff09;SELINUX …

[openCV]基于拟合中线的智能车巡线方案V2

import cv2 as cv import os import numpy as np# 遍历文件夹函数 def getFileList(dir, Filelist, extNone):"""获取文件夹及其子文件夹中文件列表输入 dir&#xff1a;文件夹根目录输入 ext: 扩展名返回&#xff1a; 文件路径列表"""newDir d…

【rust/入门】windows安装rust gnu环境(折腾)

说在前面 首先说明&#xff0c;我是rust入门选手&#xff0c;之前都是在wsl写rust&#xff0c;突然想在windows下装下rust。windows版本&#xff1a;windows11 22H2原文换源 心路历程 看到教程我陷入了沉默&#xff0c;(官方推荐) 打开Microsoft C Build Tools我开始不解&…

iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

手边有一闲置的linux开发板iMX6ULL一直在吃灰&#xff0c;不用来搞点事情&#xff0c;总觉得对不住它。业余打发时间就玩起来吧&#xff0c;总比刷某音强。从某多多上买来一个usb接口的游戏手柄&#xff0c;让开发板支持以下它&#xff0c;后续就可以接着在上面玩童年经典游戏啦…

MyBatis查询数据库之一(概念+创建项目+基础交互)

目录 1.MyBatis是什么&#xff1f; 2.为什么学习MyBatis&#xff1f; 3. 怎么学 MyBatis 4.第⼀个MyBatis查询 4.1 添加MyBatis框架支持 4.1.1老项目添加MyBatis 4.1.2 新项目添加MyBatis 4.2 配置连接字符串和MyBatis 4.2.1 配置连接字符串 4.2.2 配置 MyBatis 中的…

相机传感器格式与镜头光圈参数

相机靶面大小 CCD/CMOS图像传感器尺寸&#xff08;sensor format&#xff09;1/2’‘、1/3’‘、1/4’实际是多大 1英寸——靶面尺寸为宽12.7mm*高9.6mm&#xff0c;对角线16mm。 2/3英寸——靶面尺寸为宽8.8mm*高6.6mm&#xff0c;对角线11mm。 1/2英寸——靶面尺寸为宽6.…

基于RASC的keil电子时钟制作(瑞萨RA)(7)----配置RTC时钟及显示时间

基于RASC的keil电子时钟制作7_配置RTC时钟及显示时间 概述硬件准备视频教程RTC配置RTC属性配置设定时间设定周期性中断设定日历闹钟时间回调函数演示效果数码管显示日期主程序 概述 本文将详细讲解如何借助e2studio来对瑞萨微控制器进行实时时钟&#xff08;RTC&#xff09;的…

xcode 的app工程与ffmpeg 4.4版本的静态库联调,ffmpeg内下的断点无法暂停。

先阐述一下我的业务场景&#xff0c;我有一个iOS的app sdk项目&#xff0c;下面简称 A &#xff0c;以及运行 A 的 app 项目&#xff0c;简称 A demo 。 引用关系为 A demo 引用了 A &#xff0c;而 A 引用了 ffmpeg 的静态库&#xff08;.a文件&#xff09;。此时业务出现了 b…

elementUi el-radio神奇的:label与label不能设置默认值

问题&#xff1a;最近项目遇到一个奇葩的问题&#xff1a;红框中列表的单选按钮无法根据需求设置默认选中&#xff0c;但是同样是设置开启状态的单选框可以设置默认状态 原因&#xff1a;开始同样是和开启/关闭状态一样也把红框中列表的默认值设置为数字模式&#xff0c;但是由…