SpringCloud实战之Kubernetes项目运行示例

全文速览:

  • 获取源码并加载环境
  • spring-cloud-kubernetes下的示例
  • mac minikube 本地构建执行SpringCloud-Kubernetes-Example

文章背景:

2019年开始 SpringCloud 开始向 K8S容器化流程演变,逐步诞生了【Spring-Cloud-Kubernetes】

环境要求:

  • maven 3.+
  • jdk17

获取源码并加载环境

从github仓库获取源码

git clone https://github.com/spring-cloud/spring-cloud-kubernetes.git 

导入IDEA后,确认以下构建环境

  • maven 3.+
  • jdk17
  • 当前springcloudkubernetes版本:3.1.0-SNAPSHOT
  • spring-cloud-build 4.1.0-SNAPSHOT

由于代码涉及snapshot库的代码拉取(体现Spring全家桶的协同),需要关注项目根目录下的.setting文件,作为一般本地maven文件的补充,主要关注仓库部分,构建的时候可以直接选定这个setting文件,消除全项目红波浪线的问题。

确认以上环境后

./mvnw clean package -Dmaven.test.skip=true

保持网络通畅,期间会需要连接docker,现在打包工具,确定JRE版本,下载JRE版本,打包到镜像仓库等动作。

spring-cloud-kubernetes下的示例

使用spring-cloud-kubernetes下的example体验springcloud与kubernetes的融合与互动

/spring-cloud-kubernetes/spring-cloud-kubernetes-examples/kubernetes-leader-election-examplemvn spring-boot:build-image -Dspring-boot.build-image.imageName=org/kubernetes-leader-election-example:~$ docker images
REPOSITORY                                                                    TAG       IMAGE ID       CREATED         SIZE
busybox                                                                       latest    a416a98b71e2   4 weeks ago     4.26MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver            v1.24.1   e9f4b425f919   15 months ago   130MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler            v1.24.1   18688a72645c   15 months ago   51MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy                v1.24.1   beb86f5d8e6c   15 months ago   110MB
registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager   v1.24.1   b4ea7e648530   15 months ago   119MB
registry.cn-hangzhou.aliyuncs.com/google_containers/etcd                      3.5.3-0   aebe758cef4c   16 months ago   299MB
registry.cn-hangzhou.aliyuncs.com/google_containers/pause                     3.7       221177c6082a   17 months ago   711kB
registry.cn-hangzhou.aliyuncs.com/google_containers/coredns                   v1.8.6    a4ca41631cc7   22 months ago   46.8MB
k8s.gcr.io/pause                                                              3.6       6270bb605e12   24 months ago   683kB
registry.cn-hangzhou.aliyuncs.com/google_containers/storage-provisioner       v5        6e38f40d628d   2 years ago     31.5MB
org/kubernetes-leader-election-example      eval $(minikube docker-env)

Mac minikube 本地构建执行 SpringCloud-Kubernetes-Example

Mac 安装 minikube 此处不描述。
本文主要参照官方流程,依据源码构建实践示例代码。

依赖版本说明:

  • docker 20.10.20
  • minikube v1.28.0
  • k8s 1.24.1
  • maven 3.6
  • jdk17
  • spring-cloud-kubernetes 3.1.0-SNAPSHOT
  • spring-cloud-build 4.1.0-SNAPSHOT

以上maven和jdk是必要条件,注意版本的对应

基础条件准备

  • 安装maven3+环境
  • 安装JDK17环境
  • 启动docker
  • 启动minikube minikube start

查看 minikube 访问的 docker 环境

minikube docker-env

:~$ minikube docker-env
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://127.0.0.1:54965"
export DOCKER_CERT_PATH="~/.minikube/certs"
export MINIKUBE_ACTIVE_DOCKERD="minikube"# To point your shell to minikube's docker-daemon, run:
# eval $(minikube -p minikube docker-env)

如果本地docker没有habor等私仓环境,注意这行注释,需要让当前shell去访问minikube的docker 需要执行 eval $(minikube -p minikube docker-env)。官方文档也很细心地写明了这个指令哦,对于小白还是比较友好

