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

【Kubernetes】第二十五篇 - 布署 nodejs 后端项目(下)

一,前言

上一篇,介绍了部署后端项目之前,需要的准备的相关配置信息;

本篇,创建 Deployment、Service 完成后端项目布署;


二,解决 jenkins 安全问题

构建 docker 镜像之后,登录 docker 会提示有安全问题:

这是由于在脚本中使用了眀文用户名、密码进行登录所导致的;

jenkins 中的项目构建脚本:

#!/bin/bash
time=$(date "+%Y%m%d%H%M%S")
npm install --registry=https://registry.npm.taobao.org
docker build -t 47.94.92.122:8082/cicd-backend:$time .
docker login -u admin -p Wz@19880818 47.94.92.122:8082
docker push 47.94.92.122:8082/cicd-backend:$time

修改为使用环境变量用户名、密码:

#!/bin/bash
time=$(date "+%Y%m%d%H%M%S")
npm install --registry=https://registry.npm.taobao.org
docker build -t 47.94.92.122:8082/cicd-backend:$time .
docker login -u $DOCKER_LOGIN_USERNAME -p $DOCKER_LOGIN_PASSWORD 47.94.92.122:8082
docker push 47.94.92.122:8082/cicd-backend:$time

如何提供环境变量:

这样,用户名密码写到了环境变量,那么用户名密码是怎么来的呢?

它会去读一个 jenkins 凭据:主页-系统管理-凭据

登录成功了


三、创建后端 Deployment

创建一个 pod:创建一个 kind: pod;
创建多个 pod:创建一个 kind: Deployment;

Deployment 对象,会创建出一个副本集,这个副本集可以控制 pod 数量;

由于后端项目和前端项目都是无状态的,为了便于演示各部署两份

[root@k8s-master cicd]# vi deployment-cicd-backend.yamlapiVersion: apps/v1
kind: Deployment
metadata:name: cicd-backend
spec:selector:matchLabels:app: cicd-backendreplicas: 2 #两个副本template:metadata:labels:app: cicd-backend #必须和selector-cicd-backend对应spec:imagePullSecrets:- name: private-registrycontainers:- name: cicd-backendimagePullPolicy: Alwaysimage: "47.94.92.122:8082/cicd-backend:20220111113749"ports:- containerPort: 7001env: #注入后端需要的5个环境变量- name: MYSQL_HOSTvalueFrom:configMapKeyRef:name: mysql-configkey: host- name: MYSQL_PORTvalueFrom:configMapKeyRef:name: mysql-configkey: port- name: MYSQL_DATABASEvalueFrom:configMapKeyRef:name: mysql-configkey: database- name: MYSQL_USERvalueFrom:secretKeyRef:name: mysql-authkey: username     - name: MYSQL_PASSWORDvalueFrom:secretKeyRef:name: mysql-authkey: password    

上边配置涉及到的 configMap:

[root@k8s-master ~]# kubectl get configMap mysql-config
NAME           DATA   AGE
mysql-config   3      3d19h[root@k8s-master ~]# kubectl get configMap mysql-config -o yaml
apiVersion: v1
data: #三个值database: cicdhost: service-cicd-mysqlport: "8899"
kind: ConfigMap

上边配置涉及到的 Secret:

[root@k8s-master ~]# kubectl get secret mysql-auth
NAME         TYPE     DATA   AGE
mysql-auth   Opaque   2      4d2h[root@k8s-master ~]# kubectl get secret mysql-auth -o yaml
apiVersion: v1
data:password: MTIzNDU2username: cm9vdA==
kind: Secret[root@k8s-master ~]# echo cm9vdA== | base64 -d
root
[root@k8s-master ~]# echo MTIzNDU2 | base64 -d
123456

生效配置

