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

[Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解

一. 创建k8s部署的镜像

1.部署nodejs项目

(1).上传nodejs项目到节点node1

(2).压缩nodejs项目

 (3).构建nodejsDockerfile

1).创建nodejsDockerfile

具体可参考:[Docker]十.Docker Swarm讲解,在/root下创建nodejsDockerfile,具体代码如下:

FROM node
#把压缩文件COPY到镜像的root下
ADD /wwwroot/nodejs.tar.gz /root
WORKDIR /root
RUN chmod -R 777 nodejs
WORKDIR /root/nodejs
EXPOSE 3000
#安装依赖
RUN npm install cnpm -g --registry=https://registry.nlark.com
RUN cnpm install
#启动项目
CMD node app.js

2).通过build构建镜像 

执行build构建镜像 

docker build -f nodejsDockerfile -t docker.io/nodejsimg:latest .

 

 3).启动项目进行测试
docker run -it -d --name nodejs01 -p 8080:8080 nodejsimg

4).镜像发布到远程仓库
docker push nodejsimg:latest

 好了,nodejs镜像就部署好了,后面就可以在k8s集群中使用这个镜像了,同理,golang的项目也可以这样操作

 2.部署golang项目

(1).上传goweb项目到节点node1上

这里可以使用编译好的goweb项目或者未编译的goweb项目来操作,参考:[Docker]六.Docker自动部署nodejs以及golang项目

这里以编译好的goweb项目来操作

(2).压缩goweb项目

 (3).构建gowebDockerfile

1).创建golangDockerfile

具体可参考:[Docker]十.Docker Swarm讲解,在/root下创建golangDockerfile,具体代码如下:

FROM centos
#把压缩文件COPY到镜像的root下
ADD /wwwroot/ginweb.tar.gz /root
WORKDIR /root
RUN chmod -R 777 ginweb
WORKDIR /root/ginweb
EXPOSE 8080
ENTRYPOINT ["./ginweb"]

2).通过build构建镜像 

执行build构建镜像 

docker build -f golangDockerfile -t docker.io/k8sgoimg:latest .

 ​​​​​​

 3).启动项目进行测试
docker run -it -d --name goweb01 -p 8080:8080 k8sgoimg

 4).镜像发布到远程仓库

docker push k8sgolangimg:latest

 好了,goweb项目镜像就部署好了,后面就可以在k8s集群中使用这个镜像了,下面就来看看怎么把项目部署到k8s集群中

二.部署应用到K8s集群中

要想部署应用到k8s中,那么,就要了解Pod、Deployment、Service等的相关概念

1.Pod、Deployment、Service相关概念

(1).Pod基本概念

  • 是k8s中的最小部署的单元
  • Pod里面是由一个或多个容器组成【一组容器的集合】(刚开始的时候可以把pod当成是docker中的容器来看)
  • 一个pod中的容器是共享网络命名空间
  • 每个Pod包含一个或多个紧密相关的用户业务容器

Pod k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在 k8s 上运行容器化应用的资源对象 ,其他的资源对象都是用来支撑或者扩展Pod 对象功能的,比如控制器对象是用来管控 Pod 对象的, Service 或者Ingress资源对象是用来暴露 Pod 引用对象的, PersistentVolume 资源对象是用来为 Pod提供存储等等, k8s不会直接处理容器,而是Pod ,

相关文章:

  • linux 环境下替换jar包中class文件
  • 个人养老金知多少?
  • 商业智能BI和数据可视化的区别
  • 浅谈NLP和大模型的关系
  • css3 clip-path剪切图片
  • Navicat 技术指引 | 适用于 GaussDB 分布式的备份/还原功能
  • Elasticsearch 8.10.0同义词API用法详解,支持同义词热更新
  • 可视化 Java 项目
  • 文心一言4.0使用指南
  • 宠物自助洗护小程序系统
  • 排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序
  • 电脑开机出现:CLIENT MAD ADDR (网卡启动系统)的解决办法
  • 如何将从GitHub上弄下来的Three.js本地官网设为中文
  • 云架构的思考4--云上灾备
  • 香港科技大学数据建模(MSc DDM)硕士学位项目(2024年秋季入学)招生宣讲会-四川大学专场
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ECMAScript入门(七)--Module语法
  • ES6 ...操作符
  • isset在php5.6-和php7.0+的一些差异
  • PaddlePaddle-GitHub的正确打开姿势
  • Vue实战(四)登录/注册页的实现
  • Webpack 4 学习01(基础配置)
  • 给初学者:JavaScript 中数组操作注意点
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 和 || 运算
  • 近期前端发展计划
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 @font-face
  • 数据科学 第 3 章 11 字符串处理
  • 推荐一个React的管理后台框架
  • const的用法,特别是用在函数前面与后面的区别
  • 大数据全解:定义、价值及挑战
  • ​学习一下,什么是预包装食品?​
  • #数学建模# 线性规划问题的Matlab求解
  • (7)STL算法之交换赋值
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (生成器)yield与(迭代器)generator
  • (转)EOS中账户、钱包和密钥的关系
  • (转)ObjectiveC 深浅拷贝学习
  • (转)程序员技术练级攻略
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net6使用Sejil可视化日志
  • .net程序集学习心得
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .Net中间语言BeforeFieldInit
  • /usr/bin/env: node: No such file or directory
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @GlobalLock注解作用与原理解析
  • @vue/cli 3.x+引入jQuery
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell