dockerk8s常用知识点

server/2024/9/23 12:41:16/

1、什么是docker

容器化和虚拟化对比

▪开源的应用容器引擎,基于 Go 语言开发

容器是完全使用沙箱机制,容器开销极低

▪Docker就是容器化技术的代名词 

▪Docker也具备一定虚拟化职能

docker三大核心:

  1. Docker Engine: 提供了一个可以用来运行和管理容器的平台,它由客户端和服务端组成。

  2. Docker Compose: 用于定义和运行多容器Docker应用的工具(单机)。

  3. Docker Swarm: 用于管理Docker集群的工具,可以将多个Docker主机组成的系统转换为单一的虚拟Docker主机(集群)。

2、容器与镜像

▪镜像: 镜像是文件,是只读的,提供了运行程序完整的软硬件资源,是应用程序的"集装箱"

容器: 是镜像的实例,由Docker负责创建,容器之间彼此隔离

3、docker执行流程

4、docker常用指令

docker pull 镜像名<:tags> - 从远程仓库抽取镜像 
docker images - 查看本地镜像
docker run 镜像名<:tags> - 创建容器,启动应用
docker ps - 查看正在运行中的镜像
docker rm <-f> 容器id - 删除容器
docker rmi <-f> 镜像名:<tags> - 删除镜像--容器中执行的命令
格式:docker exec [-it] 容器id 命令
exec 在对应容器中执行命令
-it 采用交互方式执行命令
实例:docker exec -it 0738ed2fe68b /bin/bash

5、Dockerfile构建镜像

▪Dockerfile是一个包含用于组合镜像的命令的文本文档

▪Docker通过读取Dockerfile中的指令按步自动生成镜像

docker build -t 机构/镜像名<:tags> Dockerfile目录

tomcat部署应用的dockerfile

FROM tomcat:latest
MAINTAINER ccp
WORKDIR /usr/local/tomcat/webapps   --设置工作目录
ADD docker-web ./docker-web         --复制文件(从宿主机复制到容器

xxl-job对应的dockerfile

FROM openjdk:8-jre-slim
MAINTAINER xuxueliENV PARAMS=""ENV TZ=PRC        --设置环境常量
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
--RUN 相当于在Build构建时执行命令ADD target/xxl-job-admin-*.jar /app.jar --复制文件ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]
--ENTRYPOINT 容器启动时执行的命令--CMD 容器启动后执行默认的命令或参数

6、镜像分层(layer)

7、dockerFile执行命令

ENV 设置环境常量
RUN 相当于在Build构建时执行命令
ADD 复制文件
ENTRYPOINT 容器启动时执行的命令
CMD 容器启动后执行默认的命令或参数

8、容器间通信

Link单向通信

Bridge网桥双向通信

网桥实现原理--虚拟网卡

9、容器间数据共享(volumn)

格式:
docker run --name 容器名  -v 宿主机路径:容器内挂载路径 镜像名
实例:
docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat▪创建共享容器docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
▪共享容器挂载点
▪docker run --volumes-from webpage --name t1 -d tomcat

10、Kubernetes的职责

▪自动化容器的部署和复制

▪随时扩展或收缩容器规模

容器分组Group,并且提供容器间的负载均衡

▪实时监控, 即时故障发现, 自动替换

10.1、基本概念

10.2、pod的概念

▪POD是”容器”的容器,可以包含多个”Container”

▪POD是K8S最小可部署单元,一个POD就是一个进程

▪POD内部容器网络互通,每个POD都有独立虚拟IP

▪POD都是部署完整的应用或模块

 ▪Pause容器是基于Docker的pause镜像实现的,它本身不包含任何业务逻辑,但为其他容器提供了网络、存储卷和其他资源的共享访问。Pause容器充当Pod中其他容器的父进程,帮助管理它们的生命周期。它还负责创建和配置Pod的网络命名空间,确保Pod内容器之间的网络通信

10.3、service

  • Service 主要用于提供网络服务,通过 Service 的定义,能够为客户端应用提供稳定的访问地址(域名或 IP 地址)和负载均衡功能,以及屏蔽后端 Endpoint 的变化,是 K8s 实现微服务的核心资源。

利用Rinetd(端口转发工具)实现service的负载均衡

▪Rinetd是Linux操作系统中为重定向传输控制协议工具

▪可将源IP端口数据转发至目标IP端口

▪在Kubernetes中用于将service服务对外暴露

10.4、文件集群共享(NFS)

▪NFS,是由SUN公司研制的文件传输协议

▪NFS主要是采用远程过程调用RPC机制实现文件传输

▪yum install -y nfs-utils rpcbind

10.5、kubeadm/kubelet/kubectl区别

▪kubeadm是kubernetes集群快速构建工具

▪kubelet运行在所有节点上,负责启动POD和容器,以系统服务形式出现

▪kubectl:kubectl是kubenetes命令行工具,提供指令

10.6、部署(Deployment)

