-
背景本文使用的构建流程和工具:
代码提交到GitHub进行版本控制Jenkins从GitHub拉取代码Jenkins调用Maven进行构建、打包Jenkins调用Docker构建镜像Jenkins将镜像推到DockerHubJenkins调用Kubectl创建Pod进行服务部署k8s在创建时从DockerHub拉取镜像,创建并运行Docker容器
流程准备好代码并提交GitHub,Jenkins拉取代码具体过程参考以前的博文。
Jenkins调用Maven打包Jenkins配置中,在“构建-调用顶层Maven目标”部分:
clean
# maven打包
......
-
环境说明单机环境部署,ip为192.168.248.128。不建议模仿,Master机上最好不要部署客户端节点。由于是单机环境,多机部署集群会遇到的问题这里可能没有暴露。
操作系统:运行在VMware Workstation虚拟机上的CentOs 7 64位系统Docker引擎在Win10上支持很好,但我的机器是Win7系统,因此使用虚拟机
构建工具说明目标是完成持续集成自动化构建。构建过程参考了网上提供的基于k8s的devops整体解决方案:
本文使用类似的构建流程和工具:
代码提交到GitHub进行版本控制Jenkins从GitHub拉取代码Jenkins调用Maven进行构建、打包Jenkins调用Docker构建镜像Jenkins将镜像推到DockerHubJenkins调用Kubectl创建Pod进行服务部署k8s在创建时从DockerHub拉取镜像,创建并运行Docker容器
综上,需要准备的内容包括:
......
-
配置文件使用方法
编辑配置文件 xxx.yamlkubectl create -f xxx.yaml使用get、describe 等命令检查Pod创建状态,排查异常完成!
配置文件Hello WorldapiVersion: v1 # 版本号,例如v1
kind: Pod # 这里是Pod
metadata: # 元数据
name: agent # Pod名称,这里叫agent
......
-
注:这里的基本命令均通过在Master节点运行kubectl完成。
列表# 获取所有Node信息
kubectl get nodes
# 获取所有Pod信息
kubectl get pods
描述# 通用命令格式 kubectl describe {resourceType} {resourceName}
......
-
k8s架构
部分基础名词首先介绍k8s中的一部分宏观概念。
Master架构图中左下角部分,k8s管理节点,包含多种组件,提供k8s集群操作的唯一访问入口,负责资源调度等k8s逻辑部分。k8s所有控制操作相关的组件部署在此。
Node架构图中Node部分,k8s工作节点,对应实际的宿主机,可通过组件动态增加到集群中,向master注册自己并提供自身信息以便资源调度。k8s集群操作的执行组件、容器引擎等部署在此。
Pod架构图中Pod部分,k8s调度管理的最小单位,是容器的更高层抽象,一个Node中可以部署多个Pod。
名词总结相较于k8s基本介绍中说的
......
-
Kubernetes——“舵手”
Kubernetes是什么
Kubernetes是一个Google开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。
简而言之,就是容器管理助手。
Kubernetes的简称——k8s类似Internationalization取首尾字母和中间字母数简称为i18n,Kubernetes简称为k8s。
k8s的架构
......
-
构建前需要知道的相关知识
DO NOT WRITE WHOLE DOCKERFILE YOURSELF UNLESS YOU KNOW WHAT YOU ARE DOING.参见文末Dockerfile中每一行命令都会产生一层,每一层内容都会保留到最终镜像需要尽量合并命令,每层只保留需要的内容,及时清理不必要的内容
Union FS 是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。
指令指令只需要知道是干什么用的即可,有可能你用不上。用到的时候再细学。FROM第一行从FROM开始,说明这个镜像以谁为基础FROM nginx 以nginx镜像为基础RUN指明使用哪个命令,执行什么内容RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html 修改nginx首页的内容尽量像这样合并多条命令,在一个命令内完成下载、编译、安装、清理:
RUN buildDeps='gcc libc6-dev make wget' \
&& apt-get update \
......
-
PS:容器终止时不会自动删除
常用命令拉取镜像
# docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
# 默认仓库为Docker Hub
# 默认标签为latest
docker pull ubuntu:18.04
......
-
Image 镜像镜像介绍
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
简单来说镜像就是你打包好的运行环境。
镜像构建和存储镜像本身包含了整个运行环境,其体积也是不小的。如果每个镜像都独立进行存储,也非常浪费资源,毕竟很多镜像都共用了很多内容,如一些基础应用等。镜像在构建时是一层一层构建的,一般最基础层是操作系统,前一层是后一层的基础,类似于一层层建高楼。因此,镜像中的很多基础层内容是可以复用从而减少冗余的。但是请注意,每一层的修改都会在该层构建后不会再发生改变。即使在后续层中被删除,也会一直保留到最后镜像构建完成。因此,如何尽量保证每一层只进行必要的修改,以及尽量保证层数尽可能少(会占用空间,层数也有上限),是构建镜像的重点,后续文章会进行说明。
Container 容器“镜像”与“容器”的关系,就类似于“应用”与“进程”的关系,或“类”与“实例”的关系。没错,镜像就是蓝图,定义了容器的逻辑和数据;容器就是由镜像产生的运行时的实体,有生命周期如(被)创建、启动、停止、删除等。容器的实质是进程,那么容器之间显然是互相隔离的,并且容器存储层属于临时存储,容器被删除时数据也会丢失,因此持久型数据应当存储在“数据卷Volume”或绑定在宿主机目录。
Docker Registry 仓库好说,就是存放镜像的地方。当构建完镜像后,可以将镜像保存在仓库中,供后续持续集成工具拉取,进行测试、部署等。这里推荐一个官方公开服务Docker Hub:https://hub.docker.com 或 https://cloud.docker.com
......
-
Docker
Docker是什么下面的图片比较了 Docker 和传统虚拟化方式的不同之处。传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
传统虚拟化,最底层为完整操作系统
Docker虚拟化,容器之间共享操作系统内核,更轻便
简而言之,Docker可以理解为在通常打包服务的基础上更进一步,把运行环境也一同打包、隔离运行的轻便虚拟机。
为什么要用DockerDocker相较于传统虚拟机的优势:
......
共3张