Docker+K8s基础(重要知识点总结)

简介: Docker+K8s基础(重要知识点总结)

一、Docker的核心

1,Docker引擎
  • 定义
    基于单主机运行的守护进程

  • 作用
    创建和管理容器
2,Docker基础命令
docker ps
列出所有运行中的容器
docker ps -a
列出所有容器
docker run
前端启动运行容器
docker run -d
后台启动运行容器
docker stop
发送SIGTERM到容器,一定时间内没有停止,则会再送SIGKILL信号
docker skill
发送SIGKILL信号到容器
docker restart
重启容器
docker rm
移除容器
docker rm $(docker ps -a -q)
删除所有处于停止中的容器
docker build
构建一个新镜像
docker images
列出所有的镜像
docker rmi
移除镜像
3,单个容器运行多个服务进程

使用Supervisor来监控并运行

Supervisor:用来控制多个进程的普通程序

4,多个容器运行多个服务进程

通过设置 --link 选项将容器连接在一起

5,备份在容器中运行的数据库
  • 方式一 进入容器执行数据库备份命令
  • 方式二 通过设置 -v 选项将宿主机和容器中的卷绑定
6,在宿主机和容器之间共享数据

通过设置 -v 选项将宿主机的卷挂载到容器中

7,在容器之间共享数据

通过设置 -v 选项创建一个称为数据容器的容器

8,对容器进行数据复制

使用 docker cp 命令将文件从正在运行的容器复制到 Docker 主机

二、Docker网络

1,查看容器的IP地址
  • 方式一
    docker inspect命令并指定一个Go模板格式
docker inspect --format '{{ .NetworkSettings.IPAddress }}' flask
  • 方式二
    docker exec 命令在容器内部执行命令
docker exec -ti flask ip add | grep global
  • 方式三
    查看容器内的 /etc/hosts 文件
docker exec -ti flask cat /etc/hosts | grep flask
  • 方式四
    进入容器中的 shell,输入标准的 Linux 命令
docker exec -ti flask bash || cat /etc/hosts
2,将容器端口暴露到主机上
  • 方式一
    docker run 命令的 -P 选项将容器内的端口动态绑定到宿主机上
docker run -d -p 5000 --name foobar flask
  • 方式二
    创建镜像时,在Dockerfile 中添加 EXPOSE 5000
docker run -d -P flask
3, 单主机容器间通信
  • 单台 Docker 主机网络拓扑图
4,多主机容器间通信

多主机环构建一个通用路由封装(Generic Routing Encapsulation,GRE)来对 IPv4 通信进行封装,并为容器之间互连提供基于容器私有地址的路由

  • 两台主机 GRE 隧道覆盖网络图
5,选择容器网络模式

docker run 命令的–net 选项

  • 模式一
    主机模式
    实例
docker run -it --rm --net=host ubuntu:14.04 bash
  • 模式二
    无网络模式
    实例
docker run -it --rm --net=none ubuntu:14.04 bash
  • 模式三
    与其他容器共享网络的模式
    实例
docker run -ti --rm --net=container:cocky_galileo ubuntu:14.04 bash
6,配置守护进程防火墙

启动 Docker 守护进程时通过 --ip-forward=false 和 --iptables=false 参数对 Docker的网络进行定制

7,IP转发设置
  1. 启用
echo 1 > /proc/sys/net/ipv4/ip_forward
  1. 禁用
echo 0 > /proc/sys/net/ipv4/ip_forward

三、Kubernetes

1,简称k8s
  • 定义 它是一个编排系统
  • 编排系统 将一组主机(也称为节点)视为一个统一、可编程、可靠的集群
2,三大核心对象

1.pod

2.service

3.replication controller

3,增强功能
  1. 可靠的容器重启 Kubernetes 可以监视容器的运行状况,并在出现故障时重新启动容器
  2. 自愈 如果一个节点失效了,Kubernetes 会自动将失效节点上的任务重新调度到健康的节点上

动态服务归属机制可以确保这些新启动的容器能被发现并使用

  1. 高集群利用率 通过在一组通用的计算机上调度一组不同类型的工作负载,与静态的手动配置方式相比,用户可以大幅提高计算机的利用率
  2. 组织和分组 Kubernetes 提供了一个灵活的标签(label)系统,让用户和其他系统可以以一组容器为单位来进行处理