指令执行后,即可在当前这个shell直接docker images看到仓库中的镜像了

以下开始执行示例项目的部署

进入example项目文件夹下,为项目创建role和role-binding

kubectl apply -f leader-role.ymlapiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:name: leaderlabels:app: kubernetes-leader-election-examplegroup: org.springframework.cloud
rules:
- apiGroups:- ""resources:- podsverbs:- watch- get
- apiGroups:- ""resources:- configmapsverbs:- watch- get- update# resourceNames:#   - <config-map name>----kubectl apply -f leader-rolebinding.ymlapiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:labels:app: kubernetes-leader-election-examplegroup: org.springframework.cloudname: leader
roleRef:apiGroup: ""kind: Rolename: leader
subjects:
- kind: ServiceAccountname: defaultapiGroup: ""

在example目录下通过maven组件构建docker镜像

./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=org/kubernetes-leader-election-example

通过以下yaml构建服务

---
apiVersion: v1
kind: List
items:- apiVersion: v1kind: Servicemetadata:labels:app: kubernetes-leader-election-examplename: kubernetes-leader-election-examplespec:ports:- name: httpport: 80targetPort: 8080selector:app: kubernetes-leader-election-exampletype: ClusterIP- apiVersion: v1kind: ServiceAccountmetadata:labels:app: kubernetes-leader-election-examplename: kubernetes-leader-election-example- apiVersion: rbac.authorization.k8s.io/v1kind: RoleBindingmetadata:labels:app: kubernetes-leader-election-examplename: kubernetes-leader-election-example:viewroleRef:kind: RoleapiGroup: rbac.authorization.k8s.ioname: namespace-readersubjects:- kind: ServiceAccountname: kubernetes-leader-election-example- apiVersion: rbac.authorization.k8s.io/v1kind: Rolemetadata:namespace: defaultname: namespace-readerrules:- apiGroups: ["", "extensions", "apps"]resources: ["configmaps", "pods", "services", "endpoints", "secrets"]verbs: ["get", "list", "watch"]- apiVersion: apps/v1kind: Deploymentmetadata:name: kubernetes-leader-election-examplespec:selector:matchLabels:app: kubernetes-leader-election-exampletemplate:metadata:labels:app: kubernetes-leader-election-examplespec:serviceAccountName: kubernetes-leader-election-examplecontainers:- name: kubernetes-leader-election-exampleimage: org/kubernetes-leader-election-example:latestimagePullPolicy: IfNotPresentreadinessProbe:httpGet:port: 8080path: /actuator/health/readinesslivenessProbe:httpGet:port: 8080path: /actuator/health/livenessports:- containerPort: 8080

将内部服务的8080映射到ClusterIP的80上,获取本机的代理地址,端口未指定所以每次启动是随机的


:~$ minikube service kubernetes-leader-election-example --url
😿  service default/kubernetes-leader-election-example has no node port
http://127.0.0.1:57562
❗  Because you are using a Docker driver on darwin, the terminal needs to be open to run it.

访问地址 http://127.0.0.1:57562 就能获取响应,由于只有一个节点,所以这个节点就是主节点

curl http://127.0.0.1:57562
I am 'kubernetes-leader-election-example-5fbf89948f-gf8gd' and I am the leader of the 'world'

增加实例数增加到2个

kubectl scale --replicas=2 deployment.apps/kubernetes-leader-election-exampleNAMESPACE     NAME                                                  READY   STATUS    RESTARTS       AGE
default       kubernetes-leader-election-example-5fbf89948f-427xs   1/1     Running   4 (25m ago)    3d21h
default       kubernetes-leader-election-example-5fbf89948f-gf8gd   1/1     Running   4 (25m ago)    3d21h

由于节点数增加,两个服务也就开始存在负载均衡的效果,依赖k8s调度,此时请求目标地址 http://127.0.0.1:57562, 请求一般都是落在从节点上,反复请求节点会交替但都是到从节点

