一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Docker

Centos7 下Kubernetes集群安装部署

操作环境 网络拓扑图 、 操作环境:   k8s-master: OS:

etcd:

  Kubernetes:

  k8s-node1&k8s-node2: OS:

  etcd:

docker:

  Kubernetes:

  安装部署 安装前准备 在安装部署集群前,先将三台服务器的时间通过NTP进行同步,否则,在后面的运行中可能会提示错误

在node节点上安装redhat-ca.crt

etcd集群配置 master节点配置 1.安装kubernetes etcd

2.配置etcd选项 ETCD_DATA_DIR/ETCD_LISTEN_PEER_URLS/ETCD_LISTEN_CLIENT_URLS/ETCD_MAX_SNAPSHOTS/ETCD_NAME/ETCD_INITIAL_ADVERTISE_PEERURLS/ETCD_ADVERTISE_CLIENT_URLS/ETCD_INITIAL_CLUSTER

  nodes节点配置 1.安装部署kubernetes-node/etcd/flannel/docker

2.分别配置etcd,node1与node2的配置方法相同,以node1配置文件为例说明

  启动etcd cluster 分别在3台服务器启动etcd

  查看etcd集群状态

Kubernetes集群配置 master节点配置 1.apiserver配置文件修改,注意KUBE_ADMISSION_CONTROL选项的参数配置

  2.启动服务

nodes节点配置 1.配置config配置,node1&node2配置相同,以node1为例说明

  2.配置kubelet

  网络配置 这里使用flannel进行网络配置,已经在2个节点上安装,下面进行配置。 在节点上进行配置flannel

  查看集群状态

  测试使用 在测试使用前,现在2个节点上手动下载pod images,以及测试使用的nginx images

  运行nginx

  查看pods

可以在node节点上查看到对应的containers […]

龙生   08 Nov 2018
View Details

K8s基本概念入门