Kubernetes 支持命名空间功能,让不同的用户或团队在集群中看到相互隔离的不同视图

  1. 水平扩展和复制 扩展和负载平衡
  2. 微服务友好 应用程序可以被分解成更易于开发、扩展和推导的更小单位。

Kubernetes 提供了服务发现以及与其他服务进行通信的方式

  1. 简化运维 指定应用程序的运维团队(或者开发团队自己)可以专注于应用程序的运行,而不必去具体地管理各个节点
4,全新的概念

1.集群调度

选择一个节点来运行新容器,以优化集群的可靠性和利用率的过程

2.pod

必须将一组容器放置到同一个节点上,像一个团队一样工作

3.标签

添加到 pod 的元数据,用于对容器进行分组以进行监控和管理

4.replication controller

用于确保系统能进行水平扩展的代理(agent),也负责保证对 pod 进行可靠的管理

5.网络服务

一种用于在 pod 之间以及几组 pod 之间进行通信的方式,采用了动态配置的命名和网络代理

5,Kubernetes 架构

1.Kubernetes master 服务 提供了 API 来收集和展现群集的当前状态,并在节点之间分配 pod

2.主节点存储 所有的持久化状态都保存在 etcd 中

3.kubelet 这个代理(agent)运行在每个节点之上,负责控制 Docker,向 master

报告自己的状态,以及配置节点级别的资源(比如远程磁盘存储)

4. proxy 这个代理(proxy)运行于每个节点之上(也能在其他地方运行),为本地容器提供了一个单一的网络接口,以连接到一组 pod

5.Kubernetes service 用于集群内容器之间的通信

用于将外部流量转发到一组 pod

6,创建一个多节点的Kubernetes集群

1.安装 Vagrant和 VirtualBox

2.设置环境变量:KUBERNETES_PROVIDER (该变量表明你将要使用Vagrant)

3.设置环境变量:NUM_MINIONS [该变量用来设置集群中要启动的节点的数量(除master 节点之外的节点数量)]

4.使用由 Kubernetes 社区提供的安装脚本

5.vagrant status 命令可以列出运行中的虚拟机

6. Kubernetes 集群创建成功并可以正常使用

7,在Kubernetes集群上启动容器

1.下载Kubernetes 客户端 kubectl

2.设置集群正确的 API 地址以及相应的身份验证信息

3.创建一个Json/Yaml 格式的 pod 定义文件

4.通过 kubectl 客户端将这个文件提交到 Kubernetes API server

5.当镜像下载完成之后,容器就会开始运行

8,通过标签查询和删除Kubernetes对象
  • 打标签

方式一 使用标签(label)给你的对象(比如 pod)打上标签

实例 修改 pod 的 yaml 元数据描述部分,增加一个 foo=bar 的标签

方式二 通过 kubectl label 命令在运行时进行打标签

实例 kubectl label pods 2048 env=production

  • 通过标签查询Kubernetes对象

通过 kubectl 命令的 --selector 参数列出具有指定标签的所有 pod

实例 kubectl get pods --selector=“foo=bar”

  • 通过标签删除Kubernetes对象

通过指定标签选择器来删除你的 pod

实例 kubectl delete pod --selector=“foo=bar”

9,管理pod的副本数

使用 replication controller为 pod 指定希望的副本数

  • 增加副本数
    使用 kubectl resize

实例

kubectl resize --replicas=4 rc rcgame
10,一个pod中运行多个容器