// 生效配置
[root@k8s-master cicd]# kubectl apply -f deployment-cicd-backend.yaml
deployment.apps/cicd-backend created// 两个副本
[root@k8s-master cicd]# kubectl get pods
NAME                           READY   STATUS              RESTARTS   AGE
cicd-backend-98b5d4f57-jndvd   0/1     ContainerCreating   0          2s
cicd-backend-98b5d4f57-qjvch   0/1     ContainerCreating   0          2s
cicd-mysql-745975859b-gpwzh    1/1     Running             7          4d3h// 稍等约 30 秒
[root@k8s-master cicd]# kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
cicd-backend-98b5d4f57-jndvd   1/1     Running   0          26s
cicd-backend-98b5d4f57-qjvch   1/1     Running   0          26s
cicd-mysql-745975859b-gpwzh    1/1     Running   7          4d3h

四,创建后端 Service

[root@k8s-master cicd]# vi service-cicd-backend.yamlapiVersion: v1
kind: Service
metadata:name: service-cicd-backend
spec:selector:app: cicd-backend #deploymentports:- protocol: TCPport: 7001 #服务内部的端口号targetPort: 7001 #容器内部向外暴露的端口号Dockerfile中的EXPOSEtype: NodePort
[root@k8s-master cicd]# kubectl apply -f  service-cicd-backend.yaml
service/service-cicd-backend created[root@k8s-master cicd]# kubectl get svc
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
kubernetes             ClusterIP   10.96.0.1       <none>        443/TCP          20d
service-cicd-backend   NodePort    10.97.144.175   <none>        7001:30174/TCP   44s
service-cicd-mysql     NodePort    10.108.224.96   <none>        8899:32154/TCP   4d2h
service-pay-v1         NodePort    10.97.250.199   <none>        80:30114/TCP     6d21h
service-user-v1        NodePort    10.104.13.40    <none>        80:31071/TCP     19d// 删掉不用的 service:service-pay、service-user,释放资源
[root@k8s-master cicd]# kubectl delete service service-pay-v1 service-user-v1 
service "service-pay-v1" deleted
service "service-user-v1" deleted// 查 ip
[root@k8s-master cicd]# cat /etc/hosts
::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6
127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4172.17.178.106	k8s-node172.17.178.105	k8s-master
172.17.178.105	k8s-master	k8s-master// 通过 service 访问服务接口
[root@k8s-master cicd]# curl http://172.17.178.105:30174/user/list
curl: (7) Failed connect to 172.17.178.105:30174; 拒绝连接

访问失败,看下 pod:

[root@k8s-master cicd]# kubectl get pods
NAME                           READY   STATUS             RESTARTS   AGE
cicd-backend-98b5d4f57-jndvd   0/1     CrashLoopBackOff   3          8m41s
cicd-backend-98b5d4f57-qjvch   1/1     Running            4          8m41s
cicd-mysql-745975859b-gpwzh    1/1     Running            8          4d3h// 过了一会,全都完蛋了
[root@k8s-master cicd]# kubectl get pods
NAME                           READY   STATUS             RESTARTS   AGE
cicd-backend-98b5d4f57-jndvd   0/1     CrashLoopBackOff   4          9m37s
cicd-backend-98b5d4f57-qjvch   0/1     CrashLoopBackOff   4          9m37s
cicd-mysql-745975859b-gpwzh    0/1     CrashLoopBackOff   8          4d3h// 重启 mysql
[root@k8s-master cicd]# kubectl delete deploy cicd-mysql
deployment.apps "cicd-mysql" deleted
[root@k8s-master cicd]# kubectl apply -f deployment-cicd-mysql.yaml
deployment.apps/cicd-mysql created
[root@k8s-master cicd]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
cicd-mysql-745975859b-c4b6p   1/1     Running   0          8s// 2 个 pod 副本负载比较大 ,修改配置,改成 1 个 pod
[root@k8s-master cicd]# kubectl get pods
NAME                           READY   STATUS    RESTARTS   AGE
cicd-backend-98b5d4f57-ftrdk   1/1     Running   0          6s
cicd-mysql-745975859b-c4b6p    1/1     Running   0          99s

重新测试访问:

[root@k8s-master cicd]# curl http://172.17.178.105:30174/user/list
{"message":"ok2","success":true,"code":200,"data":[]}