I am 'kubernetes-leader-election-example-5fbf89948f-427xs' but I am not a leader of the 'world'
I am 'kubernetes-leader-election-example-5fbf89948f-gf8gd' but I am not a leader of the 'world'

欢迎点这里免费关注我的GitHub,给大家提供最真实的源码和技术分享

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

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

相关文章

mysql隔离级别和串行化

MySQL支持的隔离级别有四种&#xff0c;分别是&#xff1a; Read Uncommitted&#xff08;读未提交&#xff09; Read Committed&#xff08;读已提交&#xff09; Repeatable Read&#xff08;可重复读&#xff09; Serializable&#xff08;串行化&#xff09; 这些隔离级别…

nginx日志常见报错解决

目录 一&#xff1a;报错 二&#xff1a;php查看后台内容有的栏目出现502&#xff1f; 三&#xff1a;413 Request Entity Too Large? 四&#xff1a;Request Header Or Cookie Too Large 400 一&#xff1a;报错 upstream prematurely closed connection while reading r…

【C语言数组传参】规则详解

目录 数组传参介绍 数组传参规则 数组传参的实参 特殊情况一&#xff1a;sizeof&#xff08;数组名&#xff09; 特殊情况二&#xff1a;&数组名 数组传参的形参 数组传参使用数组名作为形参接收 形参如果是⼀维数组 形参如果是⼆维数组 数组传参使用指针作为形参…

Linux:apache优化(1)—— 长链接/保持连接

系统:CentOS 7.9 apache版本为&#xff1a;2.4.25 需要使用源码包进行安装才能够使用这些扩展模块 在使用这些扩展模块前要先下载zlib-devel 安装--enable-deflate选项需要的网页压缩传输的软件包 yum -y install zlib-devel 在配置编译安装时需要使用扩展配置 ./config…

滤波器opencv

在OpenCV中&#xff0c;滤波器用于对图像进行平滑、锐化、边缘检测等操作。以下是一些常用的滤波器及其在OpenCV中的Python代码示例&#xff1a; 均值滤波器&#xff08;平滑图像&#xff09;&#xff1a; import cv2 import numpy as np# 读取图像 image cv2.imread(path_t…

如何使用Docker将.Net6项目部署到Linux服务器(三)

目录 四 安装nginx 4.1 官网下载nginx 4.2 下载解压安装nginx 4.3 进行configure 4.4 执行make 4.5 查看nginx是否安装成功 4.6 nginx的一些常用命令 4.6.1 启动nginx 4.6.2 通过命令查看nginx是否启动成功 4.6.3 关闭Nginx 4.6.5 重启Nginx 4.6.6 杀掉所有Nginx进程 4.…

先序+中序还原二叉树【数据结构】

先序中序还原二叉树 题目描述 给定一棵二叉树的先序遍历序列和中序遍历序列&#xff0c;要求计算该二叉树的高度。 输入 输入首先给出正整数N&#xff08;≤50&#xff09;&#xff0c;为树中结点总数。下面两行先后给出先序和中序遍历序列&#xff0c;均是长度为N的不包含重…

C# 使用ZXing.Net识别二维码和条码

目录 写在前面 代码实现 调用示例 写在前面 上一篇写了 C# 使用ZXing.Net生成二维码和条码-CSDN博客 使用ZXing.Net解码非常简单&#xff0c;事实上就只用一行代码就好了&#xff0c;这么简单那为什么还要贴在这里呢&#xff0c;原因是开始时&#xff0c;在网上看资料看到…

Linux 编写脚本定时发送天气预报

1 首先要配置smtp服务 我这里使用的是qq邮箱 拿到smtp的密钥 2 配置mail.rc文件 在配置文件末尾加上 set from109456****qq.com #这里是发送邮件的地址 set smtpsmtp.qq.com:587 #阿里云一定要带上这个端口号&#xff0c;其他云服务商不用 set smtp-auth-user109456**** #…