序言 没等到风来,绵绵小雨,所以写个随笔,聊聊k8s的基本概念。 k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。那么,问题来了,要运维何用? k8s可以更快的更新新版本,打包应用,更新的时候可以做到不用中断服务,服务器故障不用停机,从开发环境到测试环境到生产环境的迁移极其方便,一个配置文件搞定,一次生成image,到处运行。。。 k8s的全生命周期管理 在k8s进行管理应用的时候,基本步骤是:创建集群,部署应用,发布应用,扩展应用,更新应用。 1、创建集群:为什么要使用集群? 有一句古话叫做三个臭皮匠,赛过诸葛亮,这就是创建集群的原因。。。 使用集群,create cluster是为了掩盖底层的无能,在各种环境中,底层的硬件各不相同,有的是各种低廉的服务器,有的各种云环境,有的是各种vm,有的各种host machine,要想屏蔽底层的细节,增强可靠性和稳定性,从而需要创建集群。 创建集群的好处就是,统一对外提供接口,无须进行各种复杂的调用;提供更好的可靠性,服务器宕机那么频繁,物理磁盘那么容易损坏,无须担心,集群统一进行调配;提供更好的性能,组合集群中各个机器的计算存储网络资源,提供更好的TPS和PS;提供横向扩容的能力,在进行横向扩容的时候,性能基本上能呈线性增长。 集群看起来很牛,那么创建起来很复杂么?并不会,在k8s只要使用两条指令就可以创建一个集群,一个是kubectl init进行初始化,创建一个master节点,第二条指令就是kubectl join xxx创建一个node节点,加入这个集群。 在这边可以看到k8s在物理上进行划分的时候,划分了两种类型的主机,一个master节点,主要用来调度,控制集群的资源等功能;而node节点,主要是用来运行容器的节点,也就是运行服务的节点。 其实集群都差不多,master用来控制,用来存储各种元数据,node节点是一个工作节点,真正来干活的;node节点定时与master进行通信,通过kubelet进程来汇报信息。 创建了集群,我要怎么看信息?如下:     2、 部署应用 使用集群的主要目标是啥?用来提供服务,让开发开发的应用程序能在集群上运行,从而需要让开发能运行一个应用来进行测试。 一条指令就能运行一个服务,有了image之后就是这么简单。所以,在开发完成程序之后,需要将程序打包成image,然后放到registry中,然后就能够运行应用了。 在部署完成应用之后,就可以看到应用的名称,期望状态是运行一个pod,当前有一个pod,活动的也是一个,还有启动的时间,那么什么是pod呢? 在k8s里面,集群调度的最小单元就是一个pod,一个pod可以是一个容器,也可以是多个容器,例如你运行一个程序,其中使用了nginx,使用mysql了,使用了jetty,那么可以将这三个使用在同一个pod中,对他们提供统一的调配能力,一个pod只能运行在一个主机上,而一个主机上可以有多个pod。 那么有人会问,为什么要使用pod,为什么不能直接使用容器呢?使用pod,相当与一个逻辑主机,还记得创建一个vm,在vm上运行几个进程么,其实道理是一样的,pod的存在主要是让几个紧密连接的几个容器之间共享资源,例如ip地址,共享存储等信息。如果直接调度容器的话,那么几个容器可能运行在不同的主机上,这样就增加了系统的复杂性。   3、发布应用 发布应用主要就是对外提供服务,可能会有人提出疑问,我都运行了服务,为什么还不能提供服务,这是因为在集群当中,创建的ip地址等资源,只有在同一个集群中才能访问,每个pod也有独一的ip地址,当有多个pod提供相同的服务的时候,就需要有负载均衡的能力,从而这里就涉及到一个概念就是service,专门用来提供服务的。 服务主要是用来提供外界访问的接口,服务可以关联一组pod,这些pod的ip地址各不相同,而service相当于一个复杂均衡的vip,用来指向各个pod,当pod的ip地址发生改变之后,也能做到自动进行负载均衡,在关联的时候,service和pod之间主要通过label来关联,也就是标签(-l表示为label)。 从而外界就可以访问此应用了,如下:     4、 扩容缩容 在业务上线之后,碰到了双十一怎么办?扩容。。。万剑归宗,只要有一个pod,那么就可以产生无数个pod。。。。 过了双十一怎么办,缩容。。。 横向扩展的能力。。每次扩容缩容的时候,这种会不会觉得很方便,一句话的事儿。。不用创建vm,不用去部署中间件,不用去各种修改配置,这就是自动化。。。     5、 更新 有新版本了,我要发布。。。那么。。。 滚动更新。。。根据新的image创建一个pod,分配各种资源,然后自动负载均衡,删除老的pod,然后继续更新。。。。不会中断服务。。。 更新错了怎么办,不怂,不会影响生产业务,回滚就好了。。。几秒钟的事儿。。。 后话 k8s的基本入门,其实算是一种用户视角,只是用来演示如何使用k8s,怎么提高了生产力而已。 在给客户演示的时候,为啥要选择k8s?主要就是如何提高了发布的效率,更新版本的效率,更方便更快捷的上线新版本。 但是在运维关注的视角下,这些远远不够。。。master?存储了哪些元数据,存储在etcd中?如何来进行监控?在很多很多系统情况下,怎么来部署k8s,是一个项目一个k8s还是一个k8s多个项目?等等一系列的问题。。。   from:https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79621510

龙生   08 Nov 2018
View Details

为 .NET Core 应用程序生成 Docker 映像

