导图社区 dockerk8s
docker+k8s的思维导图,docker是开源的一个构建在LXC的高级容器引擎之上,基于进程容器的轻量级VM解决方案。
编辑于2023-08-17 09:52:20docker+k8s
容器虚拟化平台
容器概念
让开发者可以打包他们的应用以及依赖包到一个可移植的镜像文件中,然后发布到任何流行的操作系统的机器上,也可以实现虚拟化;他们不依赖于任何语言、框架或包装系统。
docker概念
开源的一个构建在LXC的高级容器引擎之上,基于进程容器的轻量级VM解决方案
Docker的应用场景
自动化安装部署运维
PaaS 环境
Docker介绍及原理
Docker的生态圈
与容器技术相关的虚拟化技术
lxc
podman
Docker VS VM
启动速度
并发性--数量
隔离性
体积
子主题 5
运行形态
资源使用率
Docker资源管理
namespace
cgroup
Docker文件系统管理
aufs
分层
只读
容器在最上层可写
Docker三大核心
容器
镜像
仓库
公有
hub.docker.com
私有
harbor
安装使用
yum安装
docker-cc
docker-ce
docker常用命令
仓库
docker pull
docker push
docker login
镜像
docker images == docker image ls
docker rmi == docker image rm
docker save
docker load
docker export/import
docker build
docker commit
docker inspect
docker tag
容器
docker run
-itd
docker rm
docker ps
docker start|stop|restart|kill
docker log
docker exec|attach
docker inspect
docker stats
网络
docker network ls
docker network create
docker network rm
docker network connect
docker network disconnect
docker network inspect
数据卷
docker volume ls
docker volume rm
docker volume inspect
docker volume create
虚拟化平台镜像管理
概念
Docker镜像是一个只读的docker容器的模版,含有启动docker容器所需的文件系统结构及其内容。这个文件系统就是rootfs
镜像特性
分层
只读
体积小
查看镜像分层信息的方法
rootfs vs bootfs
写时复制
容器层的特殊性
可写
内容寻址
管理镜像层
通过hash算法产生唯一的层id
查看方法
联合挂载
容器中看到的完整文件系统,来自多个层
本地存储
本地存储位置
/var/lib/docker/images/overlay2
镜像制作
将容器打包为镜像
docker commit
通过Dockerfile脚本制作镜像
docker build
Dockerfile脚本
概念
Dockfile是一种被Docker程序解释的脚本。
Docker程序将读取Dockerfile,根据指令生成定制的image。
指令
FROM
指定基础镜像
RUN
特性
CMD
特性
ENTRYPOINT
特性
COPY
ADD
ENV
VOLUME
USER
WORKDIR
EXPOSE
虚拟化平台资源管理
资源管理cgroup
防止某容器把所有的硬件都占用
CPU、内存、磁盘
容器主机名
docker run -h
容器名
docker run --name
启动策略管理
作用
重启引擎或宿主机的时候,容器的运行状态管理
docker run --restart
四策略
no
always
on-failure
unless-stopped
容器常见状态
run
exit
0
137
子主题 3
docker update
容器清除策略
docker run --rm
资源配额管理
cpu
-c int #指定容器所使用的CPU权重值(相对)
注意
多个容器
如果只有一个容器运行权重无效
--cpuset-cpus
指定容器运行在哪颗cpu上
内存
--cpuset-mems
绑定内存个数,用于多处理器的设计
-m
限制容器的内存使用大小
查看方法
cat /sys/fs/cgroup/memory/memory.limit_in_bytes
磁盘I/O
--device-read-bps list
限制此设备上的每秒读速度
--device-write-bps list
限制此设备上的每秒写速度
测试工具
stress
压力测试工具
stress -c cpu进程数 -i 内存进程数 -t 运行时间
taskset -cp 1,2 [sshdpid]
容器私有仓库搭建
容器技术在软件部署方法上的思想改变
直接下载并使用registry镜像启动docker容器
搭建私有仓库
官方测试仓库
docker run -d -p 5000:5000 -v /opt/registry:/var/lib/registry registry
-p 宿主机端口:容器端口
-v
数据卷或目录挂载至容器中
镜像文件实际存放目录
阿里云或hub.docker.com
harbor
harbor介绍
离线安装包进行安装
harbor平台使用多个容器服务构建
docker-compose容器编排工具
管理服务命令
docker-compose start|stop|restart 管理
docker-compose
必须在harbor安装目录执行
常用镜像文件
busybox
alpine
私有仓库使用
登 入docker login
准备镜像docker tag
推送镜像文件至仓库docker push
从仓库中拉取镜像文件docker pull
容器网络和数据存储
容器网络
单机四种模式
bridge
默认
容器拥有独立、隔离的网络栈
docker0
none
没有网络,没有网关,没有dns
适用于不需要网络的容器服务
host
容器共享使用宿主机网络
网络隔离差
与宿主机竞争网络资源
container
共享已经存在的容器的网络
网络隔离差
跨主机的网络模式
overlay
ingress
docker_gwbridge
macvlan
网络管理
docker network
指定容器网络
docker run --net=网络模式 --ip指定容器ip
数据存储
默认情况下容器不能完成数据的持久保存
四种模式
默认
tmpfs
速度快,做内存使用
数据卷
可做数据持久
匿名卷
普通卷
docker volume create 卷名
/var/lib/docker/volumes
共享存储
可做数据持久
把本地文件夹与容器中文件夹绑定bind
存储管理
docker volume
指定容器存储
docker run -v
-v 数据卷名:容器内目录 普通卷 -v 容器内目录 匿名卷 -v 本地目录:容器内目录 挂载共享目录
数据卷容器
多个容器共享一个容器的存储
--volumes-from
Hadoop环境的搭建与管理1
大数据概念
大数据是指无法在有限时间内用常规软件工具对其进行获取、存储、管理和处理的数据集合。
大数据特点
数据体量巨大
数据速度快
数据类型繁多
数据价值密度低
hadoop概念
大数据收集存储分析处理平台
分布式存储
分布式计算
Hadoop版本
hadoop1
hadoop2
hadoop3
区别
结构组成
mapreduce
计算
两个过程
map
reduce
yarn
调度
结构组成
rm
管理集群,调度中心
nm
节点主机
am
负责数据的切分
容器
封装节点上的多维度资源
hdfs
存储
结构组成
元数据服务
元数据日志服务
数据存储服务
客户端
读写流程
Hadoop生态圈
hbase
列类型非关系数据
Kafka
一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据
vs mq
大数据部门组织结构
平台组
hadoop平台部署维护
报表组
数据可视化制作报表
Hadoop环境的搭建与管理2
环境搭建
方式
伪装分布式
完全分布试
过程
jdk
hadoop
运行模式
本地运行模式
不需要配置,直接使用程序代码运行计算
开发 学习
伪分布运行模式
模拟种组件,运行程序代码进行计算
集群运行模式
生产环境中用到的
多服务组成完整平台
完全分布式安装部署过程
集群启动方法
单点
在各个节点服务器上启动相应服务
hadoop-daemon.sh start namenode|datanode
分布式群启
安装目录下/sbin/start-dfs.sh
start-yarn.sh
start-all.sh
hdfs基本应用
上传
查看
下载
扩展
docker搭建hadoop分布式集群
过程
制作镜像
运行容器
配置文件,存储空间,及日志文件
使用共享目录方式共享至容器内
Dockerfile
制作ssh镜像
制作jdk镜像
环境变量
制作hadoop镜像
启动
创建专用网络
为每个容器指定ip
启动并配置容器中的hadoop
容器==主机
扩展
使用docker部署apache nginx
使用docker部署mysql
使用docker部署zabbix
Docker-Compose容器编排
基本概念
负责实现Docker容器集群的快速编排的一个重要实用工具
通过compose可以批量管理多个容器
工作原理
docker-compose.yml模板文件定义多个容器的管理方法
docker-compose命令支行docker-compose.yml模板实现多容器管理
核心概念
项目
包含docker-compose.yml模板文件在内多个容器使用的资源文件夹
服务
service就是一组容器的组合
容器
定义在service中的间个服务容器
Compose基本分为三步
Dockerfile制作镜像 docker-compose.yml定义容器运行参数 docker-compose命令管理容器
docker-compose.yml文件
yaml语言
YAML是一个可读性高,用来表达数据序列化格式的语言
基本语法
数据类型
文件结构
第一行版本声名
版本和docker版本是有对应关系的
service
定义服务
包含一组容器
单个服务容器定义
具体定义项可参考docker run --help 相关选顶
同时存在build和image会怎么样
安装docker-compose
版本
1.x
python的pip安装
二进制安装
2.x
安装docker默认集成
用法
1.x
docker-compose 选项 子命令
2.x
docker compose 选项 子命令
Compose常用命令
build config create down events exec help images kill logs pause port
up
为一个服务构建、创建、启动、附加到容器
scale
设置为一个服务启动的容器数量
docker搭建Swarm1
概念
管理docker集群的平台。 它是将一群Docker宿主机变成一个单一的虚拟主机。 Swarm内置支持Docker网络插件,很容易的部署跨主机的容器集群服务
对比 compose
特点
具有容错能力的去中心化设计、内置服务发现、负载均衡、路由网格、动态伸缩、滚动更新、安全传输等。
对k8s
解决基本特点
基本概念
节点
安装docker引擎一台物理机或云主机
Manager管理器节点
接收客户端服务定义(命令),将任务发送到worker节点; 维护集群期望状态和集群管理功能及Leader选举
worker工作节点
接收并执行从管理节点分配的任务,并报告任务当前状态
Service
服务是指一组任务的集合,服务定义了任务的属性
任务
任务是Swarm中最小的调度单位, 目前来说就是单一的容器
基本管理命令
docker swarm
docker node
docker service
docker搭建Swarm2
安装
系统已经集成swarm
集群部署过程
1、docker swarm init
ingress
docker_gwbridge
2、docker swarm join
ingress
docker_gwbridge
docker swarm基本命令
init 初始化集群环境 join 节点加入集群环境 join-token 查看加入环境的识别字符串 leave 脱离集群
docker node基本命令
demote 降级节点权限 promote 升级节点权限 inspect 查看节点详细信息 ls 查看节点列表 ps 列举节点运行的任务 rm 删除无效的节点 update 更新节点信息
docker service基本命令
create 创建新的容器服务集群 Inspect 查看容器服务详细信息 logs 查看服务运行日志 ls 查看服务列表 ps 查看服务运行情况 rm 删除容器服务集群 update 更新服务参数
scale 修改容器服务副本个数
特性应用
scale
docker service scale [SERVICE_NAME]=[REPLICAS]
如果预期状态为REPLICAS=3,当其中一个容器异常会自动启动新的数据保持容器数量
节点管理
只有work角色的节点才能直接脱离集群
master角色节点需要降级后才能脱离集群
Service模式
Replicated副本模式-默认
Global全局模式
可用的工作节点都支行一个容器副本
Service约束服务
在指定的节点主机上运行容器
默认情况系统自主调度
Service更新策略
滚动更新
--update-delay --update-failure-action --update-max-failure-ratio --update-monitor --update-order --update-parallelism
Service回滚策略
--rollback-delay --rollback-failure-action --rollback-max-failure-ratio --rollback-monitor --rollback-order --rollback-parallelism
overlay网络
作用
多个节点主机上的容器组网
网络概念
ingress
docker_gwbridge
服务发布模式
将容器服务发布至互联网
两种模式
Ingress模式
负载均衡
Host模式
通过运行有容器的节点服务器才可以访问服务
路由网格
负载均衡
实现负载均衡的过程
访问主机端口(例如80) -> Iptables -> 容器Ingress-sbox(overlay网络) -> IPVS分发任务(响应容器container)
服务自动发现
搭建Kubernetes容器集群管理系统
概念
vs swarm
Kubernetes开源的容器集群管理系统,一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件。
结构组成
节点
master
管理结点
minion
工作节点
etcd
k8s平台配置数据库
服务组件
apiserver
提供接口服务,用户通过apiserver来管理整个容器集群平台
scheduler
调度资源服务
Replication Controllers
维护预期状态,保证pod的高可用
以上三个服务运行在master节点
container
容器支持docker podman等
pod
k8s调度的最小单位,是一个可以被创建、销毁、调度、管理的最小的部署单元。pod中可以包括一个或一组容器
Kube_proxy
Proxy解决了同一宿主机,相同容器服务端口冲突的问题
可实现负载均衡
以上支行在minion节点
Services
通过虚拟一个访问IP及服务端口,可以访问我们定义好的Pod资源
Deployment
你可以在Deployment 对象中只描述你所期望的理想状态(预期的运行状态),Deployment 控制器会将现在的实际状态转换成期望的状态
Labels
Labels 是用于区分Pod、Service、Replication Controller 的 key/value 键值对
Kubelet
运行在minion节点上管理容器的
Kubelet命令管理Pod、Pod中容器及容器的镜像和卷等信息
各组件之间的关系
1、2、3、4、5参考笔记
安装部署
flannel
k8s的网络组件
相当于swarm中的macvlan、overlay
配置信息记录在etcd数据库中
启动要求先启动etcd再启动flannel
1)从etcd中获取出/k8s/network/config的值 2)划分subnet子网,并在etcd中进行注册 3)将子网信息记录到/run/flannel/subnet.env中
apiserver
服务端口默认8080
etcd数据库基本操作
etcdctl
CRUD 即 Create, Read, Update, Delete
pod中基础容器
所有的pod中存在的
pod-infrastructure
总结
4个结点
etcd master minion两个
13个服务、
etcd节点
etcd
master节点
kube-apiserver kube-controller-manager kube-scheduler flanneld
minion2个节点
flanneld kube-proxy kubelet docker
6个端口号
kubeproxy监控听端口号是10249 kubelet监听端口10248、10250、10255
etcd监听端口2379
apiserver监听8080 端口
使用kubectl 管理Kubernetes容器平台
kubectl概述
k8s平台命令行管理工具
创建和删除一个pod 相关操作
run 在集群上运行一个 pod create 使用文件或者标准输入的方式创建一个 pod delete 使用文件或者标准输入以及资源名称或者标签选择器来删除某个pod
其中create 和 delete还可以管理service及deployment
pod状态
ContainerCreating
ImagePullBackOff
terminating
Running
查看命令
kubectl get
kubectl describe
查看 service deployment pod node
资源配置文件yaml
deployment.yml
基本结构
Deployment 的定义 pod 的定义 容器的定义
imagePullPolicy
Always 一直从外网下载镜像,不用使用本地的。
IfNotPresent :如果本地存在镜像就优先使用本地镜像。
Never:直接不再去拉取镜像了,使用本地的; 如果本地不存在就报异常了。
service.yml
selector
标签选择器要求必须在deployment中定义
端口定义
nodePort物理机的公网上的端口 targetPort: 80 指定是容器的端口 port: 80 pod端口号定义
kubectl其他常用命令和参数说明
logs 取得 pod 中容器的 log 信息 exec 在 pod 中执行一条命令 cp 从容器拷出或向容器拷入文件 attach 到一个运行中的容器上,实时查看容器消息
管理deployment 资源和service 服务
kubectl edit 编辑服务器资源 kubectl replace 替换,使用 yaml 配置文件来替换正在运行中的配置参数 kubectl patch 部分更新资源相关信息 kubectl autoscale Deployment/ReplicaSet/RC 的自动扩展设定 kubectl cordon 设定 node 不可使用 kubectl uncordon 设定 node 可以使用 kubectl drain 设定 node 进入维护模式
kubectl apply 使用文件或者标准输入更改配置信息
kubectl scale 重新设定 Deployment/ReplicaSet/RC/Job 的 size
基于k8s搭建redis集群案例
部署Kubernetes Dashboard web界面
使用web_gui管理k8s平台
走apiserver端口
service概述:
service是pod的路由代理抽象
结合第一章内容理解
replicationController
是pod的复制抽象
维护预期状态
flannel基本工作原理
通过flannel实现不同物理机之间docker容器实例的通信。