Mybatis行为配置之Ⅳ—日志

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 再谈动态SQL Mybatis配置入门 Mybatis行为配置之Ⅰ—缓存 Mybatis行为配置…

系统启动流程 - 理解modules加载流程

​编辑 Hacker_Albert    202 linux 启动流程module加载 1.启动过程分为三个部分 BIOS 上电自检&#xff08;POST&#xff09;引导装载程序 (GRUB2)内核初始化启动 systemd&#xff0c;其是所有进程之父。 1.1.BIOS 上电自检&#xff08;POST&#xff09; BIOS stands for…

前端网络面试:浏览器输入地址后发生了什么?

理解整块的内容涉及到的 UDP、TCP 以及 http、https 相关知识 1. 请求前 浏览器自动补全协议、端口浏览器自动完成 url 编码浏览器根据 url 地址查找本地缓存&#xff0c;根据缓存规则看是否命中缓存 若命中缓存则直接使用缓存&#xff0c;不再发出请求未命中直接请求 通过 DN…

图像拼接——基于homography的特征匹配算法

目录 1. 任务要求2. 数据集3. 基于homography的特征匹配算法4. 拼接流程展示4.1 图片实例4.2 特征点位图4.3 特征点匹配结果4.4 相机校准结果4.5 拼接结果 5. 部分图像拼接结果展示 1. 任务要求 输入&#xff1a;同一个场景的两张待拼接图像&#xff08;有部分场景重合&#x…

拓展操作(一) Linux 2台机器之间进行免密登录

让清单成为一种习惯 互联网时代的变革,不再是简单的开发部署上线,持续,正确,安全地把事情做好尤其重要;把事情做好的前提是做一个可量化可执行的清单,让工程师就可以操作的清单而不是专家才能操作: 设定检查点 根据节点执行检查程序操作确认或边读边做 二者选其一不要太…

macOS系统打开Linux的方法

第一步 按下[command空格键]调出搜索框&#xff0c;输入“终端”&#xff0c;打开图上第一个 第二步 如图先输入"sudo -i"&#xff0c;敲回车键&#xff0c;再输入开机密码&#xff0c;再敲回车键就可以打开。注意&#xff1a;这里的密码输入不会显示在页面。 如果要…

SpringMVC之RESTful案例

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

Qt基础之四十三:Qt智能指针(QPointer、QSharedPointer、QWeakPointer和QScopedPointer)

一.QPointer QPointer是一个模板类,用于指向QObject或其派生类对象。当QPointer指向的对象销毁时,它会被自动设置为nullptr(在QObject析构时),这和普通C++指针是不同的(普通的C++指针delete后会变为“悬空指针”,需要手动设置为nullptr)。 QPointer的使用场景:QPoint…

JavaEE - 网络编程之回显服务器

目录 一.什么是回显服务器&#xff1f; 二.UDP是什么&#xff1f; 1.TCP 是有链接的&#xff0c; UDP 是无连接的 2.TCP是可靠传输的,UDP是不可靠传输的 3.TCP是面向字节流的&#xff0c;UDP是面向数据报 4.TCP和UDP是全双工的 三.UDP的 socket api 四. 具体代码实现 …

Qt Designer中各个模块的详细介绍,小白一看就会!!第3部分——Item Views (Model-Based) 模块介绍

Item Views (Model-Based) 模块的详细介绍 在Qt Designer中&#xff0c;Item Views (Model-Based) 模块是一组基于模型/视图&#xff08;Model/View&#xff09;架构的控件&#xff0c;用于展示和操作数据。这些控件与数据模型紧密结合&#xff0c;使得数据展示变得更加灵活和…

SAP问题 OPEN SQL 取不到值

关键&#xff1a;数据库中有数据&#xff0c;但是open sql取不到数据 背景&#xff1a; 标准程序在测试环境正常执行&#xff0c;在生产环境报错。 解决过程&#xff1a; 第一步&#xff1a;分析执行结果不一致可能的原因&#xff1a; 1.测试数据问题&#xff0c;可能性小&…