深入Service
一、Service定义通过创建 Service ,可以为一组具有相同功能的容器应用提供一个统一的入口地址,井且将请求负载分发到后端的各个容器应用上。
12345678910111213141516171819202122232425apiVersion : vl #Requiredkind: Service #Requiredmetadata: #Required name : string #Required namespace : string #Required labels: - name: string annotations: - name: string spec : #Required selector : [] #Required type : string #Required clusterIP: string sessionAffinity: string ports: - nam ...
Pod扩容和缩容
Pod 的扩容和缩容操作有手动和自动两种模式,手动模式通过执行 kubectl scale 命令对一个 Deployment/RC 进行 Pod 副本数量设置。自动模式则需要用户根据某个性能指标或者自定义业务指标 Pod 副本数量的范围,系统将自动在这个范围内根据性能指标 进行调整。
一、手动扩容和缩容12345将Deployment nginx数量提升到5个kubectl scale deployment nginx-deployment --replicas=5#--replicas 设置为比当前 Pod 副本数量更小的数 系统将会杀掉一些运行中的 Podkubectl scale deployment nginx-deployment --replicas=1
二、自动扩容和缩容Horizontal Pod Autoscaler( HPA) ,用于实现基于 CPU 使用率进行自动 Pod 扩容和缩 的功能。HPA制器基于 Master的kube-controller-manager 服务启动参数 horizontal- pod-autoscaler-sync-period ...
Pod升级和回滚
当集群中的某个服务需要升级时,我们需要停止目前与该服务相关的所有 Pod ,然后下载新版本镜像井创建新的 Pod 如果集群规模比较大,则这个工作就变成了一个挑战,而且先全部停止然后逐步升级的方式会导致较长时间的服务不可用 Kubernetes 提供了滚动升级功能来解决上述问题。
如果 Pod 是通过 Deployment 建的,则用户可以在运行时修改 Deployment的Pod 定义(spec.template )或镜像名称 ,井应用到 Deployment 对象上,系统即可完成 Deployment 的自动更新操作。如果在更新过程中发生了错误, 则还可以通过回滚( Rollback )操作恢复 Pod的版本。
一、Deployment升级Deployment nginx
1234567891011121314151617#nginx-deployment.yaml apiVersion: apps/v1beta1 kind : Deployment metadata: name: nginx-deploymentspec: replicas: 3 template : ...
深入Pod
一、Pod 定义详解pod的定义文件完整内容:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576apiVersion : vl kind: Pod metadata : name : string namespace: string labels: - name: string annotations: - name: stringspec: containers: - name : string image : string imagePullPolicy: [Always | Never | IfNotPresent] command : [string] args: [string] workingDir: string volumeMounts: ...
Kubernetes基本概念和术语
Kubernetes 基本概念和术语Kubernetes中的大部分概念如Node、Pod、Replication Controller、Service等都可以看作一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的 kubectl 工具(或者API编程调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比 etcd 库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。先了解一下 Kubernetes集群的两种管理角色:Master和 Node。
1. MasterKubernetes里的 Master 指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes的所有控制命令都发给它,它来负责具体的执行过程,我们后面执行的所有命令基本都是在 Master 节点上运行的。Master节点通常会占据一个独立的服务器(高可用部署建议用3台服务器),如果宕机或者不可 ...
k8s解释和安装
一、Kubernetes是什么是一个基于容器技术的分布式架构领先方案啊。我们不必再费心于负载均衡器的选型和部署实施问题,不必再考虑引入或自己开发一个复杂的服务治理框架,不必再头疼于服务监控和故障处理模块的开发。
kubernetes是一个开放性的开发平台。没有限定任何编程接口,无论是什么语言写的服务,都可以映射为kubernetes的Service,并且通过标准的TCP通信协议进行交换,并且Kubernetes对现有的编程语言、编程框架、中间件没有任何侵入性,因此系统也很容器改造升级并迁移到Kubernetes上。
Kubernetes是一个完备的分布式系统支撑平台。具有完备的集群管理能力,包括多层次的安全防护安全防护和准入机制、多租户应用支撑能力、透明的服务注册和服务发现机制、内建智能负载均衡器、强大的故障发现和自我修复能力、服务滚动升级和在线扩容能力、可扩展的资源自动调度机制,以及多粒度的资源配额管理能力。同时,Kubernetes提供了完善的管理工具,这些工具涵盖了包括开发、部署测试、运维监控在内的各个环节。因此,Kubernetes是一个全新的基于容器技术的分布式架构解决方案, ...
docker日志和监控
一、Docker日志当前Docker对运行在它内部应用的日志管理较薄弱,每个运行在容器内应用的日志输出统一保存在宿主机的/var/log目录下,文件夹以容器ID命名。当前Docker仅将应用的stdout和stderr两个日志输出通过通道重定向到/var/log下。Docker以JSON消息记录每一行日志,这将导致文件增长过快,从而超过主机磁盘限额。此外,日志没有自动切分功能,docker logs命令返回的日志记录也过于冗长。目前处理Docker日志的主流方案,按照日志处理工具安装的位置主要分为3种。
在容器内收集。除了正在运行的应用程序外,每个容器设置一个日志收集进程。这种方案需要定制Docker镜像,典型代表为baseimage-dockerR项目,它使用runitR连同syslog提供了这方面的日志收集方案示例。
在容器外收集。在宿主机上运行一个单独收集日志的代理,收集所有容器的日志。容器有一个从该宿主机挂载的volume卷,它们把日志记录在挂载卷中,由代理进程接收。当然,也可以使用代理直接处理存储在/var/log目录下的容器日志,该方案的典型代表为Fluentd项目。
在 ...
docker数据卷
一、docker数据卷Docker镜像是由一系列的只读层组合而来的,当启动一个容器时, Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。
容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便地对容器中的文件进行访问。
多个容器间的数据无法共享。
删除容器时,容器的数据丢失。
docker引入了数据集(volume)来解决这些问题。volume是存在于一个或多个容器中特点文件或文件夹,这个目录独立于联合文件系统的形式在宿主机存在,并为数据的共享与持久化提供便利:
volume在容器创建时就会初始化,在容器运行时就可以使用其中的文件。
volume能在不同的容器之间共享和重用。
对volume中数据的操作会马上生效。
对volume中数据的操作不会影响到镜像本身。
volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除。
Docker提供了volumedriver接口,通过实现该接口, ...
docker镜像
一、什么是Docker镜像Docker镜像是一个只读的Docker容器模板,含有启动Docker容器所需的文件系统结构及其内容,是启动一个Docker容器的基础。Docker镜像的文件内容以及一些运行Docker容器的配置文件组成了Docker容器的静态文件系统运行环境―—rootfs。Docker镜像是Docker容器的静态视角,Docker容器是Docker镜像的运行状态。
rootfsrootfs是Docker容器在启动时内部进程可见的文件系统,即Docker容器的根目录。rootfs通常包含一个操作系统运行所需的文件系统,例如可能包含典型的类Unix操作系统中的目录系统,如/dev、/proc、/bin、/etc、/lib、/usr、/tmp及运行Docker容器所需的配置文件、工具等。
传统的Linux操作系统内核启动时,首先挂载一个只读( read-only)的rootfs,当系统检测其完整性之后,再将其切换为读写( read-write)模式。而在Docker架构中,当Docker daemon为Docker容器挂载rootfs时,沿用了Linux内核启动时的方法,即将r ...
docker资源限制和底层技术
一、资源限制一个docker host. 上会运行若干容器,每个容器都需要CPU、内存和IO资源。对于KVM、VMware 等虚拟化技术,用户可以控制分配多少CPU、内存资源给每个虚拟机。对于容器,Docker 也提供了类似的机制避免某个容器因占用太多资源而影响其他容器乃至整个host的性能。
内存限制与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。Docker通过下面两组参数来控制容器内存的使用量。
-m或--memory:设置内存的使用限额,例如100MB,2GB。
--memory-swap:设置内存+swap的使用限额。
12# 允许容器最多使用200MB内存和100MB的swap,默认为-1,对资源没有限制docker run -m 200M --memory-swap=300M ubuntu
1234# 通过progrium/stress镜像学习如何为容器分配内存,这个镜像可以用来对容器执行压力测试docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 2 ...