一、Docker、Docker-Compose

1.1 熟悉docker基础知识

1.1.1 镜像:

镜像使用参考文档

Docker 镜像 是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像 不包含 任何动态数据,其内容在构建之后也不会被改变。

  • 联合文件系统:是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。

    1.1.2 容器:

    容器使用参考文档

通过docker run 来创建容器,Docker的后台运行流程:

  • 检查本地是否存在指定的镜像,不存在就从 registry 下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

基本命令:

  • docker run 通过镜像来创建容器
  • docker container start:启动已经停止的容器
  • docker container stop : 停止容器
  • docker export containerId > name.tar 导出容器(不会导出容器的历史数据)
  • docker import containerName < name.tar 导入容器 ,可以更改名称 tag等元数据信息
  • docker container rm删除一个已经停止的容器
  • docker container purne 删除所有已经停止的容器

    1.1.3 仓库:

    仓库使用参考文档

    存放镜像的地方

1.1.3 数据卷:

数据卷参考文档
数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷 可以在容器之间共享和重用
  • 数据卷 的修改会立马生效
  • 对 数据卷 的更新,不会影响镜像
  • 数据卷 默认会一直存在,即使容器被删除

注意:数据卷 的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。

docker官网

1.2 使用Dockerfile制作镜像

熟悉Dockerfile语法通过dockerfile脚本构建镜像。

Dockerfile语法
Dockerfile

  1. FROM debian:stretch
  2. RUN set -x; buildDeps='gcc libc6-dev make wget' \
  3. && apt-get update \
  4. && apt-get install -y $buildDeps \
  5. && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
  6. && mkdir -p /usr/src/redis \
  7. && tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
  8. && make -C /usr/src/redis \
  9. && make -C /usr/src/redis install \
  10. && rm -rf /var/lib/apt/lists/* \
  11. && rm redis.tar.gz \
  12. && rm -r /usr/src/redis \
  13. && apt-get purge -y --auto-remove $buildDeps

构建镜像命令:docker built -t imageName:tag 工作目录(dockerfile目录)

1.3 熟悉DockerCompose相关命令

docker-compose相关命令

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。 其代码目前在 https://github.com/docker/compose 上开源。

二、k8s、rancher

2.1 熟悉k8s基础概念

2.1.1 熟悉k8s架构:

k8s架构及组件

控制平面组件

对集群做出全局决策(比如调度),以及检测和响应集群事件

  • Kube-Apiservice:API 服务器是 Kubernetes 控制面的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。
  • etcd:etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
  • Kube-Scheduler:控制平面组件,负责监视新创建的、未指定运行节点(node)Pods,选择节点让 Pod 在上面运行。
  • Kube-controller-manager:运行控制器进程的控制平面组件。

Node组件

节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。

2.1.2 pod:

pod是啥?

Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。 就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器。

2.1.3 工作负载:

工作负载
可以使用 负载资源 来替你管理一组 Pods。 这些资源配置 控制器 来确保合适类型的、处于运行状态的 Pod 个数是正确的,与你所指定的状态相一致。
内置工作负载资源

  • DeploymentReplicaSet 管理无状态的pod
  • StatefulSet 让你能够运行一个或者多个以某种方式跟踪应用状态的 Pods
  • DaemonSet 定义提供节点本地支撑设施的 Pods
  • JobCronJob 定义一些一直运行到结束并停止的任务。

    2.1.4 service:

    服务相关资料

    逻辑上的一组 Pod,一种可以访问它们的策略 —— 通常称为微服务

2.1.5 volume:

Container 中的文件在磁盘上是临时存放的,这给 Container 中运行的较重要的应用 程序带来一些问题。问题之一是当容器崩溃时文件丢失。kubelet 会重新启动容器, 但容器会以干净的状态重启。 第二个问题会在同一 Pod 中运行多个容器并共享文件时出现。 Kubernetes 卷(Volume) 这一抽象概念能够解决这两个问题。

2.1.6 PV和PVC:

pv和pvc相关资料

三、helm

熟悉helm语法:

helm是个啥?

Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。

  • charts 是创建k8s应用所必需的一组信息
  • config 包含了可以合并到打包的chart中的配置信息,用于创建一个可发布的对象。
  • release 是一个与特定配置相结合的chart的运行实例。

helm命令

3.1 Chart

Helm使用的包格式称为 chart。 chart就是一个描述Kubernetes相关资源的文件集合。单个chart可以用来部署一些简单的, 类似于memcache pod,或者某些复杂的HTTP服务器以及web全栈应用、数据库、缓存等等。