在安装时通过环境变量进行配置, 即修改Json/Yaml 格式的 pod 定义文件

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
5天前
|
Kubernetes 持续交付 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【5月更文挑战第17天】在当今云计算和微服务架构的大潮中,Docker容器化技术和Kubernetes容器编排系统成为了后端开发领域的热门技术栈。本文将探讨如何通过Docker和Kubernetes的结合使用来构建一个高效、可扩展且易于管理的微服务环境。我们将从基础概念出发,深入到实际操作层面,最后讨论这种组合对持续集成和持续部署(CI/CD)流程的影响,旨在为开发者和企业提供一种可靠的后端服务解决方案。
|
6天前
|
Java 数据库连接 Spring
K8S+Docker理论与实践深度集成java面试jvm原理
K8S+Docker理论与实践深度集成java面试jvm原理
|
7天前
|
Kubernetes Java 调度
Java容器技术:Docker与Kubernetes
Java容器技术:Docker与Kubernetes
51 0
|
7天前
|
Kubernetes 负载均衡 调度
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
【5月更文挑战第8天】Docker Swarm 和 Kubernetes 是两大容器编排工具,各有优势。Docker Swarm 简单易用,适合小到中型规模,与 Docker 生态系统集成紧密;而 Kubernetes 功能强大,扩展性好,适用于大规模、复杂场景。选择时需考虑团队技术能力、应用需求及现有技术栈。Kubernetes 学习曲线较陡,Docker Swarm 则较平缓。
【Docker 专栏】Docker Swarm 与 Kubernetes 的选型指南
|
7天前
|
Kubernetes Cloud Native 持续交付
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
【5月更文挑战第7天】本文探讨了Docker和Kubernetes如何协同构建和管理云原生应用。Docker提供容器化技术,Kubernetes则负责容器的部署和管理。两者结合实现快速部署、自动扩展和高可用性。通过编写Dockerfile创建镜像,然后在Kubernetes中定义部署和服务进行应用暴露。实战部分展示了如何部署简单Web应用,包括编写Dockerfile、构建镜像、创建Kubernetes部署配置以及暴露服务。Kubernetes还具备自动扩展、滚动更新和健康检查等高级特性,为云原生应用管理提供全面支持。
【Docker专栏】Kubernetes与Docker:协同构建云原生应用
|
7天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
62 1
|
7天前
|
Kubernetes 监控 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【5月更文挑战第4天】在现代软件开发中,微服务架构已成为实现可扩展、灵活且独立部署服务的流行解决方案。本文将探讨如何利用Docker容器化技术和Kubernetes容器编排平台来构建一个高效的微服务系统。我们将分析Docker和Kubernetes的核心优势,并指导读者如何通过这些工具优化微服务部署、管理和扩展过程。文章还将涉及监控和日志管理策略,以确保系统的健壮性和可靠性。
|
19小时前
|
存储 Kubernetes 监控
Kubernetes 集群的持续性能优化策略
【5月更文挑战第22天】 在微服务架构日益普及的背景下,容器编排成为关键性技术之一。其中,Kubernetes 凭借其强大的功能、灵活的扩展性和便捷的管理特性,成为业界广泛采用的解决方案。然而,随着集群规模的扩大和业务复杂度的增加,性能问题逐渐凸显,影响系统稳定性和响应效率。本文聚焦于 Kubernetes 集群的性能优化,提出一系列持续优化的策略,旨在帮助运维人员系统性地分析和解决性能瓶颈,提升集群运行效率。通过实际案例分析与经验总结,为读者呈现一套实用的性能调优方法论。
|
3天前
|
运维 监控 Kubernetes
Kubernetes 集群的监控与日志管理最佳实践
【5月更文挑战第19天】 在现代微服务架构中,容器编排平台如Kubernetes已成为部署、管理和扩展应用程序的关键工具。随着其应用范围不断扩大,集群的稳定性和性能监控变得至关重要。本文将探讨针对Kubernetes集群的监控策略,并深入分析日志管理的实现方法。通过介绍先进的技术堆栈和实用工具,旨在为运维专家提供一套完整的解决方案,以确保集群运行的透明度和可靠性。
34 3
|
3天前
|
存储 运维 监控
Kubernetes 集群的监控与性能优化策略
【5月更文挑战第19天】 在微服务架构日益普及的背景下,容器编排工具如Kubernetes已成为部署、管理和扩展服务的关键平台。然而,随着集群规模的增长和服务的复杂化,有效的监控和性能优化成为确保系统稳定性和高效性的重要挑战。本文将探讨针对Kubernetes集群监控的最佳实践,并提出一系列性能优化策略,旨在帮助运维人员识别潜在的瓶颈,保障服务的持续可靠性及响应速度。