至此,后端项目就部署完成了


五,结尾

本篇,创建 Deployment、Service 完成后端项目布署;

下一篇,部署前端项目;

相关文章:

【Kubernetes】第二十五篇 - 布署 nodejs 后端项目(下)

一&#xff0c;前言 上一篇&#xff0c;介绍了部署后端项目之前&#xff0c;需要的准备的相关配置信息&#xff1b; 本篇&#xff0c;创建 Deployment、Service 完成后端项目布署&#xff1b; 二&#xff0c;解决 jenkins 安全问题 构建 docker 镜像之后&#xff0c;登录 do…...

贪心算法之区间问题总结

一、跳跃游戏跳跃游戏类的问题&#xff0c;不关心每一步怎么跳&#xff0c;只需要关心最大覆盖范围这里注意i是在当前最大可覆盖范围内遍历&#xff0c;如{2,1,0,1}&#xff0c;就是在0~2范围内遍历&#xff0c;千万不能0~numsSize-1范围内遍历&#xff01;&#xff01;&#x…...

无线WiFi安全渗透与攻防(七)之WIFI07-WEP-wifite自动化渗透WEP加密

WIFI07-WEP-wifite自动化渗透WEP加密 1.wifite介绍 wifite是一款自动化wep、wpa以及wps破解工具&#xff0c;不支持windows和osx。wifite的特点是可以同时攻击多个采用wep和wpa加密的网络。wifite只需简单的配置即可自动化运行&#xff0c;期间无需人工干预。 目前支持任何li…...

震撼,支持多模态模型的ChatGPT 4.0发布了

最近几个月&#xff0c;互联网和科技圈几乎ChatGPT刷屏了&#xff0c;各种关于ChatGPT的概念和应用的帖子也是围绕在周围。当去年年底ChatGPT发布的那几天&#xff0c;ChatGPT确实震撼到了所有人&#xff0c;原来AI还可以这么玩&#xff0c;并且对国内的那些所谓的人工智能公司…...

IDEA常用插件列表

一 背景 IDEA常用插件列表&#xff0c;用来提供工作效率。你都安装了吗 IntelliJ IDEA 默认安装并提供了非常多的工具&#xff0c;比如 Maven Integration、Markdown support、SSH Remote Run 等。其中有很多好用&#xff0c;但是不为人知的工具。 二 插件列表 阿里代码规约…...

比df更好用的命令!

大家好&#xff0c;我是良许。 对于分析磁盘使用情况&#xff0c;有两个非常好用的命令&#xff1a;du 和 df 。简单来说&#xff0c;这两个命令的作用是这样的&#xff1a; du 命令&#xff1a;它是英文单词 disk usage 的简写&#xff0c;主要用于查看文件与目录占用多少磁…...

【Git使用学习】记录学习过程(1)

安装就省略了&#xff0c;安装结果如下。 Git Bash&#xff1a;这是一个模拟Linux环境的命令行工具&#xff0c;可以使用Git的所有功能。Git GUI&#xff1a;这是一个图形化界面的工具&#xff0c;可以方便地执行Git的常用操作。Git CMD&#xff1a;这是一个Windows命令行工具&…...

K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示

K_A18_001 基于STM32等单片机采集MQ2传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCMQ2传感参模块1.2、STM32F103C8T6MQ2传感参模块五、基础知识学习与相关…...

【云原生·Docker】常用命令

目录 &#x1f341;1、管理命令 &#x1f341;2、帮助命令 &#x1f341;3、镜像命令 &#x1f341;4、容器命令 &#x1f342;4.1.查看容器 &#x1f342;4.2.创建容器 &#x1f342;4.3.删除容器 &#x1f342;4.4.拷贝文件 &#x1f342;4.5.查看容器IP &#x1f341;5、部署…...

户外露营储能电源芯片CSU3AF10

