Docker/K8S
文章目录
- 项目地址
- 一、Docker
- 1.1 创建一个Node服务image
- 1.2 volume
- 1.3 网络
- 1.4 docker compose
- 二、K8S
- 2.1 集群组成
- 2.2 Pod
- 1. 如何使用Pod
- (1) 运行一个pod
- (2) 运行多个pod
- 2.3 pod的生命周期
- 2.4 pod中的容器
- 1. 容器的生命周期
- 2. 生命周期的回调
- 3. 容器重启策略
- 4. 自定义容器启动命令
- 5. 容器探针
- 6. 容器资源限制
- 7. init容器
- 2.5 Deployment 控制器
项目地址
- 教程作者:
- 教程地址:
https://www.bilibili.com/video/BV1Zn4y1X7AZ?spm_id_from=333.788.player.switch&vd_source=791e6deaa9c8a56b1f845a0bc1431b71&p=19
- 代码仓库地址:
- 所用到的框架和插件:
dbt
airflow
一、Docker
1.1 创建一个Node服务image
- 创建node的image
FROM node // 从官方镜像下载,默认为最新WORKDIR /app //创建image里的工作目录 COPY . /app //将当前程序目录的所有文件复制到docker里的/app目录RUN npm install //安装项目所需要的包EXPOSE 80 //让dokcer将项目的端口暴露为80CMD ["node", "server.js"] //容器启动时候,启动服务
- 创建容器
docker build .
- 运行容器
docker run -p 3000:80
-
存在问题,当serverr.js 或者其他地方的代码发生,并不会发生任何变化,因为当前代码一旦打包成了image,就是只读属性了
-
所以,每当代码更改,我们需要重新build image,速度会很快,因为进行了缓存
-
这种缓存的原因是docker的**Layer base **
-
使用
docker run
每次都会创建一个新的image,如果代码没有发生任何变化,请docker start 镜像名称
,如果不指定端口,他会按照上一次的端口 -
优化
FROM node // 从官方镜像下载,默认为最新WORKDIR /app //创建image里的工作目录 COPY package.jsonRUN npm install //安装项目所需要的包COPY . /app //将当前程序目录的所有文件复制到docker里的/app目录EXPOSE 80 //让dokcer将项目的端口暴露为80CMD ["node", "server.js"] //容器启动时候,启动服务
1.2 volume
- 实现容器数据不丢失
- 主要是将docker内的文件和服务器指定的文件进行关联映射
1.3 网络
- List item
- 使用
docker run -d --name myngix -p 88:80 ngxin
表示,访问本机的88端口,实际上访问的是myngix容器的80端口 - 每个容器是隔离的,所以容器80端口可以重复,但是88是本机,所以必须唯一
1.4 docker compose
- 常用指令
- 根据上面的mysql的启动 编写dockercompose
-
mysql
-
wordpress
二、K8S
2.1 集群组成
-
设计并部署高可用 Kubernetes 集群,优化节点资源配置和网络架构。
-
使用 Helm Chart 实现应用的标准化部署,支持多环境(Dev/Test/Prod)配置管理。
-
实现 CI/CD 流水线,通过 Jenkins 和 GitOps(ArgoCD)实现自动化部署和回滚。
-
配置 HPA 和 Cluster Autoscaler,动态调整资源以应对流量波动,降低 30% 的云资源成本。
-
部署 Prometheus 和 Grafana 监控系统,设置告警规则,确保 99.99% 的系统可用性。
-
使用 Istio 实现服务网格,优化流量管理和安全策略,支持蓝绿部署和灰度发布。
**Control Plane C:**控制器
- Pod:可以看成一个docker 容器
- Control Plane:资源调度,master节点,只跑CP组件;
- api:接收外部的指令,restful风格的api;
- etcd:集群所有的后台数据以key-value的形式存储的数据库;(可理解为内部redis)
- kube- scheduler:用来监视和控制未指定运行节点的pods的,资源调度的
- kube-controller-manager:负责运行控制器节点的 ①节点控制器:负责node出现故障时进行响应;②任务控制器:检测一次性job对象,然后创建pods来运行任务直到完成;③端点分片控制器:提供serivice和Pod的连接;④服务账号控制器:未新的命名空间创建服务账号;调度pods的控制进程
Node组件:
- Kubelet:启动pods的工作,由kubelet进行调度,确保pods健康运行,
- kube-proxy:维护网络规则,负责集群内外部网络交互
2.2 Pod
- Pod:Pod类似于豌豆荚,豌豆则是pod里的多个豌豆(容器),pod里的容器共享网络和volume,并且总是一同调度的。简而言之,pod帮我们实现了docker里自己使用docker compose 组织容器;
pod就是用来管理一组容器的集合
1. 如何使用Pod
- 不会直接使用单个pod,而是通过Deployment和Job这些kube-controller-manager来创建Pod;
- 一个Pod里可以有单个容器,单容器时,K8s直接管理容器而不是pod;
- 多个协同工作的容器,Pod封装多个紧密耦合且共享资源的多容器组成;
- 查看所有运行的pod状态
kubectl get pods
kubectl get pod -o wide -n kube-system
(1) 运行一个pod
- 创建一个Pod
- 应用pod
kubectl apply -f nginx-pod.yml
- 删除
kubectl delete -f nginx-pod.yml
(2) 运行多个pod
2.3 pod的生命周期
- 起始于pending状态,至少有一个正常启动则为running状态,如果全部成功则是successed,如果有一个失败 failed.
- pod在生命周期里,只会被调用一次,且本身没有自愈能力,当node销毁,他会跟着销毁
2.4 pod中的容器
1. 容器的生命周期
- 容器状态:
- waiting: 拉去镜像 同步数据等
- running: 运行中
- ternimate : 终止
2. 生命周期的回调
- PostStop:
- PreStop:
3. 容器重启策略
容器的重启策略=pod的重启策略,因为k8s的最小计算单元是pod:
- always
- onFailure
- never
4. 自定义容器启动命令
- args: 修改启动命令
- command:
5. 容器探针
- prode 对容器进行定期的健康检查
- livenessProbe
- readnessProbe: 外部服务是否准备好
- startProbe1.7+: 如果提供里启动探针,所有其他探针都会被禁用,直到探针成功,如果启动失败,k8s会杀死容器,然后根据重启策略,启动容器
- 探针检测的方法: grpc, exec, httpGet, tcpSocket
6. 容器资源限制
metrics-server 对请求,内存,以及cpu进行限制
7. init容器
init容器可以pod的容器运行之前,提前运行镜像中不存在的脚本或者安装脚本.
2.5 Deployment 控制器
相关文章:

Docker/K8S
文章目录 项目地址一、Docker1.1 创建一个Node服务image1.2 volume1.3 网络1.4 docker compose 二、K8S2.1 集群组成2.2 Pod1. 如何使用Pod(1) 运行一个pod(2) 运行多个pod 2.3 pod的生命周期2.4 pod中的容器1. 容器的生命周期2. 生命周期的回调3. 容器重启策略4. 自定义容器启…...

32、【OS】【Nuttx】OSTest分析(1):stdio测试(二)
背景 接上篇wiki 31、【OS】【Nuttx】OSTest分析(1):stdio测试(一) 继续stdio测试的分析,上篇讲到标准IO端口初始化,单从测试内容来说其实很简单,没啥可分析的,但这几篇…...
git push到远程仓库时无法推送大文件
一、错误 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交过大文件&am…...
Vue.js路由管理与自定义指令深度剖析
Vue.js 是一个强大的前端框架,提供了丰富的功能来帮助开发者构建复杂的单页应用(SPA)。本文将详细介绍 Vue.js 中的自定义指令和路由管理及导航守卫。通过这些功能,你可以更好地控制视图行为和应用导航,从而提升用户体验和开发效率。 1 自定义指令详解 1.1 什么是自定义…...

NVIDIA GPU介绍:概念、序列、核心、A100、H100
概述 入职一家大模型领域创业公司,恶补相关知识。 概念 一些概念: HPC:High Performance Computing,高性能计算SoC:System on Chip,单片系统FLOPS:Floating Point Operations Per Second&am…...

