当前位置: 首页 > news >正文

centos7搭建k8s环境并部署springboot项目

之前看了很多文章,都是部署后一直报错,百度解决后下次又忘了,这次决定把从头到尾的过程记录下来方便下次再看,部署参考文章尚硅谷Kubernetes(k8s)视频学习笔记_尚硅谷k8s笔记_溯光旅者的博客-CSDN博客

1、先去下载vmware虚拟机安装,我安装的是这个版本VMware Workstation 16 Player

2、去阿里云网站下载centos7镜像

centos-7-isos-x86_64安装包下载_开源镜像站-阿里云

3、新增两台虚拟机用来部署,创建步骤都是一样的

wxsmaster  4G 4核  30G

wxsnode1  4G 4核  30G

 

这里点完成之后一直等待,直到系统创建成功 

 4、ifconfig命令查看ip后开始按顺序执行下面步骤,都整理好了

#设置主机名分别在wxsmaster执行和wxsnode1执行,设置完后用hostname可以查看名称
hostnamectl set-hostname wxsmaster
hostnamectl set-hostname wxsnode1#关闭防火墙,用systemctl status firewalld查看是否关闭
systemctl stop firewalld
systemctl disable firewalld#关闭 selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久
setenforce 0 # 临时#关闭 swap,关闭后用free -m命令查看是否关闭
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab    # 永久#时间同步,同步后可用date查看
yum install ntpdate -y
ntpdate time.windows.com#在 master 添加 hosts
cat >> /etc/hosts << EOF
192.168.254.135 wxsmaster
192.168.254.136 wxsnode1
EOF#将桥接的 IPv4 流量传递到 iptables 的链
cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl --system # 生效#安装docker
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.1.ce-3.el7
systemctl enable docker && systemctl start docker
docker --version#配置docker的驱动和阿里云加速器
cat > /etc/docker/daemon.json << EOF
{"exec-opts": ["native.cgroupdriver=systemd"],"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF#重新加载配置参数,重新启动docker服务,启动后用docker info | grep Cgrou 查看docker驱动是否为systemd
systemctl daemon-reload
systemctl restart docker#添加阿里云 YUM 软件源
cat > /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
EOF#安装 kubeadm, kubelet 和 kubectl
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
systemctl enable kubelet

5、初始化,只有wxsmaster执行这个命令,下面的apiserver-advertise-address值要改成master节点的ip

kubeadm init \--apiserver-advertise-address=192.168.254.135 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.18.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16

6、初始化完成后,拷贝出图片里面的命令,在wxsnode1节点执行

kubeadm join 192.168.254.135:6443 --token 23zsua.gsa9vwevq3ee3kdn \--discovery-token-ca-cert-hash sha256:eb3eba970a429129748ad936d859ac7694e7ea6ed5dc7c8cf5220c8a4d3061ed 

7、kubectl get nodes查看节点发现报错了 ,两台机器加入环境变量解决

#两台机器都加入环境变量
vim /etc/profile
export KUBECONFIG=/etc/kubernetes/admin.conf
source /etc/profile#wxsnode1节点加入后还是报错,缺少文件,需要从wxsmaster节点拷贝过来
scp root@192.168.254.135:/etc/kubernetes/admin.conf /etc/kubernetes

8、kubectl get nodes查看节点状态NotReady,用journalctl -xefu kubelet查看运行状态,发现报错了,需要安装Pod 网络插件( CNI)(只有wxsmaster主机安装)

 本地新增一个文件kube-flannel.yaml,贴入一下内容,或者去这个网址下载https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

---
kind: Namespace
apiVersion: v1
metadata:name: kube-flannellabels:pod-security.kubernetes.io/enforce: privileged
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
rules:
- apiGroups:- ""resources:- podsverbs:- get
- apiGroups:- ""resources:- nodesverbs:- list- watch
- apiGroups:- ""resources:- nodes/statusverbs:- patch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:name: flannel
roleRef:apiGroup: rbac.authorization.k8s.iokind: ClusterRolename: flannel
subjects:
- kind: ServiceAccountname: flannelnamespace: kube-flannel
---
apiVersion: v1
kind: ServiceAccount
metadata:name: flannelnamespace: kube-flannel
---
kind: ConfigMap
apiVersion: v1
metadata:name: kube-flannel-cfgnamespace: kube-flannellabels:tier: nodeapp: flannel
data:cni-conf.json: |{"name": "cbr0","cniVersion": "0.3.1","plugins": [{"type": "flannel","delegate": {"hairpinMode": true,"isDefaultGateway": true}},{"type": "portmap","capabilities": {"portMappings": true}}]}net-conf.json: |{"Network": "10.244.0.0/16","Backend": {"Type": "vxlan"}}
---
apiVersion: apps/v1
kind: DaemonSet
metadata:name: kube-flannel-dsnamespace: kube-flannellabels:tier: nodeapp: flannel
spec:selector:matchLabels:app: flanneltemplate:metadata:labels:tier: nodeapp: flannelspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/osoperator: Invalues:- linuxhostNetwork: truepriorityClassName: system-node-criticaltolerations:- operator: Existseffect: NoScheduleserviceAccountName: flannelinitContainers:- name: install-cni-plugin#image: flannelcni/flannel-cni-plugin:v1.1.0 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.0command:- cpargs:- -f- /flannel- /opt/cni/bin/flannelvolumeMounts:- name: cni-pluginmountPath: /opt/cni/bin- name: install-cni#image: flannelcni/flannel:v0.20.0 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.0command:- cpargs:- -f- /etc/kube-flannel/cni-conf.json- /etc/cni/net.d/10-flannel.conflistvolumeMounts:- name: cnimountPath: /etc/cni/net.d- name: flannel-cfgmountPath: /etc/kube-flannel/containers:- name: kube-flannel#image: flannelcni/flannel:v0.20.0 for ppc64le and mips64le (dockerhub limitations may apply)image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.0command:- /opt/bin/flanneldargs:- --ip-masq- --kube-subnet-mgrresources:requests:cpu: "100m"memory: "50Mi"limits:cpu: "100m"memory: "50Mi"securityContext:privileged: falsecapabilities:add: ["NET_ADMIN", "NET_RAW"]env:- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: POD_NAMESPACEvalueFrom:fieldRef:fieldPath: metadata.namespace- name: EVENT_QUEUE_DEPTHvalue: "5000"volumeMounts:- name: runmountPath: /run/flannel- name: flannel-cfgmountPath: /etc/kube-flannel/- name: xtables-lockmountPath: /run/xtables.lockvolumes:- name: runhostPath:path: /run/flannel- name: cni-pluginhostPath:path: /opt/cni/bin- name: cnihostPath:path: /etc/cni/net.d- name: flannel-cfgconfigMap:name: kube-flannel-cfg- name: xtables-lockhostPath:path: /run/xtables.locktype: FileOrCreate

用xftp将这个文件传入master某个目录,我是这个

 安装命令:kubectl apply -f kube-flannel.yaml,安装完后状态变ready了

 9、本地打包springboot的jar包,本地最好java -jar启动一下看是否能成功,不然后面报错找问题找半天(经验之谈)

 10、去阿里云服务器新增命名空间和镜像仓库

 11、创建完后上传jar包到虚拟机,用上图第3步骤将docker生成的镜像上传到阿里云服务器

#创建Dockerfile,并上传jar包到里面配置目录
vim Dockerfile
#输入下面内容
FROM openjdk:8-jdk-alpine
ADD wxstest.jar /home/wxs/wxstest/wxstest.jar
ENTRYPOINT ["java", "-jar", "/home/wxs/wxstest/wxstest.jar"]#制作镜像
docker build -t wxstest:1.0.0 .#查看镜像
docker images#重命名镜像
docker tag 30a9f619627f registry.cn-hangzhou.aliyuncs.com/wxsnamespace/wxstest:1.0.0#推送到阿里云仓库
docker push registry.cn-hangzhou.aliyuncs.com/wxsnamespace/wxstest:1.0.0#拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/wxsnamespace/wxstest:1.0.0#先用docker部署下看看是否成功,不然后面报错要重搞好久
docker run -d -p 8088:8088 registry.cn-hangzhou.aliyuncs.com/wxsnamespace/wxstest:1.0.0 -t 

12、创建应用,我的目录是/home/wxs/wxstest

#创建应用
kubectl create deployment  wxstest --image=registry.cn-hangzhou.aliyuncs.com/wxsnamespace/wxstest:1.0.0
#删除命令kubectl delete deployment wxstest#把上面打印出来的内容保存到 wxstest.yaml中,并执行下面命令,执行完后用这个命令看是否成功kubectl get deployments
kubectl expose deployment wxstest --port=8088 --target-port=8088 --type=NodePort
#删除命令kubectl delete svc wxstest#查看应用
kubectl get services#本机访问看是否能正常返回页面
curl http://10.100.143.1:8088/mylogin.html#查看容器名称
kubectl get pods -o wide#查看容器日志
kubectl logs -f wxstest-64686ddd65-dhvtc

13、外网请求虚拟机地址看看

http://192.168.254.135:32057/mylogin.html

http://192.168.254.136:32057/mylogin.html

14、重启了虚拟机后发现两台机器ip地址变了,需要改成静态ip,配置从本机拿

 

#进入配置文件
vi /etc/sysconfig/network-scripts/ifcfg-ens33 #改成如下配置,有的不需要改
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="285c38d7-6392-478d-ba1d-131066ba5e4d"
DEVICE="ens33"
ONBOOT="yes"IPADDR="192.168.254.135"
NETMASK="255.255.255.0"
GATEWAY="192.168.254.2"
DNS1="8.8.8.8"#重启
reboot

15、完事了~~ 

相关文章:

centos7搭建k8s环境并部署springboot项目

之前看了很多文章&#xff0c;都是部署后一直报错&#xff0c;百度解决后下次又忘了&#xff0c;这次决定把从头到尾的过程记录下来方便下次再看&#xff0c;部署参考文章尚硅谷Kubernetes&#xff08;k8s&#xff09;视频学习笔记_尚硅谷k8s笔记_溯光旅者的博客-CSDN博客 1、…...

nuitka打包软件程序

将python代码打包成exe桌面程序 1、打包参数含义 """-–mingw64 默认为已经安装的visio stdio去编译-–standalone 独立环境&#xff0c;这是必须的(否则拷给别人无法使用)-–windows-disable-console 没有CMD控制窗口-–output-dirout 生成exe到out文件夹下面…...

12-3_Qt 5.9 C++开发指南_创建和使用静态链接库

第12章中的静态链接库和动态链接库介绍&#xff0c;都是以UI操作的方式进行&#xff0c;真正在实践中&#xff0c;可以参考UI操作产生的代码来实现同样的功能。 文章目录 1. 创建静态链接库1.1 创建静态链接库过程1.2 静态链接库代码1.2.1 静态链接库可视化UI设计框架1.2.2 qw…...

conda模式安装paddlepaddle2.4.2版本

conda模式安装paddlepaddle2.4.2版本 一、下载anaconda 2022.10 window-x86-x64.exe 清华镜像源Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror&#xff0c;进去后根据自己的需要选择对应的版本下载 下载安装到磁盘空闲空间要大的D:\Pr…...

英语疑问句

文章目录 一般疑问句特殊疑问句 一般疑问句 英语肯定句怎么改成一般疑问句&#xff1f; 1.假如句子中有"情态动词、助动词、be动词"则直接提前。2.假如句子&#xff0c;只有实义动词&#xff0c;就要借助"do,does,did"放在句子前面,并将实义动词改为"…...

k8s证书更新,kubeadm安装的K8S证书过期后无法使用后证书更新方法

k8s证书更新 1. 查看证书过期时间 #通过文件查看证书过期时间 for item in find /etc/kubernetes/pki -maxdepth 2 -name "*.crt";do openssl x509 -in $item -text -noout| grep Not;echo $item;done #通过命令查看证书过期时间 kubeadm certs check-expirationk8…...

java实现日期拆分的方法

java实现日期拆分的方法 本文实例讲述了java实现日期拆分的方法。分享给大家供大家参考。具体如下&#xff1a; 如&#xff1a;计算6-1至6-5之间的日期天数及具体日期&#xff0c;预期的结果是得到&#xff1a; 6-1 6-2 6-3 6-4 6-5 以下是我利用java 日历类做的实现&am…...

Ansible之playbook剧本编写

一、playbook的相关知识 1.playbook简介 playbook是 一个不同于使用Ansible命令行执行方式的模式&#xff0c;其功能更强大灵活。简单来说&#xff0c;playbook是一个非常简单的配置管理和多主机部署系统&#xff0c;不同于任何已经存在的模式&#xff0c;可作为一个适合部署复…...

【ChatGPT辅助学Rust | 基础系列 | Hello, Rust】编写并运行第一个Rust程序

文章目录 前言一&#xff0c;创建项目二&#xff0c;两种编译方式1. 使用rustc编译器编译2. 使用Cargo编译 总结 前言 在开始学习任何一门新的编程语言时&#xff0c;都会从编写一个简单的 “Hello, World!” 程序开始。在这一章节中&#xff0c;将会介绍如何在Rust中编写并运…...

自监督去噪:Noise2Noise原理及实现(Pytorch)

文章地址&#xff1a;https://arxiv.org/abs/1803.04189 ICML github 代码: https://github.com/NVlabs/noise2noise 本文整理和参考代码: https://github.com/shivamsaboo17/Deep-Restore-PyTorch 文章目录 1. 理论背景2. 实验结果3. 代码实现(1) 网络结构(2) 数据加载(3) 网络…...

BES2700 SDK绝对时间获取方法

1 代码 2 实验 log 需要换算下...

Closure Table-树形多级关系数据库设计(MySql)

一般树形多级关系数据库设计&#xff0c;比较普遍的就是四种方法&#xff1a;&#xff08;具体见 SQL Anti-patterns这本书&#xff09; Adjacency List&#xff1a;每一条记录存parent_id Path Enumerations&#xff1a;每一条记录存整个tree path经过的node枚举&#xff08…...

【SQL应知应会】表分区(一)• MySQL版

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 本文收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习&#xff0c;有基础也有进阶&#xff0c;有MySQL也有Oracle 分区表 • MySQL版 一、分区表1.非分区表2.分区表2…...

java语法基础-- 变量、标识符、关键字

学习目标 教学目标重点难点1.掌握变量的相关概念。2.掌握Java中数据类型的划分。3.掌握8种基本数据类型的使用。4.掌握数据类型的转换方式。5.掌握各个运算符&#xff0c;表达式的作用。6.可以编写简单的Java应用程序。1.对变量的理解。2.基本数据类型的相关信息的记忆。3.数据…...

[STL]stack和queue模拟实现

[STL]stack和queue模拟实现 文章目录 [STL]stack和queue模拟实现stack模拟实现queue模拟实现 stack模拟实现 stack是一种容器适配器&#xff0c;标准容器vector、deque、list都可以作为实现stack的底层数据结构&#xff0c;因为它们都具备以下功能&#xff1a; empty&#xf…...

汽车销售企业消费税,增值税高怎么合理解决?

《税筹顾问》专注于园区招商、企业税务筹划&#xff0c;合理合规助力企业节税&#xff01; 汽车行业一直处于炙手可热的阶段&#xff0c;这是因为个人或者家庭用车的需求在不断攀升&#xff0c;同时随着新能源的技术进一步应用到汽车领域&#xff0c;一度实现了汽车销量的翻倍。…...

flask数据库操作

本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高…...

【C++】 哈希

一、哈希的概念及其性质 1.哈希概念 在顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过关键码的多次比较。比如顺序表需要从第一个元素依次向后进行查找&#xff0c;顺序查找时间复杂度为…...

TCP三次握手和四次挥手以及11种状态(二)

11种状态 1、一开始&#xff0c;建立连接之前服务器和客户端的状态都为CLOSED&#xff1b; 2、服务器创建socket后开始监听&#xff0c;变为LISTEN状态&#xff1b; 3、客户端请求建立连接&#xff0c;向服务器发送SYN报文&#xff0c;客户端的状态变味SYN_SENT&#xff1b; 4、…...

【华为OD】运维日志排序

题目描述&#xff1a; 运维工程师采集到某产品线网运行一天产生的日志n条&#xff0c;现需根据日志时间先后顺序对日志进行排序&#xff0c;日志时间格式为H:M:S.N。 H表示小时(0~23) M表示分钟(0~59) S表示秒(0~59) N表示毫秒(0~999) 时间可能并没有补全&#xff0c;也就是说&…...

Qclaw 效率工作流实战测评:让微信变成你的「远程生产力中枢」

一句微信消息&#xff0c;驱动电脑自动干活——这不是概念片&#xff0c;是我用了两周 Qclaw 后的真实体感。 一、Qclaw 是什么&#xff1f;30 秒讲清楚 qclaw Qclaw 是腾讯电脑管家团队出品的个人 AI Agent 工具&#xff0c;基于开源框架 OpenClaw 封装而成。核心逻辑用一句…...

OpenClaw多模型切换实战:千问3.5-35B-A3B-FP8与文本模型的协作流程

OpenClaw多模型切换实战&#xff1a;千问3.5-35B-A3B-FP8与文本模型的协作流程 1. 为什么需要多模型协作&#xff1f; 去年我在尝试用AI自动化处理工作流时&#xff0c;发现一个尴尬的问题&#xff1a;当我用同一个模型处理图片识别和文本写作时&#xff0c;要么图片理解能力…...

告别手动启动:利用NSSM为任意可执行程序打造可靠的Windows后台服务

1. 为什么需要将程序注册为Windows服务&#xff1f; 在日常开发运维中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个Python脚本需要24小时不间断运行&#xff0c;一个Java应用需要在服务器重启后自动恢复&#xff0c;或者一个Go程序需要以守护进程的方式在后台稳定执行…...

OpenClaw自动化写作:Phi-3-vision-128k根据图文素材生成技术博客

OpenClaw自动化写作&#xff1a;Phi-3-vision-128k根据图文素材生成技术博客 1. 为什么需要自动化写作助手 作为一个技术博主&#xff0c;我经常遇到这样的困境&#xff1a;手头积累了大量的代码截图、零散笔记和实验记录&#xff0c;但要把它们整理成一篇结构完整的技术文章…...

嵌入式StatsD客户端:轻量级指标上报库设计与实践

1. statsdclient&#xff1a;嵌入式系统中轻量级指标上报的通用通信库1.1 设计定位与工程价值statsdclient是一个面向资源受限嵌入式环境设计的通用指标采集与上报库&#xff0c;其核心目标并非替代完整的监控栈&#xff0c;而是为 MCU 级设备提供一种零依赖、低开销、协议可选…...

AI编码狂飙,安全防线告急:运行时测试如何守住软件安全的生死线

2026年初&#xff0c;国内某头部电商平台爆发大规模用户数据泄露事件&#xff0c;溯源结果震惊整个行业&#xff1a;事件根源并非黑客的0day漏洞攻击&#xff0c;而是开发团队通过AI编码工具生成的一段会员权限校验代码。这段代码在语法层面完全合规&#xff0c;静态安全扫描全…...

智能样式识别Word文档智能排版批量处理文档格式统一设置字体、字号、颜色、段落间距高效统一样式排版工具

大家好&#xff0c;我是大飞哥。在日常办公中&#xff0c;批量处理 Word 文档格式是最耗时的工作之一&#xff0c;尤其是多份文档样式不统一、表格错乱、图片排版混乱&#xff0c;手动调整不仅效率极低&#xff0c;还很难做到规范一致&#xff0c;严重影响办公效率 —— 这款Wo…...

项目经理面试必备:5 大核心问题拆解与高通过率回答策略

1. 项目经理面试的核心问题解析 面试官抛出"请描述你负责过的一个典型项目"时&#xff0c;往往不是想听流水账。我当年第一次面试时就犯过这个错误&#xff0c;花了10分钟详细描述项目背景&#xff0c;结果面试官直接打断&#xff1a;"所以你到底做了什么&#…...

【CentOS】sshd服务启动失败全攻略:从权限修复到目录缺失的完整解决方案

1. 当sshd服务罢工时&#xff0c;我们该从哪里入手&#xff1f; 每次遇到sshd服务启动失败&#xff0c;就像面对一台突然熄火的汽车——你明明记得昨天还好好的&#xff0c;今天却怎么都打不着火。作为运维人员&#xff0c;这种情况再熟悉不过了。最近我就遇到一个典型案例&…...

BR DI426数字输入模块

B&R DI426 数字输入模块是一款工业自动化系统用的 I/O 模块&#xff0c;主要用于采集现场开关量信号并传输至控制系统。一、基本概述型号&#xff1a;DI426类型&#xff1a;数字输入模块用途&#xff1a;采集工业现场的开关量信号&#xff0c;为控制系统提供输入数据二、主…...