▪部署是指Kubernetes向Node节点发送指令,创建容器的过程

▪Kubernetes支持yml格式的部署脚本

▪kubectl create -f 部署yml文件 #创建部署

部署yml样例

与部署相关命令

▪kubectl create -f 部署yml文件 #创建部署
▪kubectl apply -f 部署yml文件 #更新部署配置
▪kubectl get pod [-o wide] #查看已部署pod
▪kubectl describe pod pod名称 #查看Pod详细信息
▪kubectl logs [-f] pod名称 #查看pod输出日志
▪kubectl delete deployment|service #删除部署(Deployment)|服务(Service)资源限定
containers:- name: tomcat-clusterimage: tomcat:latestresources:requests:cpu: 1 memory: 500Milimits: cpu: 2memory: 1024Mi

10.7、pod自动扩缩容

手动模式:通过 kubectl scale 命令,这样需要每次去手工操作一次,而且不确定什么时候业务请求量就很大了,所以如果不能做到自动化的去扩缩容的话,这也是一个很麻烦的事情。

自动模式:
1、kubernetes HPA(Horizontal Pod Autoscaling):根据监控指标(cpu 使用率、磁盘、自定义的等)自动扩容或缩容服务中的pod数量,当业务需求增加时,系统将无缝地自动增加适量 pod 容器,提高系统稳定性。

2、kubernetes KPA(Knative Pod Autoscaler):基于请求数对 Pod 自动扩缩容,KPA 的主要限制在于它不支持基于 CPU 的自动扩缩容。

3、kubernetes VPA(Vertical Pod Autoscaler):基于 Pod 的资源使用情况自动设置 pod 的 CPU 和内存的 requests,从而让集群将 Pod 调度到有足够资源的最佳节点上。

各节点CPU、内存等资源的 metrics 信息可以通过 Metrics API 来获取,用户可以直接获取这些 metrics 信息(例如通过执行 kubect top 命令),HPA 使用这些 metics 信息来实现动态伸缩。


http://www.ppmy.cn/server/37536.html

相关文章

WPF 图片显示某一部分区域

效果图&#xff1a; 代码&#xff1a; <Image Width"32"HorizontalAlignment"Right"Height"32"Source"../../Resources/Images/BLUEWOLF.jpg"><Image.Clip><PathGeometry><PathFigure StartPoint"32,32&quo…

Golang 开发实战day12 - Pointer

&#x1f3c6;个人专栏 &#x1f93a; leetcode &#x1f9d7; Leetcode Prime &#x1f3c7; Golang20天教程 &#x1f6b4;‍♂️ Java问题收集园地 &#x1f334; 成长感悟 欢迎大家观看&#xff0c;不执着于追求顶峰&#xff0c;只享受探索过程 Golang 开发实战day12 - 指针…

专题模块项目功能说明和运行方法-02

项目集介绍 SpringbootSeries父工程 此模块中只有一个pom.xml文件&#xff0c;是后面所有模块的父模块&#xff0c;主要功能有两个&#xff1a;子模块管理和依赖管理。 类别必选可选基础框架jdk 17 spring-boot-starter 3.2.4spring-boot-starter-web 3.2.4spring-cloud 2023…

Mybatis进阶4-权限管理

权限管理 1.权限 //相当于 职责 2.用户 //相当于 职员&#xff08;职员就职于一个职位&#xff09; 3.角色 //相当于 职位&#xff08;有多个职责&#xff09; 权限管理基础表&#xff1a;权限表&#xff0c;用户表&#xff0c;角色表 问题1&#xff1a;…

面向对象 01:Java 面向对象相关内容

前言 记录时间 [2024-05-07] 基础篇文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 02&#xff1a;Java 开发环境的搭建&#xff0c;IDEA / Notepad / JDK 安装及环境配置&#xff0c;编写第一个 Java 程序 Java 笔记 11…

算法精讲:选择排序

基本思想 每一趟从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;顺序放在待排序的数列的最前端&#xff0c;直到所有元素排完。 排序过程 初始关键字&#xff1a;【3 1 5 4 2】 第一趟排序后&#xff1a;1【3 5 4 2】 第二趟排序后&am…

mysql5.7数据库安装及性能测试

mysql5.7数据库安装及性能测试 记录Centos7.9下安装mysql 5.7并利用benchmark工具简单测试mysql的性能。 测试机&#xff1a;centos7.9 配置&#xff1a;4C8G40G 1. 下安装mysql5.7 安装mysql5.7&#xff1a; # 通过官方镜像源安装$ wget http://dev.mysql.com/get/mysql57-com…

电路板第一次调试注意事项

电路板第一次调试注意事项 调板经验其他人的经验一、上电前检查1、目测检查2、电源短路检查3、连线检查4、元器件安装检查 二、通电后检测1、通电观察2、静态调试3、动态调试 调板经验 1.打开原理图 PCB&#xff0c;熟悉一遍。 2.拿到板&#xff0c;找到输入正负极&#xff0…