容器技术

微博云原生技术的思考与实践

谁说我不能喝 提交于 2019-12-01 10:22:01
作者:新浪微博架构师陈飞 现在越来越多的企业开始全面拥抱云计算,开始关注云原生技术。从管理物理数据中心到使用云主机,我们不用再关心基础运维。从云主机到 Kubernetes 容器,我们不用再关心机器的管理。云上抽象层级越高,就越少人需要关心底层问题,企业就能够节省大量的人力成本与资源投入。云原生技术就是更高一层的抽象, CNCF 对云原生技术的定义是: 有利利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展应用。通过容器器、 服务网格、微服务、不可变基础设施和声明式API等技术,构建容错性好、易易于管理和便于观察的松耦合系统。 例如 FaaS 架构,开发者可以完全不用考虑服务器,构建并运行应用程序和服务。还有面向开源架构的的云原生技术,与提供 MySQL, Redis 云服务类似,提供基于 Spring Cloud、Dubbo、HSF 等开源微服务架构的应用管理服务,开发者无需考虑部署、监控、运维的问题。 微博也一直在致力于推动基础设施云原生化,我们围绕 Kubernetes 构建面向容器的云原生基础设施,形成了物理数据中心加多个公有云的混合云 Kubernetes 平台,提供秒级伸缩能力。构建开箱即用的 CI/CD 体系,依托云原生伸缩能力,保证大量的 Job 稳定运行,让开发人员摆脱代码发布泥沼。接下介绍这几方面的实践经验。 物理数据中心

linux容器技术之chroot

空扰寡人 提交于 2019-12-01 10:21:57
linux容器技术之chroot linux chroot 机制的由来 root 用户启动一个daemon,必须用root 用户来启动,比如一个web 服务器(nginx/apapce 80端口)是在操作系统的接口(1-1024),只有root 有这个权限来启动这类接口;用root 户启动daemon 的程序也被认为是一个自然的事情。 随着安全的攻击越来越严重,如果任何一个提供TCP 服务的程序出现漏洞,那攻击者就获取到了root 权限,无疑是灾难性的。为了降低这个问题带来的风险,现在几乎所有的用户程序都是 用root 用户启动程序,然后主动放弃root 权限,该用一个普通的用户(比如 admin/nobody) 进行运行。 这样一旦攻击者获取到了这个程序的权限,也是此时运行用户的权限,不是root 权限对系统造成的危害相对要小了许多 为了进一步提高系统的安全性,linux 系统引入了chroot 机制;chroot 是一个系统调用,程序可以通过调用chroot的函数库来更改一个进程所能看到的跟目录 。比如httpd 软件安装在/usr/local/httpd 这个目录下,那这个进程(httpd) 只可以读、写到这个指定的目录: [usr/local/httpd] ;这样即使攻击者获取进程的权限,也只能读写这个目录下的文件,这样就变的安全了许多,起码不会影响这个台机器其他的进程

docker

烈酒焚心 提交于 2019-12-01 10:17:36
预备知识 veth 主要目的是为了跨Network Namespace之间提供一种类似于Linux进程间通信的技术,所以veth总是成对出现的。veth工作在L2数据链路层,veth-pair设备在转发数据包过程中并不篡改数据包的内容。 网络名命空间是用于隔离网络资源。所以通过veth pair在不同的网络名命空间中创建通道,才能达到通信目的 iptables Docker 网络 Bridge 如同网桥网络 Host 与宿主机网络相同(UTS,Net , IPC )不同的为User,Mount , Pid Container 一个容器直接使用另外一个已经存在容器的网络配置 用于容器和容器之间频繁交流的情况 None 只能使用loopback网络设备 使用场景: 1.保存密码2.openstack的nova-docker 容器并不需要网络(例如只需要写磁盘卷的批处理任务) 2.希望自定义网络 Overlay CNM Sandbox Endpoint Network 来源: https://www.cnblogs.com/kaizi111/p/11679988.html

浅谈 docker 挂载 GPU 原理