本教程重点介绍了如何在 Docker 上使用 .NET Core。 首先,我们探讨 Microsoft 维护和提供的各种不同的 Docker 映像,及其使用情况。 然后讲解了如何生成和 Docker 化 ASP.NET Core 应用。 在本教程中可学习: 了解 Microsoft.NET 核心 Docker 映像 获取用于 dockerize 的 ASP.NET Core 示例应用程序 在本地运行 ASP.NET 示例应用 使用 Docker for Linux 容器生成和运行示例 使用 Docker for Windows 容器生成和运行示例 Docker 映像优化 为开发人员生成 Docker 映像时,侧重于以下三种主要方案: 用于开发 .NET Core 应用的映像 用于生成 .NET Core 应用的映像 用于运行 .NET Core 应用的映像 为什么是三个映像? 因为在开发、生成和运行容器化应用程序时,具有不同的优先级。 开发: 优先级注重循环访问更改的速度以及调试更改的能力。 与更改代码并且快速查看相比,映像的大小是否不是那么重要? 生成: 此映像包含编译应用所需的所有内容,其中包括编译器和任何其他用于优化二进制文件的依赖项。 可使用生成映像创建置于生产映像中的资产。 生成映像用于持续集成或用于生成环境中。 此方法允许生成代理在生成映像实例中编译和生成应用程序(包括所有必需的依赖项)。 生成代理只需要了解如何运行此 Docker 映像即可。 生产: 部署和启动映像的速度可以有多快? 此映像很小,因此从 Docker 注册表到 Docker 主机的网络性能得到了优化。 已准备运行内容,以此实现从 Docker 运行到处理结果的最快时间。 Docker 模型中不需要动态代码编译。 放置在此映像中的内容将限制为运行应用程序所需的二进制文件和内容。 例如,dotnet publish 输出包含: 已编译的二进制文件 .js 和 .css 文件 在生产映像中包括 dotnet publish 命令输出的原因是使生产映像保持最小大小。 某些 .NET Core 映像共享不同标记之间的层,因此下载最新标记是一个相对轻量的过程。 如果计算机上已有较早版本,此体系结构会降低所需的磁盘空间。 当多个应用程序在同一计算机上使用公共映像时,在公共映像之间共享内存。 映像必须相同才可共享。 Docker 映像变体 为了实现上述目标,我们在 microsoft/dotnet 下提供了映像变体。 microsoft/dotnet:<version>-sdk(microsoft/dotnet:2.1-sdk) 此映像包含带有 […]

龙生   22 Oct 2018
View Details

Docker 容器、映像和注册表

使用 Docker 时,开发人员会创建一个应用或服务,并将它及其依赖项打包到一个容器映像中。 映像是应用或服务及其配置和依赖项的静态表示形式。 若要运行应用或服务,应用的映像会实例化,以创建一个在 Docker 主机上运行的容器。 最初,会在开发环境或 PC 中测试容器。 开发人员应将映像存储在注册表中,该注册表可充当映射库并在部署到生产业务流程协调程序时使用。 Docker 通过 Docker 中心维护公共注册表;其他供应商为不同映像集合提供注册表,包括 Azure 容器注册表。 或者,企业可以拥有一个本地专用注册表,用于其 Docker 映像。 图 2-4 显示了 Docker 中的映像和注册表与其他组件相关联的方式。 还显示了供应商的多个注册表产品/服务。 图 2-4。 Docker 术语和概念的分类 将映射存储到注册表中可存储静态和不可变的应用程序,包括其在框架级别的所有依赖项。 然后,这些映像可部署到多种环境中,并进行版本控制,从而提供一致的部署单元。 无论是托管在本地还是托管在云中,在下列情况下都建议使用专用映像注册表: 由于保密性,不能公开分享映像。 在映像和所选部署环境之间,希望网络延迟保持最低。 例如,如果生产环境是 Azure 云,为实现最低的网络延迟,可将映像存储在 Azure 容器注册表中。 同样,如果生产环境是在本地,便需要使本地 Docker 信任的注册表在相同的本地网络中可用。 from:https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/container-docker-introduction/docker-containers-images-registries

龙生   22 Oct 2018
View Details

Docker 术语

