读书摘要系列之《kubernetes权威指南·第四版》第一章:kubernetes入门
《kubernetes权威指南·第四版》第一章:kubernetes入门k8s底层除了用docker,也可以用rocker,rocker是coreOS推出的竞争性产品service和pod之间的关系通过Lable来绑定pod最底层有pause容器(pod的根容器),用来pod内部docker之间的网络通信和数据共享(业务容器共享pause的网络栈和Volume挂载卷);sidec...
《kubernetes权威指南·第四版》第一章:kubernetes入门
-
k8s底层除了用docker,也可以用rocker,rocker是coreOS推出的竞争性产品
-
service和pod之间的关系通过Lable来绑定
-
pod最底层有pause容器(pod的根容器),用来pod内部docker之间的网络通信和数据共享(业务容器共享pause的网络栈和Volume挂载卷);sidecar容器可以先于正常业务启动
-
所有的资源对象都可以通过kubectl(API编程)实现增删查改到etcd中进行持久化存储
-
API版本:extensions/v1beta1,apps/v1beta1(我们现在用的这个,其实已经被淘汰了),apps/v1beta2,1.9版本之后用app/v1
-
yaml文件中,annotations这个可以新增多条属性,等属性稳定之后会过渡成正式属性
-
有一种静态的pod,仅运行在node上,不在etcd库中
-
滚动升级:逐渐升级service的每一个pod
-
pod(Deployment)其实有回滚以及暂停的功能(暂停之后可以恢复)
-
以前以为pod的管理对象只有Deployment,但实际上有RC、Deployment、ReplicaSet、DaemonSet、StatefulSet、Job等,用于不同的应用场景
-
有状态服务:StateSet(headlessService,pod没有clusterIP。如果解析headlessService的DNS域名,返回的事Service对应的pod的endPoint列表)
- 服务的每一个pod都有稳定唯一的网络标识
- pod副本的启动顺序是一定的
- 采用稳定的持久卷,删除pod不会删除服务数据
- 每一个stateset服务都需要声明其属于哪一个headless service
-
node节点内部的智能软件负载均衡器由kube-proxy完成,将service的请求转发到pod实例中,在内部实现服务的负载均衡与会话保持机制。
-
正常pod的endpoint地址会随着pod的销毁和重建而发生改变。
-
一个服务可以有多个端口,一个端口提供业务服务,另外一个端口提供管理服务。
-
k8s服务发现机制
- 早期:采用linux变量,每个pod容器启动是,自动注入环境变量:固定的命名规范找到ip和port
- 现在:dns发现机制,借助于kube-dns
-
k8s内有三种ip
- node ip:集群物理节点的ip地址
- pod ip:每个pod的ip地址,通过docker engine根据docker0网桥的ip地址段进行分配的。集群内部通过pod之间通过这个虚拟二层网络。真实TCP/IP流量从物理网卡流出
- cluster ip:k8s自行管理和分配IP地址;无法被ping通,因为没有对应的实体网络对象
-
node port:在集群的每一个node上都为需要外部访问的service,开启对应的tcp监听端口
-
node间的负载均衡
- 公有云支持,私有云的还在被开发:service的type从nodeport改成loadbalance 19. job的概念
- 批处理任务:可以并行(或者串行)启动多个计算进程去处理一批工作项;通过job定义并启动一个批处理任务。
- 原理:控制一组pod副本,pod运行结束job也就结束了。1.5版本之后有cronjob,解决批处理任务需要定时反复执行的问题;job支持多实例并行运行
-
Volume的概念(扩展出ConfigMap,容器配置文件集中化定义与管理)
- volumn是pod中能够被多个容器访问的共享目录。volumn和pod的生命周期相关,和docker的生命周期不相关【pod中的根容器】
- 使用方法:pod上声明一个volumn,然后在容器里引用该volume并挂载到容器的某个目录上
- 几种类型
- emptyDir:初始内容为空,无需制定宿主机上对应的目录文件。k8s自动分配目录,当pod从node中移除,emptyDir的数据会被永久删除。无法控制介质种类(k8s的配置是硬盘,那所有的都会创建在硬盘上)
- hostpath:在pod上挂载宿主机上的文件或目录。注意一下亮点
- 针对的是宿主机,所以pod在不同宿主机下,hostpath是一样的,但实际的访问结果可能不一样
- 如果使用资源配额管理,k8s无法管理宿主机下的资源
- gcePersistentDisk (gce是谷歌计算引擎)
- 先创建一个永久磁盘:Persistent Disk,用来存放Volume数据
- pod被删除,pd只是被卸载,但不会被删除
- 可以用gcloud命令创建一个pd(永久磁盘:persistent disk)
- awsElasticBlockStore(使用亚马逊公有云的ebs volume存储数据)
- 和gce类似,需要先创建一个ebs volume
- NFS
- 使用NFS网络文件系统提供的共享目录存储数据,我们需要在系统中部署一个NFS Server 等等
- 持久卷的概念
- k8s集群中某个网络存储对应的一块存储
- 不属于任何node,但可以在每个node上访问
- pv不属于pod,独立于pod
- pv有一个accessModes属性,可以显示读写权限,限制是否能被多个node挂载
- 使用方法:先定义好pvc,然后通过在pod的Volume引用pvc(persistent volume claim)
- pv是由状态的:空闲状态、绑定到pvc、pvc已经删除但是资源还没有被集群回收、集群回收资源失败
- namespace
- 用户多租户的资源隔离
- 集合k8s的资源配额管理,限定不同用户所占资源
- annotation注解
- label不同,label是k8s的元数据,可以用于label selector
- 用户任意定义的附加信息
- ConfigMap
- docker的原理:将程序、依赖库、数据及配置文件打包固定到镜像文件。为了解决配置文件修改的问题,通过docker volume将容器外的配置文件映射到容器内
- k8s通过key-value模式存储到etcd数据库中
- etcd的configMap通过volume映射的方式变成pod内的配置文件。不管pod去了哪台机器,都可以完成自动映射,如果configMap的key-value数据被修改,映射到pod配置文件的也会被修改。【configmap是k8s对应用无入侵的配置中心】
更多推荐
所有评论(0)