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容器


项目地址

  • 教程作者:
  • 教程地址:
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

  1. 创建node的image
FROM node // 从官方镜像下载,默认为最新

WORKDIR /app  //创建image里的工作目录 

COPY . /app   //将当前程序目录的所有文件复制到docker里的/app目录

RUN npm install  //安装项目所需要的包

EXPOSE 80 //让dokcer将项目的端口暴露为80

CMD ["node", "server.js"] //容器启动时候,启动服务
  1. 创建容器
docker build .
  1. 运行容器
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.json

RUN npm install  //安装项目所需要的包

COPY . /app   //将当前程序目录的所有文件复制到docker里的/app目录

EXPOSE 80 //让dokcer将项目的端口暴露为80

CMD ["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
  1. mysql
    在这里插入图片描述

  2. 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组件;
    1. api:接收外部的指令,restful风格的api;
    2. etcd:集群所有的后台数据以key-value的形式存储的数据库;(可理解为内部redis)
    3. kube- scheduler:用来监视和控制未指定运行节点的pods的,资源调度的
    4. kube-controller-manager:负责运行控制器节点的 ①节点控制器:负责node出现故障时进行响应;②任务控制器:检测一次性job对象,然后创建pods来运行任务直到完成;③端点分片控制器:提供serivice和Pod的连接;④服务账号控制器:未新的命名空间创建服务账号;调度pods的控制进程

Node组件:

  1. Kubelet:启动pods的工作,由kubelet进行调度,确保pods健康运行,
  2. kube-proxy:维护网络规则,负责集群内外部网络交互

2.2 Pod

  • Pod:Pod类似于豌豆荚,豌豆则是pod里的多个豌豆(容器),pod里的容器共享网络和volume,并且总是一同调度的。简而言之,pod帮我们实现了docker里自己使用docker compose 组织容器;
    pod就是用来管理一组容器的集合

1. 如何使用Pod

  1. 不会直接使用单个pod,而是通过Deployment和Job这些kube-controller-manager来创建Pod;
  2. 一个Pod里可以有单个容器,单容器时,K8s直接管理容器而不是pod;
  3. 多个协同工作的容器,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. 容器的生命周期

  • 容器状态:
    1. waiting: 拉去镜像 同步数据等
    2. running: 运行中
    3. ternimate : 终止
2. 生命周期的回调
  1. PostStop:
  2. PreStop:
3. 容器重启策略

容器的重启策略=pod的重启策略,因为k8s的最小计算单元是pod:

  1. always
  2. onFailure
  3. never
4. 自定义容器启动命令
  • args: 修改启动命令
  • command:
5. 容器探针
  • prode 对容器进行定期的健康检查
  1. livenessProbe
  2. readnessProbe: 外部服务是否准备好
  3. startProbe1.7+: 如果提供里启动探针,所有其他探针都会被禁用,直到探针成功,如果启动失败,k8s会杀死容器,然后根据重启策略,启动容器
  • 探针检测的方法: grpc, exec, httpGet, tcpSocket
6. 容器资源限制

metrics-server 对请求,内存,以及cpu进行限制

7. init容器

init容器可以pod的容器运行之前,提前运行镜像中不存在的脚本或者安装脚本.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023年吉林省职业院校技能大赛网络系统管理样题-网络配置(华三代码)

目录 附录1:拓扑图 附录2:地址规划表 1.S1 2.S3 3.S4 4.S5 5.S7 6.S8 7.S9 8.R1 9.R2 10.R3 11.EG1 12.EG2 13.AC1 14.AC2 附录1:拓扑图 编号 型号

HTML-新浪新闻-实现标题-排版

标题排版 图片标签&#xff1a;<img> src&#xff1a;指定图片的url&#xff08;绝对路径/相对路径&#xff09; width&#xff1a;图片的宽度&#xff08;像素/相对于父元素的百分比&#xff09; heigth&#xff1a;图片的高度&#xff08;像素/相对于父元素的百分比&a…

基于物联网的智能环境监测系统(论文+源码)

1系统的功能及方案设计 本课题为基于物联网的智能环境监测系统的设计与实现&#xff0c;整个系统采用stm32f103单片机作为主控制器&#xff0c;通过DHT11传感器实现智能环境监测系统温度和湿度的检测&#xff0c;通过MQ传感器实现CO2浓度检测&#xff0c;通过光照传感器实现光照…

全面解析文件上传下载删除漏洞:风险与应对

在数字化转型的时代&#xff0c;文件上传、下载与删除功能已经成为各类应用程序的标准配置&#xff0c;从日常办公使用的协同平台&#xff0c;到云端存储服务&#xff0c;再到社交网络应用&#xff0c;这些功能在给用户带来便捷体验、显著提升工作效率的同时&#xff0c;也隐藏…

1.2第1章DC/DC变换器的动态建模-1.2Buck-Boost 变换器的交流模型--电力电子系统建模及控制 (徐德鸿)--读书笔记

1.2 Buck-Boost 变换器的交流模型 Buck- Boost变换器是一种典型的DC/DC变换器&#xff0c;具有升压和降压功能其输出电压的极性与输入电压相反&#xff0c;见图1-4a。当电感L的电流i(t)连续时一个开关周期可以分为两个阶段。在阶段1&#xff0c;开关在位置1时&#xff0c;即&am…

06-AD向导自动创建P封装(以STM32-LQFP48格式为例)

自动向导创建封装 自动向导创建封装STM32-LQFP48Pin封装1.选则4排-LCC或者QUAD格式2.计算焊盘相定位长度3.设置默认引脚位置(芯片逆时针)4.特殊情况下:加额外的标记 其他问题测量距离:Ctrl M测量 && Ctrl C清除如何区分一脚和其他脚?芯片引脚是逆时针看的? 自动向导…

若依基本使用及改造记录

若依框架想必大家都了解得不少&#xff0c;不可否认这是一款及其简便易用的框架。 在某种情况下&#xff08;比如私活&#xff09;使用起来可谓是快得一匹。 在这里小兵结合自身实际使用情况&#xff0c;记录一下我对若依框架的使用和改造情况。 一、源码下载 前往码云进行…

面试经典150题——图

文章目录 1、岛屿数量1.1 题目链接1.2 题目描述1.3 解题代码1.4 解题思路 2、被围绕的区域2.1 题目链接2.2 题目描述2.3 解题代码2.4 解题思路 3、克隆图3.1 题目链接3.2 题目描述3.3 解题代码3.4 解题思路 4、除法求值4.1 题目链接4.2 题目描述4.3 解题代码4.4 解题思路 5、课…

基于SpringBoot电脑组装系统平台系统功能实现六

一、前言介绍&#xff1a; 1.1 项目摘要 随着科技的进步&#xff0c;计算机硬件技术日新月异&#xff0c;包括处理器&#xff08;CPU&#xff09;、主板、内存、显卡等关键部件的性能不断提升&#xff0c;为电脑组装提供了更多的选择和可能性。不同的硬件组合可以构建出不同类…

万字长文总结前端开发知识---JavaScriptVue3Axios

JavaScript学习目录 一、JavaScript1. 引入方式1.1 内部脚本 (Inline Script)1.2 外部脚本 (External Script) 2. 基础语法2.1 声明变量2.2 声明常量2.3 输出信息 3. 数据类型3.1 基本数据类型3.2 模板字符串 4. 函数4.1 具名函数 (Named Function)4.2 匿名函数 (Anonymous Fun…

MySQL(单表访问)

今天是新年&#xff0c;祝大家新年快乐&#xff0c;但是生活还是得继续。 后面也会持续更新&#xff0c;学到新东西会在其中补充。 建议按顺序食用&#xff0c;欢迎批评或者交流&#xff01; 缺什么东西欢迎评论&#xff01;我都会及时修改的&#xff01; 大部分截图和文章采…

HarmonyOS简介:应用开发的机遇、挑战和趋势

问题 更多的智能设备并没有带来更好的全场景体验 连接步骤复杂数据难以互通生态无法共享能力难以协同 主要挑战 针对不同设备上的不同操作系统&#xff0c;重复开发&#xff0c;维护多套版本 多种语言栈&#xff0c;对人员技能要求高 多种开发框架&#xff0c;不同的编程…

【Elasticsearch】Elasticsearch的查询

Elasticsearch的查询 DSL查询基础语句叶子查询全文检索查询matchmulti_match 精确查询termrange 复合查询算分函数查询bool查询 排序分页基础分页深度分页 高亮高亮原理实现高亮 RestClient查询基础查询叶子查询复合查询排序和分页高亮 数据聚合DSL实现聚合Bucket聚合带条件聚合…

使用 KNN 搜索和 CLIP 嵌入构建多模态图像检索系统

作者&#xff1a;来自 Elastic James Gallagher 了解如何使用 Roboflow Inference 和 Elasticsearch 构建强大的语义图像搜索引擎。 在本指南中&#xff0c;我们将介绍如何使用 Elasticsearch 中的 KNN 聚类和使用计算机视觉推理服务器 Roboflow Inference 计算的 CLIP 嵌入构建…

LogicFlow 一款流程图编辑框架

LogicFlow是什么 LogicFlow是一款流程图编辑框架&#xff0c;提供了一系列流程图交互、编辑所必需的功能和灵活的节点自定义、插件等拓展机制。LogicFlow支持前端自定义开发各种逻辑编排场景&#xff0c;如流程图、ER图、BPMN流程等。在工作审批流配置、机器人逻辑编排、无代码…

几种K8s运维管理平台对比说明

目录 深入体验**结论**对比分析表格**1. 功能对比****2. 用户界面****3. 多租户支持****4. DevOps支持** 细对比分析1. **Kuboard**2. **xkube**3. **KubeSphere**4. **Dashboard****对比总结** 深入体验 KuboardxkubeKubeSphereDashboard 结论 如果您需要一个功能全面且适合…

《HelloGitHub》第 106 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

R语言学习笔记之高效数据操作

一、概要 数据操作是R语言的一大优势&#xff0c;用户可以利用基本包或者拓展包在R语言中进行复杂的数据操作&#xff0c;包括排序、更新、分组汇总等。R数据操作包&#xff1a;data.table和tidyfst两个扩展包。 data.table是当前R中处理数据最快的工具&#xff0c;可以实现快…

【微服务与分布式实践】探索 Dubbo

核心组件 服务注册与发现原理 服务提供者启动时&#xff0c;会将其服务信息&#xff08;如服务名、版本、所在节点的网络地址等&#xff09;注册到注册中心。服务消费者则可以从注册中心发现可用的服务提供者列表&#xff0c;并与之通信。注册中心会存储服务的信息&#xff0c…

SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)

7.3. 查询计划相关操作符 38)Flow Distinct:该操作符扫描其输入并对其去重。该操作符从其输入得到每行数据时即将其返回(除非其为重复数据行,此时,该数据行会被抛弃),而Distinct操作符在产生任何输出前将消费所有输入。该操作符为逻辑操作符。该操作符具体如图7.2-38中…