【微服务】容器化之Docker & Kubernetes
1.容器生态
容器技术的生态系统自下而上分别覆盖了IaaS层和PaaS层所涉及的各类问题,包括资源调度、编排、部署、监控、配置管理、存储网络管理、安全、容器化应用支撑平台等。如下图,其中docker、k8s、consul、etcd等都是此处需要关注的。
docker主要是轻量级容器引擎,起到容器(运行着服务)间隔离的作用,可以充分利用机器资源,自动化部署。
Kubernetes(k8s)主要用于管理容器集群,
1.1优势
- 持续部署与测试
- 跨云平台支持
- 环境标准化和版本控制
2.Docker使用
2.1 三大核心概念
Image镜像 | |
---|---|
Container容器 | 轻量级虚拟机 |
Docker registry镜像仓库 | 类似与github等代码仓库,官方仓库https://hub.docker.com/ |
2.2 关联关系
常用流程就是
1.编写dockerfile,build生成一个镜像,将镜像push到仓库
2.从仓库pull拉取一个镜像,run创建一个容器并运行
像上面的流程一样,3者直接通过docker命令可以交互
2.2.1 命令
分类 |
命令 |
容器生命周期管理 |
run、start/stop/restart、kill、rm、pause/unpause、create、exec |
容器操作 |
ps、inspect、top、attach、events、logs、wait、export、port |
容器rootfs命令 |
commit、cp、diff |
镜像仓库 |
login、pull、push、search |
本地镜像管理 |
images、rmi、tag、build、history、save、load、import |
docker环境 |
info、version |
类别 |
常用子命令 |
样例&功能 |
---|---|---|
环境
|
docker info
|
Docker环境信息 Containers Images ... |
docker version
|
Client\Server: Version: 18.06.1-ce API version: 1.38 Go version: go1.10.3 Git commit: e68fc7a Built: Tue Aug 21 17:23:18 2018 OS/Arch: linux/amd64 Experimental: false |
|
容器启动、关闭 |
docker run
|
基于特定的镜像创建一个容器,并依据选项来控制该容器运行 docker run --name=mysqltest -d -p 3306:3306 mysql/mysql-server:5.7 该命令从mysql-server:5.7镜像启动一个容器,并执行echo命令 --name指定容器名字 -d 后台执行 -p 容器服务端口到主机端口映射 hostPort:container-Port
|
docker start/stop/restart |
对于已经存在的容器,可以通过dockerstart/stop/restart命令来启动、停止和重启 |
|
docker rm |
删除容器 |
|
镜像仓库
|
docker pull |
从Docker registry中拉取image或repository docker pull mysql/mysql-server:5.7 从mysql仓库拉取tag是5.7的mysql-server镜像 |
docker push |
将本地的image或repository推送到DockerHub的公共或私有镜像库
|
|
镜像管理
|
docker images |
可以列出主机上的镜像 |
docker build |
用Dockerfile和docker build命令来完成一个新镜像的构建 |
|
docker commit |
提交容器对镜像的修改 |
|
docker save |
保存镜像 |
|
docker rmi |
删除镜像 |
|
容器运维 |
docker ps |
查看容器的相关信息,默认只显示正在运行的容器的信息 |
3.Kubernetes
3.1 集群架构
用户通过api发送指令给master,master发信号给Node
master和node的组件如下:
3.1 核心概念
节点 | 组件 | 功能 |
---|---|---|
master | API Server |
对外接口 用户操作的接口 |
Scheduler |
资源调度 预定的调度策略将Pod调度到相应的机器上(Model) |
|
Controller manager |
管理控制器 负责维护集群的状态,比如故障检测、自动扩展、滚动更新等 |
|
etcd | 用以保存了整个集群的状态 | |
Node | Pod |
部署、水平扩展和制作副本的最小单元。 可以有多个容器Container(Docker 容器) Pod内的所有容器共享存储和网络。 |
Kubelet | 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理 | |
kube-proxy |
负责为服务Service提供cluster内部的服务发现和负载均衡 监听 API server 中 service 和 endpoint 的变化情况 |
3.2 开放接口
命令 | 功能 |
---|---|
kubectl create -f xxx.yaml | 创建资源对象 |
kubectl get nodes | 查看node |
kubectl get pods -n <namespace> -o wide | 查看pods |
kubectl describe | 描述资源,如node、pod |
kubectl delete | 删除资源,如node、pod |
kubectl exec <pod-name> date kubectl exec -it <pod-name> -c <container-name> /bin/bash |
执行pod第一个容器的date命令 执行指定pod、指定容器的bash命令 |
kubectl logs -f <pod-name> -c <container-name> |
查看日志(相当于tail -f 命令) |