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

  1. 创建node的image
FROM node // 从官方镜像下载,默认为最新WORKDIR /app  //创建image里的工作目录 COPY . /app   //将当前程序目录的所有文件复制到docker里的/app目录RUN npm install  //安装项目所需要的包EXPOSE 80 //让dokcer将项目的端口暴露为80CMD ["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.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
  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的容器运行之前,提前运行镜像中不存在的脚本或者安装脚本.

2.5 Deployment 控制器

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源免费】基于SpringBoot+Vue.JS公交线路查询系统(JAVA毕业设计)

本文项目编号 T 164 ,文末自助获取源码 \color{red}{T164,文末自助获取源码} T164,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

< OS 有关 > Android 手机 SSH 客户端 app: connectBot

connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上,连接 SSH 服务器,去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …

中国股市“慢牛”行情的实现路径与展望

在现代经济体系中,股市不仅是企业融资的重要平台,也是投资者财富增值的关键渠道。一个健康、稳定、持续增长的股市,对于推动经济高质量发展、提升国家金融竞争力具有深远意义。近年来,“慢牛”行情成为众多投资者和市场参与者对我…

Linux Samba 低版本漏洞(远程控制)复现与剖析

目录 前言 漏洞介绍 漏洞原理 产生条件 漏洞影响 防御措施 复现过程 结语 前言 在网络安全的复杂生态中,系统漏洞的探索与防范始终是保障数字世界安全稳定运行的关键所在。Linux Samba 作为一款在网络共享服务领域应用极为广泛的软件,其低版本中…

ResNet 残差网络

目录 网络结构 残差块(Residual Block) ResNet网络结构示意图 残差块(Residual Block)细节 基本残差块(ResNet-18/34) Bottleneck残差块(ResNet-50/101/152) 残差连接类型对比 变体网…

【Unity3D】实现横版2D游戏角色二段跳、蹬墙跳、扶墙下滑

目录 一、二段跳、蹬墙跳 二、扶墙下滑 一、二段跳、蹬墙跳 GitHub - prime31/CharacterController2D 下载工程后直接打开demo场景:DemoScene(Unity 2019.4.0f1项目环境) Player物体上的CharacterController2D,Mask添加Wall层…

FPGA 使用 CLOCK_LOW_FANOUT 约束

使用 CLOCK_LOW_FANOUT 约束 您可以使用 CLOCK_LOW_FANOUT 约束在单个时钟区域中包含时钟缓存负载。在由全局时钟缓存直接驱动的时钟网段 上对 CLOCK_LOW_FANOUT 进行设置,而且全局时钟缓存扇出必须低于 2000 个负载。 注释: 当与其他时钟约束配合…

Excel 技巧21 - Excel中整理美化数据实例,Ctrl+T 超级表格(★★★)

本文讲Excel中如何整理美化数据的实例,以及CtrlT 超级表格的常用功能。 目录 1,Excel中整理美化数据 1-1,设置间隔行颜色 1-2,给总销量列设置数据条 1-3,根据总销量设置排序 1-4,加一个销售趋势列 2&…

Leetcode:219

1&#xff0c;题目 2&#xff0c;思路 第一种就是简单的暴力比对当时过年没细想 第二种&#xff1a; 用Map的特性key唯一&#xff0c;把数组的值作为Map的key值我们每加载一个元素都会去判断这个元素在Map里面存在与否如果存在进行第二个判断条件abs(i-j)<k,条件 符合直接…

MySQL(高级特性篇) 14 章——MySQL事务日志

事务有4种特性&#xff1a;原子性、一致性、隔离性和持久性 事务的隔离性由锁机制实现事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证&#xff08;1&#xff09;REDO LOG称为重做日志&#xff0c;用来保证事务的持久性&#xff08;2&#xff09;UNDO LOG称为回…

芯片AI深度实战:进阶篇之vim内verilog实时自定义检视

本文基于Editor Integration | ast-grep&#xff0c;以及coc.nvim&#xff0c;并基于以下verilog parser(my-language.so&#xff0c;文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下&#xff1a; 需要的配置如下&#xff1a; 系列文章&#xff1a; 芯片…

C++:多继承习题5

题目内容&#xff1a; 先建立一个Point(点)类&#xff0c;包含数据成员x,y(坐标点)。以它为基类&#xff0c;派生出一个Circle(圆)类&#xff0c;增加数据成员r(半径)&#xff0c;再以Circle类为直接基类&#xff0c;派生出一个Cylinder(圆柱体)类&#xff0c;再增加数据成员h…

基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发

基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发 摘要 随着人工智能技术的不断发展&#xff0c;语音识别在会议记录、语音笔记等场景中得到了广泛应用。本文介绍了一个基于Python和阿里云百炼大模型的语音识别与文本保存工具的开发过程。该工具能够高效地识别东…

buu-pwn1_sctf_2016-好久不见29

这个也是栈溢出&#xff0c;不一样的点是&#xff0c;有replace替换&#xff0c;要输入0x3c字符&#xff08;60&#xff09;&#xff0c;Iyou 所以&#xff0c;20个I就行&#xff0c;找后面函数 输出提示信息&#xff0c;要求用户输入关于自己的信息。 使用fgets函数从标准输入…

【C语言】在Windows上为可执行文件.exe添加自定义图标

本文详细介绍了在 Windows 环境下,如何为使用 GCC 编译器编译的 C程序 添加自定义图标,从而生成带有图标的 .exe 可执行文件。通过本文的指导,读者可以了解到所需的条件以及具体的操作步骤,使生成的程序更具专业性和个性化。 目录 1. 准备条件2. 具体步骤步骤 1: 准备资源文…

分布式系统架构怎么搭建?

分布式系统架构 互联网企业的业务飞速发展&#xff0c;促使系统架构不断变化。总体来说&#xff0c;系统架构大致经历了单体应用架构—垂直应用架构—分布式架构—SOA架构—微服务架构的演变&#xff0c;很多互联网企业的系统架构已经向服务化网格&#xff08;Service Mesh&am…

阿里巴巴Qwen团队发布AI模型,可操控PC和手机

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

从 UTC 日期时间字符串获取 Unix 时间戳:C 和 C++ 中的挑战与解决方案

在编程世界里&#xff0c;从 UTC 日期时间字符串获取 Unix 时间戳&#xff0c;看似简单&#xff0c;实则暗藏玄机。你以为输入一个像 “Fri, 17 Jan 2025 06:07:07” 这样的 UTC 时间&#xff0c;然后轻松得到 1737094027&#xff08;从 1970 年 1 月 1 日 00:00:00 UTC 开始经…

ESP32-CAM实验集(WebServer)

WebServer 效果图 已连接 web端 platformio.ini ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library stor…

DRF开发避坑指南01

在当今快速发展的Web开发领域&#xff0c;Django REST Framework&#xff08;DRF&#xff09;以其强大的功能和灵活性成为了众多开发者的首选。然而&#xff0c;错误的使用方法不仅会导致项目进度延误&#xff0c;还可能影响性能和安全性。本文将从我个人本身遇到的相关坑来给大…