Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目

这篇具有很好参考价值的文章主要介绍了Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、练手:k8s部署部署wordpress+mysql

wordpress是用于快速搭建博客系统。

1、创建wordpress命名空间

# 创建namespace
kubectl create namespace wordpress
# 查看namespace列表
kubectl get ns

2、创建mysql数据库

# 新建wordpress-db.yaml文件
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: mysql-deploy
  namespace: wordpress
  labels:
    app: mysql
spec:
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.6  
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
          name: dbport
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: rootPassW0rd
        - name: MYSQL_DATABASE
          value: wordpress
        - name: MYSQL_USER
          value: wordpress
        - name: MYSQL_PASSWORD
          value: wordpress
        volumeMounts:
        - name: db
          mountPath: /var/lib/mysql
      volumes:
      - name: db
        hostPath:
          path: /var/lib/mysql
---
apiVersion: v1
kind: Service
metadata:
  name: mysql
  namespace: wordpress
spec:
  selector:
    app: mysql
  ports:
  - name: mysqlport
    protocol: TCP
    port: 3306
    targetPort: dbport

该yaml文件创建一个mysql,并且生成一个service,service对外暴露的端口是3306

# 根据wordpress-db.yaml创建资源[mysql数据库]
kubectl apply -f wordpress-db.yaml
# 查看pod
kubectl get pods -n wordpress -o wide
# 查看详情,查看pod部署进度
kubectl describe pod mysql-deploy-78cd6964bd-smq4k -n wordpress

# 记得获取ip,因为wordpress.yaml文件中要修改
[root@m ~]# kubectl get svc mysql -n wordpress
NAME    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
mysql   ClusterIP   10.104.214.22   <none>        3306/TCP   42m

kubectl describe svc mysql -n wordpress

3、创建wordpress应用

# 创建wordpress.yaml
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: wordpress-deploy
  namespace: wordpress
  labels:
    app: wordpress
spec:
  template:
    metadata:
      labels:
        app: wordpress
    spec:
      containers:
      - name: wordpress
        image: wordpress
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
          name: wdport
        env:
        - name: WORDPRESS_DB_HOST
          value: mysql:3306      # 改为service的name,不需要每次都指定ip             
        - name: WORDPRESS_DB_USER
          value: wordpress
        - name: WORDPRESS_DB_PASSWORD
          value: wordpress
---
apiVersion: v1
kind: Service
metadata:
  name: wordpress
  namespace: wordpress
spec:
  type: NodePort # NodePort类型
  selector:
    app: wordpress
  ports:
  - name: wordpressport
    protocol: TCP
    port: 80
    targetPort: wdport
#  #修改其中mysql的ip地址,其实也可以使用service的name:mysql
kubectl apply -f wordpress.yaml

# 查看详情,查看pod部署进度
kubectl describe pod mysql-deploy-78cd6964bd-smq4k -n wordpress

[root@m ~]# kubectl get pods -n wordpress -o wide
NAME                                READY   STATUS    RESTARTS   AGE    IP               NODE   NOMINATED NODE   READINESS GATES
mysql-deploy-78cd6964bd-smq4k       1/1     Running   0          71m    192.168.80.193   w2     <none>           <none>
wordpress-deploy-6498447888-c9287   1/1     Running   0          116s   192.168.190.65   w1     <none>           <none>

# 获取到转发后的端口,如80端口转到本机的30493端口
[root@m ~]# kubectl get svc -n wordpress
NAME        TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
mysql       ClusterIP   10.104.214.22   <none>        3306/TCP       71m
wordpress   NodePort    10.111.92.1     <none>        80:30493/TCP   2m7s

我们发现,搭建成功了,用浏览器访问192.168.56.101:30493,发现访问成功了!
Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目,云原生,kubernetes,spring boot,adb

4、小结

在集群中,pod之间可以通过service 的name进行访问,不仅仅是ip,这就意味着,service中不仅帮我们做了负载均衡,而且做了dns处理。

二、实战:部署自己的springboot项目

1、准备一个springboot项目

访问:http://localhost:8080/k8s
Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目,云原生,kubernetes,spring boot,adb
先试用maven打成一个jar包:

# maven打包
mvn clean pakcage
# 上传到服务器
[root@m spring-boot]# pwd
/root/spring-boot
[root@m spring-boot]# ll
total 17140
-rw-r--r--. 1 root root 17547894 Jul  5 15:54 springboot-demo-0.0.1-SNAPSHOT.jar

注意!这一步通常来说使用jenkins完成,此处我们是手动完成的。

2、使用docker打成镜像