南楼画角 提交于 2019-12-01 10:15:15
浅谈 docker 挂载 GPU 原理 基础知识 隔离(Namespace) 限制(Cgroup) 挂载 GPU 实验 使用 nvidia-docker2 原生 docker 使用 GPU nvidia-docker 原理 安装 Nvidia driver 驱动 Nvidia driver CUDA Toolkit 浅谈 docker 挂载 GPU 原理 基础知识 对于 Docker 等大多数 Linux 容器来说,Cgroups 技术是用来制造约束的主要手段,而 Namespace 技术则是用来修改进程视图的主要方法。 Docker 启动的只是一个进程而已,而不是别的。 参考: DOCKER基础技术:LINUX NAMESPACE(上) DOCKER基础技术:LINUX NAMESPACE(下) 06 | 白话容器基础(二):隔离与限制 隔离(Namespace) 写代码调用 clone 的时候,传入 CLONE_NEWPID/CLONE_NEWNS/CLONE_NEWUTS/CLONE_NEWNET/CLONE_NEWIPC 等就可以启动一个被隔离的进程 简单来说 Namespace 是一个障眼法: PID Namespace Mount 只能看到当前 Namespace 中的挂载点信息 UTS IPC Network 只能看到当前 Namespace 中的网络设备 User

[ Docker ] 基础的网络应用

痞子三分冷 提交于 2019-12-01 10:00:34
1. Docker 基本网络模型 Docker 有 4 种基本的网络模型: bridge 桥接模式 host 网络模式 container 联盟模式 none 模式 Docker daemon 在启动时会创建一个虚拟网桥 docker0 默认地址为 172.17.0.1/16 ,容器启动后会被桥接到 docker0 上,并自动分配到一个 IP 地址。 Docker 在启动容器时,默认采用的是 bridge 桥接模式,可以通过 -net 进行指定。 以下是 Docker 网络初始化过程: 1.1 bridge 桥接网络模型 Bridge 桥接模式的实现逻辑如下: Bridge 桥接模式的实现步骤主要如下: Docker Daemon 利用 veth pair 技术,在宿主机上创建两个虚拟网络接口设备 假设为veth0 和 veth1,而 veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。 Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上,保证宿主机的网络报文可以发往 veth0 Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0 优势:   保证宿主机的网络报文若发往 veth0

[ Docker ] 基础使用(上)

大兔子大兔子 提交于 2019-12-01 09:58:25
1. docker-ce 版本安装 Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3.8以上,且要是64位内核; 1.1 新版 docker-ce 安装 docker-ce 默认文件系统为 overlay2 建议采用 CentOS 7.4 以上版本安装。本次采用 CentOS 7.7 x64 (1)安装依赖: yum install -y yum-utils device-mapper-persistent-data lvm2 (2)下载 yum 源文件 wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo (3)把软件仓库地址替换为 TUNA: sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo (4)查看 docker-ce 版本 [root@localhost ~]# yum list docker-ce --showduplicates | sort -r Loading mirror speeds from cached

将需要输入文件的python程序制作Docker镜像并运行容器

*爱你&永不变心* 提交于 2019-12-01 09:58:09
写在前面的话: 本人Docker小白一枚,由于前一阵需要将实习单位的代码利用Docker打包成images然后供多用户使用,所以从头开始学习Docker,参考了一些书、视频,发现除了讲解大家都知道的基本操作之外,对于程序制作镜像这一我需要重点学习的部分,讲解的程序都十分简单,例如打印Hello Docker!或简单的flask网页程序。但我需要打包的程序是需要读入文件的程序,网上查了很多资料没有找到类似的,所以在这里想要分享出来,因为我技术有限,在完成打包镜像这一任务的时候,很可能有更为简单的方法,请多多指教,这篇文章使用的Docker命令都十分简单,只要看过一点Docker,应该都可以看懂~ 这篇博客讲什么?     我要将一个简单的读取txt并输出的python程序打包制作成镜像后,使用scp将命令python程序需要的文件从另一个服务器上传输进docker容器,并让该python程序镜像的容器输出结果 我的工作环境: 硬件环境:两台均搭载Centos 7的Linux服务器,且两台服务器之间可以ping通互相访问,一台安装了docker,另一台有没有docker无所谓,如果你只是想试试,那么两台虚拟机也应该是可以的 1.制作镜像 我使用的制作镜像方法是Dockerfile+python程序制作镜像,我的python文件名为docker_test.py 1.1