【PyTorch】6.张量运算函数:一键开启!PyTorch 张量函数的宝藏工厂
目录 1. 常见运算函数 个人主页:Icomi 专栏地址:PyTorch入门 在深度学习蓬勃发展的当下,PyTorch 是不可或缺的工具。它作为强大的深度学习框架,为构建和训练神经网络提供了高效且灵活的平台。神经网络作为人工智能的核心技术&…...

C语言练习(31)
有5个学生,每个学生有3门课程的成绩,从键盘输入以上数据(包括学号、姓名、3门课程成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件stud中。 设5名学生的学号、姓名和3门课程成绩如下&am…...

什么是长短期记忆网络?
一、概念 长短期记忆网络(Long Short-Term Memory, LSTM)是一种特殊的循环神经网络(RNN),旨在解决标准RNN在处理长序列时的梯度消失和梯度爆炸问题。LSTM通过引入三个门(输入门、遗忘门和输出门)…...
git中有关old mode 100644、new mode 10075的问题解决小结
在 Git 版本控制系统中,文件权限变更是一种常见情况。当你看到类似 old mode 100644 和 new mode 100755 的信息时,这通常表示文件的权限发生了变化。本文将详细解析这种情况,并提供解决方法和注意事项。 问题背景 在 Git 中,文…...

Jenkins上生成的allure report打不开怎么处理
目录 问题背景: 原因: 解决方案: Jenkins上修改配置 通过Groovy脚本在Script Console中设置和修改系统属性 步骤 验证是否清空成功 进一步的定制 也可以使用Nginx去解决 使用逆向代理服务器Nginx: 通过合理调整CSP配置&a…...

JSR303校验教学
1、什么是JSR303校验 JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。…...

使用DeepSeek技巧:提升内容创作效率与质量
一、引言 在当今快节奏的数字时代,内容创作的需求不断增加,无论是企业营销、个人博客还是学术研究,高效且高质量的内容生成变得至关重要。DeepSeek作为一款先进的人工智能写作助手,凭借其强大的语言生成能力,为创作者…...
【第六天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-一种常见的贪心算法(持续更新)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Python数据结构与算法的详细介绍1.Python中的常用的贪心算法2.贪心算法3.详细的贪心代码1)一种常见的贪心算法 总结 前言 提示:这里…...

C# Winform制作一个登录系统
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 登录 {p…...
算法总结-哈希表
文章目录 1.赎金信1.答案2.思路 2.字母异位词分组1.答案2.思路 3.两数之和1.答案2.思路 4.快乐数1.答案2.思路 5.最长连续序列1.答案2.思路 1.赎金信 1.答案 package com.sunxiansheng.arithmetic.day14;/*** Description: 383. 赎金信** Author sun* Create 2025/1/22 11:10…...

向下调整算法(详解)c++
算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 大家可能会有点疑惑,这个是大根堆,22是怎么跑到…...

蓝桥杯之c++入门(一)【C++入门】
目录 前言5. 算术操作符5.1 算术操作符5.2 浮点数的除法5.3 负数取模5.4 数值溢出5.5 练习练习1:计算 ( a b ) ⋆ c (ab)^{\star}c (ab)⋆c练习2:带余除法练习3:整数个位练习4:整数十位练习5:时间转换练习6ÿ…...
使用Python爬虫获取1688商品拍立淘API接口(item_search_img)的实战指南
在电商领域,通过图片搜索商品(拍立淘)已经成为一种重要的商品检索方式。1688平台的item_search_img接口允许用户通过上传图片来搜索相似商品,这为商品信息采集和市场分析提供了极大的便利。本文将详细介绍如何使用Python爬虫技术调…...

ElasticSearch-文档元数据乐观并发控制
文章目录 什么是文档?文档元数据文档的部分更新Update 乐观并发控制 最近日常工作开发过程中使用到了 ES,最近在检索资料的时候翻阅到了 ES 的官方文档,里面对 ES 的基础与案例进行了通俗易懂的解释,读下来也有不少收获࿰…...

使用Navicat Premium管理数据库时,如何关闭事务默认自动提交功能?
使用Navicat Premium管理数据库时,最糟心的事情莫过于事务默认自动提交,也就是你写完语句运行时,它自动执行commit提交至数据库,此时你就无法进行回滚操作。 建议您尝试取消勾选“选项”中的“自动开始事务”,点击“工…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...