(1)编写Dockerfile:

FROM openjdk:8-jre-alpine
COPY springboot-demo-0.0.1-SNAPSHOT.jar /springboot-demo.jar
ENTRYPOINT ["java","-jar","/springboot-demo.jar"]
# 根据Dockerfile创建image
docker build -t springboot-demo-image .
# 查看是否成功打成了镜像
docker images

(2)将镜像推送至dockerhub
docker镜像深入学习,docker镜像发布公有云与私有云

# 登录阿里云镜像仓库 # 需要输入密码
docker login --username=沙里沟第二小学扛把子 registry.cn-hangzhou.aliyuncs.com

docker tag springboot-demo-image registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo-image:v1.0
docker push registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo-image:v1.0

# 登录 ,需要输入密码
docker login --username=沙里沟第二小学扛把子 registry.cn-hangzhou.aliyuncs.com
# 私有云的话,需要在k8s添加凭证
kubectl create secret docker-registry <secret-name> \
     --docker-username=<username> \
     --docker-password=<password> \
     --docker-email=<email> \
     --docker-server=<registry>

<secret-name> 是您为 secret 指定的名称,例如 my-registry-secret。
<username> 是您在镜像仓库的用户名。
<password> 是您在镜像仓库的密码。
<email> 是与您在镜像仓库的账号相关联的电子邮件。
<registry> 是您的镜像仓库地址。
接下来,您需要在使用该凭证的部署(deployment)或其他相关资源中引用该 secret。可以在相关资源的定义文件中添加以下部分
spec:
     template:
       spec:
         imagePullSecrets:
         - name: <secret-name>

(3)运行测试

# 运行
docker run -d --name s1 springboot-demo-image # 未做端口映射
# 访问
docker inspect s1
curl 172.17.0.2:8080/k8s  # 未做端口映射,只能访问容器ip

3、使用k8s部署springboot

# 以Deployment部署Pod
# vi springboot-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: springboot-demo
spec: 
  selector: 
    matchLabels: 
      app: springboot-demo
  replicas: 1
  template: 
    metadata:
      labels: 
        app: springboot-demo
    spec: 
      imagePullSecrets: # 私有云凭证
      - name: springboot-demo
      containers: 
      - name: springboot-demo
        image: registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo-image:v1.0 # 记得改
        ports: 
        - containerPort: 8080
---
# 创建Pod的Service service的80端口指向pod的8080
apiVersion: v1
kind: Service
metadata: 
  name: springboot-demo
spec: 
  ports: 
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector: 
    app: springboot-demo
---
# 创建Ingress,定义访问规则,一定要记得提前创建好nginx ingress controller
apiVersion: extensions/v1beta1
kind: Ingress
metadata: 
  name: springboot-demo
spec: 
  rules: 
  - host: k8s.demo.cxf
    http: 
      paths: 
      - path: /
        backend: 
          serviceName: springboot-demo
          servicePort: 80
# 启动
kubectl apply -f springboot-demo.yaml

kubectl get pods
kubectl get pods -o wide # 查看pod详细信息 -192.168.80.194
curl 192.168.80.194:8080/k8s
kubectl get svc # 查看service - 10.106.125.90  80:8080
kubectl get ingress # 查看ingress 
# 查看详情,查看pod部署进度
kubectl describe pod springboot-demo-6d88c74d5b-l9m7k
kubectl scale deploy springboot-demo --replicas=5 # 扩容为5个

三、实战:部署springcloud项目

1、部署nacos

(1)下载部署nacos server1.0.0
github:https://github.com/alibaba/nacos/releases

01 上传nacos-server-1.0.0.tar.gz到阿里云服务器:/usr/local/nacos
02 解压:tar -zxvf
03 进入到bin目录执行:sh startup.sh -m standalone [需要有java环境的支持]
04 浏览器访问:192.168.56.100:8848/nacos
05 用户名和密码:nacos

2、微服务注册到nacos的地址问题

我们有微服务user、order,在pod注册到nacos上的地址,默认是pod的内部地址。

如果在同一个k8s集群下,这样部署是没问题的,但是不同k8s集群下,微服务之间就互相不可访问了。

(1)使用host模式

 ...
 metadata:
      labels: 
        app: order
    spec: 
    # 主要是加上这句话,注意在order.yaml的位置
      hostNetwork: true
      containers: 
      - name: order
        image: registry.cn-hangzhou
...

如上,加上hostNetwork: true,就会在nacos上注册的ip端口,会映射成宿主机的ip和端口。文章来源地址https://www.toymoban.com/news/detail-527769.html