Rancher 2.1平台搭建及使用

爱⌒轻易说出口 提交于 2019-12-01 09:56:56
一、概述 1.1、什么是Rancher Rancher是一套容器管理平台,它可以帮助组织在生产环境中轻松快捷的部署和管理容器。 Rancher可以轻松地管理各种环境的Kubernetes,满足IT需求并为DevOps团队提供支持。 Kubernetes不仅已经成为的容器编排标准,它也正在迅速成为各类云和虚拟化厂商提供的标准基础架构。Rancher用户可以选择使用Rancher Kubernetes Engine(RKE)创建Kubernetes集群,也可以使用GKE,AKS和EKS等云Kubernetes服务。 Rancher用户还可以导入和管理现有的Kubernetes集群。 Rancher支持各类集中式身份验证系统来管理Kubernetes集群。例如,大型企业的员工可以使用其公司Active Directory凭证访问GKE中的Kubernetes集群。IT管​​理员可以在用户,组,项目,集群和云中设置访问控制和安全策略。 IT管​​理员可以在单个页面对所有Kubernetes集群的健康状况和容量进行监控。 Rancher为DevOps工程师提供了一个直观的用户界面来管理他们的服务容器,用户不需要深入了解Kubernetes概念就可以开始使用Rancher。 Rancher包含应用商店,支持一键式部署Helm和Compose模板。Rancher通过各种云、本地生态系统产品认证

基于docker安装pxc集群

 ̄綄美尐妖づ 提交于 2019-12-01 09:53:17
基于docker安装pxc集群 一、PXC 集群的安装 PXC集群比较特殊,需要安装在 linux 或 Docker 之上。这里使用 Docker进行安装! Docker的镜像仓库中包含了 PXC数据库的官方镜像, 地址: https://hub.docker.com/r/percona/percona-xtradb-cluster/ 如下图所示: 一,镜像的安装 安装镜像的两种方式: docker pull percona/percona-xtradb-cluster docker load < pxc.tar.gz路径 二,创建内部网络 出于安全考虑,创建出来的 PXC集群不要直接对接Docker以外的网络,因此要给PXC集群实例创建 Docker内部网络。Docker内部网段外部无法直接访问,我们可通过 docker端口映射技术将端口对外开发。 docker 内部网络操作 ( 内部默认网段为 172.17.0.XX ): docker network create 网络名 docker network inspect 网络名 : 查看某网络详细信息 docker network rm 网络名 例如: docker network create –subnet=172.18.0.0/24 net1 :net1为网段名 docker network inspect net1

深入剖析Kubernetes

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 08:46:08
毫无疑问,Kubernetes 已经成为容器领域当之无愧的事实标准。除了 Google、Microsoft 等技术巨擘们在容器领域里多年的博弈外,国内的 BAT、滴滴、蚂蚁、今日头条等技术大厂,也都已将容器和 Kubernetes 列入未来的战略重心,无数中小型企业也正走在容器化的道路上。 一个很长但精彩的故事 打包发布阶段 在docker 之前有一个 cloud foundry Paas项目,使用 cf push 将用户的可执行文件和 启动脚本打进一个压缩包内,上传到cloud foundry 的存储中,然后cloud foundry 会通过调度器选择一个可以运行这个应用的虚拟机,然后通知这个机器上的agent 把应用压缩包下载下来启动。由于需要在一个虚拟机中 启动不同用户的应用,cloud foundry为客户的应用单独创建一个称作沙盒的隔离环境,然后在沙盒中启动这些应用进程。 PaaS 主要是提供了一种名叫“应用托管”的能力。虚拟机技术发展 ==> 客户不自己维护物理机、转而购买虚拟机服务,按需使用 ==> 应用需要部署到云端 ==> 部署时云端虚拟机和本地环境不一致。所以产生了两种思路 将云端虚拟机 做的尽量与 本地环境一样 无论本地还是云端,代码都跑在 约定的环境里 ==> docker 镜像的精髓 与《尽在双11》作者提到的 “docker 最重要的特质是docker