GPU-server
构建GPU服务器的容器技术:Docker
远程登陆:SSH(局域网)
Hole : 使用Holer服务端软件搭建Holer服务,通过Holer客户端软件经自己服务器实现公网访问。
容器管理:DaoCloud - DCS
Docker
容器的本质是进程
Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。
Docker技术的三大核心概念,分别是:
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
安装
命令
镜像加速
Docker-compose
Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application’s services. Then, with a single command, you create and start all the services from your configuration. To learn more about all the features of Compose, see the list of features.
使用撰写三步骤:
-
定义
Dockerfile
或者镜像 -
撰写
docker-compose.yml
-
运行
docker-compose up
K8S
kubernetes:容器编排解决方案,用来对容器化应用进行自动化部署、 扩缩和管理。
K8S组件
- Master组件:集群控制平台
- kube-apiserver:提供 Kubernetes API。Kubernetes管理工具:kubectl / kubernetes dashboard / kuboard
- etcd:支持一致性和高可用的名值对存储组件。存储Kubernetes集群的所有配置信息。
- kube-scheduler:监控所有新创建尚未分配到节点上的 Pod,并且自动为 Pod 选择合适的节点运行。
- kube-controller-manager:运行了所有的控制器
- Node 组件:运行在每一个节点上(包括 master 节点和 worker 节点),负责维护运行中的 Pod 并提供 Kubernetes 运行时环境。
- kubelet:运行在每一个集群节点上的代理程序,确保 Pod 中的容器处于运行状态。
- kube-proxy:网络代理程序。
- 容器引擎:docker、containerd
入门
Kubernetes 部署
Deployment 处于 master 节点上,通过发布 Deployment,master 节点会选择合适的 worker 节点创建 Container,Container 会被包含在 Pod里。
-
通过kubectl部署nginx Deployment
查看Pods/Nodes
Pod 容器组 k8s 集群上的最基本的单元,是一组容器(可包含一个或多个应用程序容器),以及共享存储(卷 Volumes)、IP 地址和有关如何运行容器的信息。
同一 Pod 中的不同 container 端口不能相互冲突。同一个Pod内的容器可以使用 localhost + 端口号互相访问。
在 k8s 上创建 Deployment 时,会在集群上创建包含容器的 Pod (而不是直接创建容器)。每个Pod都与运行它的 worker 节点(Node)绑定,并保持在那里直到终止或被删除。如果节点(Node)发生故障,则会在群集中的其他可用节点(Node)上运行相同的 Pod(从同样的镜像创建 Container,使用同样的配置,IP 地址不同,Pod 名字不同)
Node(节点)是 kubernetes 集群中的计算机,可以是虚拟机或物理机。
kubernetes master 会根据每个 Node(节点)上可用资源的情况,自动调度 Pod(容器组)到最佳的 Node(节点)上
每个 Kubernetes Node(节点)至少运行:
- Kubelet,负责 master 节点和 worker 节点之间通信的进程;管理 Pod(容器组)和 Pod(容器组)内运行的 Container(容器)。
- 容器运行环境(如Docker)负责下载镜像、创建和运行容器等。
公布应用程序-service
Service是一个抽象层,通过 LabelSelector 选择了一组 Pod(容器组),把这些 Pod 的指定端口公布到到集群外部,并支持负载均衡和服务发现。
- 公布 Pod 的端口以使其可访问
- 在多个 Pod 间实现负载均衡
- 使用 Label 和 LabelSelector
滚动更新Rolling Update
滚动更新允许以下操作:
- 将应用程序从准上线环境升级到生产环境(通过更新容器镜像)
- 回滚到以前的版本
- 持续集成和持续交付应用程序,无需停机
进阶
架构
-
节点
-
节点信息(由节点上的 kubelet 收集)
-
节点管理(组件Node Controller)
-
-
集群内的通信(从单master到k8s高可用)
- Cluster to Master
所有从集群访问 Master 节点的通信,都是针对 apiserver 的。apiserver 监听 HTTPS 端口(443)并配置授权方式。
-
Master to Cluster
- apiserver 访问集群中每个节点上的 kubelet 进程
- 使用 apiserver 的 proxy 功能,从 apiserver 访问集群中的任意节点、Pod、Service
操作k8s
-
k8s对象
-
namespace
-
标签
容器
-
容器生命周期事件处理
Kubernetes 中支持容器的 postStart 和 preStop 处理程序(handler)。
工作负载
-
Pod容器组
将多个容器运行于同一个容器组中是一种相对高级复杂的使用方法。只有在您的容器相互之间紧密耦合是,您才应该使用这种方式。例如:您可能有一个容器是 web server,用来将共享数据卷中的文件作为网站发布出去,同时您有另一个 “sidecar” 容器从远程抓取并更新这些文件。
-
Deployment控制器
用户应该始终使用控制器来创建 Pod,而不是直接创建 Pod,控制器可以提供如下特性:
- 水平扩展(运行 Pod 的多个副本)
- rollout(版本更新)
- self-healing(故障恢复)
MORE