本节列出了在深入了解 Docker 之前应熟悉的术语和定义。 有关进一步的定义,请参阅 Docker 提供的详细术语表。 容器映像:包含创建容器所需的所有依赖项和信息的包。 映像包括所有依赖项(例如框架),以及容器运行时使用的部署和执行配置。 通常情况下,映像派生自多个基础映像,这些基础映像是堆叠在一起形成容器文件系统的层。 创建后,映像不可变。 Dockerfile:包含有关如何生成 Docker 映像的说明的文本文件。 与批处理脚本相似,首先第一行将介绍基础映像,然后是关于安装所需程序、复制文件等操作的说明,直至获取所需的工作环境。 生成:基于其 Dockerfile 提供的信息和上下文生成容器映像的操作,以及生成映像的文件夹中的其他文件。 可以使用 Docker 的“docker 生成”命令生成映像。 容器:Docker 映像的实例。 容器表示单个应用程序、进程或服务的执行。 它由 Docker 映像的内容、执行环境和一组标准指令组成。在缩放服务时,可以从相同的映像创建多个容器实例。 或者,批处理作业可以从同一个映像创建多个容器,向每个实例传递不同的参数。 卷:提供一个容器可以使用的可写文件系统。 由于映像只可读取,而多数程序需要写入到文件系统,因此卷在容器映像顶部添加了一个可写层,这样程序就可以访问可写文件系统。 程序并不知道它正在访问的是分层文件系统,此文件系统就是往常的文件系统。 卷位于主机系统中,由 Docker 管理。 标记:可以应用于映像的标记或标签,以便可以识别同一映像的不同映像或版本(具体取决于版本号或目标环境)。 多阶段生成:Docker 17.05 或更高版本的一个功能,可帮助减小最终映像的大小。 概括来说,借助多阶段生成,可以使用一个包含 SDK 的大型基础映像(以此为例)编译和发布应用程序,然后使用发布文件夹和一个小型仅运行时基础映像生成一个更小的最终映像 存储库 (repo):相关的 Docker 映像集合,带有指示映像版本的标记。 某些存储库包含特定映像的多个变量,例如包含 SDK(较重)的映像,包含唯一运行时(较轻)的映像,等等。这些变量可以使用标记进行标记。 单个存储库中可包含平台变量,如 Linux 映像和 Windows 映像。 注册表:提供存储库访问权限的服务。 大多数公共映像的默认注册表是 Docker 中心(归作为组织的 Docker 所有)。 注册表通常包含来自多个团队的存储库。 公司通常使用私有注册表来存储和管理其创建的映像。 另一个示例是 Azure 容器注册表。 多体系结构映像:就多体系结构而言,它是一种根据运行 Docker 的平台简化相应映像选择的功能,例如当 Dockerfile 从注册表请求基础映像 FROM microsoft/dotnet:2.1-sdk 时,实际上它会获得 2.1-sdk-nanoserver-1709、2.1-sdk-nanoserver-1803 或 2.1-sdk-alpine,具体取决于操作系统和运行 Docker 的版本。 Docker Hub:上传并使用映像的公共注册表。 Docker 中心提供 Docker 映像托管、公共或私有注册表,生成触发器和 Web 挂钩,以及与 GitHub 和 Bitbucket 集成。 Azure 容器注册表:用于在 Azure 中使用 Docker 映像及其组件的公共资源。 这提供了接近 Azure 中部署的注册表,授予控制访问权限,使其可以使用 Azure Active Directory 组和权限。 Docker 受信任注册表 (DTR):Docker 注册表服务(来自 Docker),可以安装在本地,因此它存在于组织的数据中心和网络中。 这对于应该在企业内部管理的私有映像来说很方便。 Docker 受信任注册表是 Docker 数据中心产品的一部分。 有关详细信息,请参阅 Docker 受信任注册表 […]

龙生   22 Oct 2018
View Details

什么是 Docker?