户外露营的项目有很多&#xff0c;随着户外储能电源的发展&#xff0c;越来越多的电子产品可以在户外使用&#xff0c;也不用担心因为在户外时间过长而手机或者其他电子产品电量耗尽。户外储能电源可保证人们随时随地的用电需求&#xff0c;同时也可以满足家电炊具的供电需求&a…...

无线WiFi安全渗透与攻防(八)之WEP-Hirte渗透WEP加密

WEP-渗透WEP新思路–Hirte 1.Hirte介绍 Hirte是破解无线网络WEP Key的一种攻击类型 只要客户端设备&#xff08;笔记本电脑&#xff0c;手机等&#xff09;连接过的无线网络&#xff0c;那些WIFI即使是不在攻击者范围内也都能被破解&#xff0c;因为该wifi的WEP密钥和配置文…...

前端常考面试题整理

display:none与visibility:hidden的区别 这两个属性都是让元素隐藏&#xff0c;不可见。两者区别如下&#xff1a; &#xff08;1&#xff09;在渲染树中 display:none会让元素完全从渲染树中消失&#xff0c;渲染时不会占据任何空间&#xff1b;visibility:hidden不会让元素…...

二十二、身份验证与权限

一、 准备工作 为了讲清楚身份验证与权限&#xff0c;我们再创建一个应用projects,设计模型如下&#xff1a; class Project(models.Model):name models.CharField(项目名称, max_length20, help_text项目名称)desc models.CharField(项目描述, max_length200, help_text项目…...

k8s pod 升级与回滚

当集群中的某个服务需要升级时&#xff0c;我们需要停止目前与该服务相关的所有pod&#xff0c;然后下载新版本镜像并创建新的pod。如果集群规模比较大&#xff0c;则这个工作变成了一个挑战&#xff0c;而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用。kubernet…...

【Go】Go语言开发环境安装

【Go】Go语言开发环境安装 导入 安装环境&#xff1a;Winowds 我现在是win7安装的&#xff0c;与win10整体步骤是一样的&#xff0c;只是部分显示的时候有点差异不影响&#xff1b; 【名词】 编译器&#xff1a;先将代码编译成可执行文件&#xff0c;再执行&#xff1b; —…...

el-switch使用

效果图&#xff1a; 1.表格代码&#xff0c;给el-waitch加上change事件 <el-table-column prop"status" label"状态" align"center" width"150"> <template slot-sc…...

【算法入门】字符串基础

目录 一.字符串引言1.字符串基础二.洛谷P5734详解1.字符串相关库函数&#x1f4ab;&#xff08;1&#xff09; strcpy函数 &#x1f4ab;&#x1f4ab;&#xff08;2&#xff09; strcat函数 &#x1f4ab;&#x1f4ab;&#xff08;3&#xff09;strstr函数 &#x1f4ab;2.题…...

前端面试题 —— 浏览器原理(二)

目录 一、有哪些可能引起前端安全的问题? 二、网络劫持有哪几种&#xff0c;如何防范&#xff1f; 三、浏览器渲染进程的线程有哪些 四、僵尸进程和孤儿进程是什么&#xff1f; 五、为什么需要浏览器缓存&#xff1f; 六、对浏览器的理解 七、CSS 如何阻塞文档解析&…...

对于植物神经紊乱的治疗 中医采用辩证论治的方法

植物神经紊乱是由于心理压力过大、长期生活不规律所导致的一种疾病&#xff0c;这种疾病的发生往往是症状多样、涉及广泛的。当患有植物神经紊乱之后&#xff0c;主要的症状会以躯体化障碍为常见症状&#xff0c;但是很多患者还会出现情绪失控、睡眠障碍等问题。 对于植物神经紊…...

chatGPT之Python API启用上下文管理

chatGPT已经爆火一段时间了&#xff0c;我想大多数的开发者都在默默的在开发和测试当中&#xff0c;可能也是因为这个原因所以现在很难找到关于开发中遇到的一些坑或者方法和技巧。为什么别人的机器人能联想之前的语料&#xff0c;而你的却像个每次都只如初见的高冷机器人&…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...