到了这里,关于Kubernetes(k8s)实战:Kubernetes(k8s)部署Springboot项目的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (十)服务器K8S集群部署SpringBoot项目实战

    可以在 https://start.spring.io/网站准备一个项目,这里作为k8s的学习所以springboot项目中准备一个简单的访问接口即可。 1.更新系统软件包: 2.安装 OpenJDK 11: 3.验证 Java 安装: 4.配置环境变量 5.使环境变量生效 1.可以在 https://dlcdn.apache.org/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin

    2024年02月12日
    浏览(46)
  • 【云原生、k8s】管理Kubernetes应用搭建与部署

    官方提供Kubernetes部署3种方式 (一)minikube Minikube是一个工具,可以在本地快速运行一个单点的Kubernetes,尝试Kubernetes或日常开发的用户使用。不能用于生产环境。 官方文档:https://kubernetes.io/docs/setup/minikube/ (二)二进制包 从官方下载发行版的二进制包,手动部署每个组件,

    2024年01月21日
    浏览(71)
  • 【云原生 | Kubernetes 系列】K8s 实战 管理 Secret 详解

    Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 用户可以创建 Secret,同时系统也创建了一些 Secret。 一个 Secret 可以包含 Pod 访问数据库所需的用户凭证。 例如,由用户名和密码组成的数据库连接字符串。 你可

    2024年02月02日
    浏览(59)
  • 云原生Kubernetes:简化K8S应用部署工具Helm

    目录 一、理论 1.HELM ​编辑 2.部署HELM2 3.部署HELM3(2to3方式) 4.部署HELM3(单独安装) 二、实验 1.部署 HELM2 2.部署HELM3(2to3方式) 3.部署HELM3(单独安装) 三、问题 1.api版本过期 2.helm初始化报错 3.pod状态为ImagePullBackOff 4.helm 命令显示 no repositories to show 的错误 5.Helm安装报错

    2024年02月07日
    浏览(60)
  • 【云原生 | Kubernetes 系列】K8s 实战 如何给应用注入数据

    前面我们已经一起学习了很多的东西了,本篇文章,我们将一起学习,如何给应用注入数据,当然,本篇文章不会讲解全部知识点,而是带领大家,一起学习如何对我们的项目进行相关的配置和设置。 创建 Pod 时,可以为其下的容器设置启动时要执行的命令及其参数。如果要

    2024年02月02日
    浏览(64)
  • 云原生Kubernetes:Kubeadm部署K8S单Master架构

    目录 一、理论 1.kubeadm 2.Kubeadm部署K8S单Master架构 3.环境部署 4.所有节点安装docker 5.所有节点安装kubeadm,kubelet和kubectl 6.部署K8S集群 7.安装dashboard 8.安装Harbor私有仓库 9.内核参数优化方案 二、实验 1.Kubeadm部署K8S单Master架构 2. 部署流程  3.环境部署 4.所有节点安装docker 5.所有节

    2024年02月10日
    浏览(54)
  • 【云原生】【k8s】Kubernetes+EFK构建日志分析安装部署

    目录 EFK安装部署 一、环境准备(所有主机) 1、主机初始化配置 2、配置主机名并绑定hosts,不同主机名称不同 3、主机配置初始化 4、部署docker环境 二、部署kubernetes集群 1、组件介绍 2、配置阿里云yum源 3、安装kubelet kubeadm kubectl 4、配置init-config.yaml init-config.yaml配置 5、安装

    2024年02月12日
    浏览(36)
  • 云原生Kubernetes: K8S 1.29版本 部署Jenkins

    目录  一、实验 1.环境 2.K8S 1.29版本 部署Jenkins 服务 3.jenkins安装Kubernetes插件 二、问题 1.创建pod失败 2.journalctl如何查看日志信息 2.容器内如何查询jenkins初始密码 3.jenkins离线安装中文包报错 4.jenkins插件报错 (1)主机 表1 主机 主机 架构 版本 IP 备注 master K8S master节点 1.29.0 1

    2024年04月25日
    浏览(51)
  • 【云原生 | Kubernetes 系列】K8s 实战 使用 Kustomize 对 Kubernetes 对象进行声明式管理

    Kustomize 是一个用来定制 Kubernetes 配置的工具。它提供以下功能特性来管理应用配置文件: 从其他来源生成资源 为资源设置贯穿性(Cross-Cutting)字段 组织和定制资源集合 ConfigMap 和 Secret 包含其他 Kubernetes 对象(如 Pod)所需要的配置或敏感数据。 ConfigMap 或 Secret 中数据的来

    2024年01月17日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包