Docker 是一种开源项目,用于将应用程序自动部署为可在云或本地运行的便携式独立容器。 Docker 也是一家公司,它与云、Linux 和 Windows 供应商(包括 Microsoft)协作,致力于推广和发展这项技术。 图 2-2。 Docker 在混合云的所有层部署容器 Docker 映像容器可以在 Linux 和 Windows 上本机运行。 但是,Windows 映像仅能在 Windows 主机上运行,Linux 映像可以在 Linux 主机和 Windows 主机上运行(到目前为止,使用 Hyper-V Linux VM),其中主机是指服务器或 VM。 开发人员可以在 Windows、Linux 或 macOS 上使用开发环境。 在开发计算机上,开发人员运行部署了 Docker 映像(包括应用及其依赖项)的 Docker 主机。 在 Linux 或 Mac 上进行开发的开发人员使用基于 Linux 的 Docker 主机,并且他们可以仅为 Linux 容器创建映像。 (在 Mac 上进行开发的开发人员可以从 macOS 中编辑代码或运行 Docker CLI,但截至撰写本文时,容器不在 macOS 上直接运行。)在 Windows 上进行开发的开发人员可以为 Linux 或 Windows 容器创建映像。 为了在开发环境中承载容器,并提供其他开发人员工具,Docker 为 Windows 或 macOS 提供了 Docker 社区版 (CE)。 这些产品安装了承载容器所需的 VM(Docker 主机)。 Docker 还提供 Docker 企业版 (EE),该版本专为企业开发而设计,供生成、交付和在生产中运行大型业务关键型应用程序的 IT 团队使用。 若要运行 Windows 容器,有两种类型的运行时可供使用: Windows Server 容器通过进程和命名空间隔离技术提供应用程序隔离。 Windows Server 容器与容器主机和主机上运行的所有容器共享内核。 Hyper-V 容器通过在高度优化的虚拟机中运行各容器来扩展 Windows Server 容器提供的隔离。 在此配置中,容器主机的内核不与 Hyper-V […]

龙生   22 Oct 2018
View Details

容器和 Docker 简介

容器化是软件开发的一种方法,通过该方法可将应用程序或服务、其依赖项及其配置(抽象化为部署清单文件)一起打包为容器映像。 容器化应用程序可以作为一个单元进行测试,并可以作为容器映像实例部署到主机操作系统 (OS)。 就像船只、火车或卡车运输集装箱而不论其内部的货物一样,软件容器充当软件部署的标准单元,其中可以包含不同的代码和依赖项。 按照这种方式容器化软件,开发人员和 IT 专业人员只需进行极少修改或不修改,即可将其部署到不同的环境。 容器还会在共享 OS 上将应用程序彼此隔离开。 容器化应用程序在容器主机上运行,而容器主机在 OS(Linux 或 Windows)上运行。因此,容器的占用比虚拟机 (VM) 映像小得多。 每个容器可以运行整个 Web 应用或服务,如图 2-1 所示。 在此示例中,Docker 主机是容器主机,而 App1、App2、Svc 1 和 Svc 2 是容器化应用程序或服务。 图 2-1. 在一个容器主机上运行多个容器 容器化的另一个优势在于可伸缩性。 通过为短期任务创建新容器,可以快速扩大。 从应用程序的角度来看,实例化映像(创建容器)类似于实例化 服务或 Web 应用等进程。 但出于可靠性考虑,在多个主机服务器上运行同一映像的多个实例时,通常要使每个容器(映像实例)在不同容错域中的不同主机服务器或 VM 中运行。 总而言之,容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控性。 最重要的优点是可在开发和运营之间提供隔离。 from:https://docs.microsoft.com/zh-cn/dotnet/standard/microservices-architecture/container-docker-introduction/index

龙生   22 Oct 2018
View Details

Docker for Windows 里的Shared Drives 设置不生效

昨天,帅彬同学出现了一个疑难杂症,具体的可以大致描述成:Docker中的settings里的Shared Drives 选择对应盘符后,点击Apply后无法生效,没办法选择对应盘符进行分享。 解决办法:win+R ,键入gpedit.msc,出现如下界面,找到高亮处的网络访问:本地账户的共享和安全模型,选择如图中的 经典 选项。即可。 原因分析: 由上图可以看出,大致是用户的权限问题导致。   from:https://blog.csdn.net/u012680857/article/details/77970351

龙生   22 Sep 2018
View Details

Windows下Docker查看容器IP地址

docker inspect ––format {{.NetworkSettings.IPAddress}} stupefied_turing

龙生   22 Sep 2018
View Details