- 一、Docker、Docker-Compose
- 二、k8s、rancher
- 三、helm
- Kubernetes 的最优方式。">Helm 是查找、分享和使用软件构建 Kubernetes 的最优方式。
- 3.1 Chart
一、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,镜像中的被指定为挂载点的目录中的文件会复制到数据卷中(仅数据卷为空时会复制)。
1.2 使用Dockerfile制作镜像
熟悉Dockerfile语法通过dockerfile脚本构建镜像。
Dockerfile语法
Dockerfile
FROM debian:stretch
RUN set -x; buildDeps='gcc libc6-dev make wget' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps
构建镜像命令:docker built -t imageName:tag 工作目录(dockerfile目录)
1.3 熟悉DockerCompose相关命令
Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。 其代码目前在 https://github.com/docker/compose 上开源。
二、k8s、rancher
2.1 熟悉k8s基础概念
2.1.1 熟悉k8s架构:
控制平面组件
对集群做出全局决策(比如调度),以及检测和响应集群事件
- Kube-Apiservice:API 服务器是 Kubernetes 控制面的组件, 该组件公开了 Kubernetes API。 API 服务器是 Kubernetes 控制面的前端。
- etcd:etcd 是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。
- Kube-Scheduler:控制平面组件,负责监视新创建的、未指定运行节点(node)的 Pods,选择节点让 Pod 在上面运行。
- Kube-controller-manager:运行控制器进程的控制平面组件。
Node组件
节点组件在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行环境。
- Kubelet:一个在集群中每个节点(node)上运行的代理。 它保证容器(containers)都 运行在 Pod 中。
- Kube-proxy:kube-proxy 是集群中每个节点上运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
2.1.2 pod:
Pod 是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。 就 Docker 概念的术语而言,Pod 类似于共享名字空间和文件系统卷的一组 Docker 容器。
2.1.3 工作负载:
工作负载
可以使用 负载资源 来替你管理一组 Pods。 这些资源配置 控制器 来确保合适类型的、处于运行状态的 Pod 个数是正确的,与你所指定的状态相一致。
内置工作负载资源
- Deployment 和 ReplicaSet 管理无状态的pod
- StatefulSet 让你能够运行一个或者多个以某种方式跟踪应用状态的 Pods
- DaemonSet 定义提供节点本地支撑设施的 Pods
- Job 和 CronJob 定义一些一直运行到结束并停止的任务。
2.1.4 service:
服务相关资料逻辑上的一组 Pod,一种可以访问它们的策略 —— 通常称为微服务
2.1.5 volume:
Container 中的文件在磁盘上是临时存放的,这给 Container 中运行的较重要的应用 程序带来一些问题。问题之一是当容器崩溃时文件丢失。kubelet 会重新启动容器, 但容器会以干净的状态重启。 第二个问题会在同一 Pod 中运行多个容器并共享文件时出现。 Kubernetes 卷(Volume) 这一抽象概念能够解决这两个问题。
2.1.6 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全栈应用、数据库、缓存等等。