《kubernetes权威指南·第四版》第一章:kubernetes入门

  1. k8s底层除了用docker,也可以用rocker,rocker是coreOS推出的竞争性产品

  2. service和pod之间的关系通过Lable来绑定

  3. pod最底层有pause容器(pod的根容器),用来pod内部docker之间的网络通信和数据共享(业务容器共享pause的网络栈和Volume挂载卷);sidecar容器可以先于正常业务启动

  4. 所有的资源对象都可以通过kubectl(API编程)实现增删查改到etcd中进行持久化存储

  5. API版本:extensions/v1beta1,apps/v1beta1(我们现在用的这个,其实已经被淘汰了),apps/v1beta2,1.9版本之后用app/v1

  6. yaml文件中,annotations这个可以新增多条属性,等属性稳定之后会过渡成正式属性

  7. 有一种静态的pod,仅运行在node上,不在etcd库中

  8. 滚动升级:逐渐升级service的每一个pod

  9. pod(Deployment)其实有回滚以及暂停的功能(暂停之后可以恢复)

  10. 以前以为pod的管理对象只有Deployment,但实际上有RC、Deployment、ReplicaSet、DaemonSet、StatefulSet、Job等,用于不同的应用场景

  11. 有状态服务:StateSet(headlessService,pod没有clusterIP。如果解析headlessService的DNS域名,返回的事Service对应的pod的endPoint列表)

    • 服务的每一个pod都有稳定唯一的网络标识
    • pod副本的启动顺序是一定的
    • 采用稳定的持久卷,删除pod不会删除服务数据
    • 每一个stateset服务都需要声明其属于哪一个headless service
  12. node节点内部的智能软件负载均衡器由kube-proxy完成,将service的请求转发到pod实例中,在内部实现服务的负载均衡与会话保持机制。

  13. 正常pod的endpoint地址会随着pod的销毁和重建而发生改变。

  14. 一个服务可以有多个端口,一个端口提供业务服务,另外一个端口提供管理服务。

  15. k8s服务发现机制

    • 早期:采用linux变量,每个pod容器启动是,自动注入环境变量:固定的命名规范找到ip和port
    • 现在:dns发现机制,借助于kube-dns
  16. k8s内有三种ip

    • node ip:集群物理节点的ip地址
    • pod ip:每个pod的ip地址,通过docker engine根据docker0网桥的ip地址段进行分配的。集群内部通过pod之间通过这个虚拟二层网络。真实TCP/IP流量从物理网卡流出
    • cluster ip:k8s自行管理和分配IP地址;无法被ping通,因为没有对应的实体网络对象
  17. node port:在集群的每一个node上都为需要外部访问的service,开启对应的tcp监听端口

  18. node间的负载均衡

    • 公有云支持,私有云的还在被开发:service的type从nodeport改成loadbalance 19. job的概念
    • 批处理任务:可以并行(或者串行)启动多个计算进程去处理一批工作项;通过job定义并启动一个批处理任务。
    • 原理:控制一组pod副本,pod运行结束job也就结束了。1.5版本之后有cronjob,解决批处理任务需要定时反复执行的问题;job支持多实例并行运行
  19. 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 等等
  1. 持久卷的概念
    • k8s集群中某个网络存储对应的一块存储
    • 不属于任何node,但可以在每个node上访问
    • pv不属于pod,独立于pod
    • pv有一个accessModes属性,可以显示读写权限,限制是否能被多个node挂载
    • 使用方法:先定义好pvc,然后通过在pod的Volume引用pvc(persistent volume claim)
    • pv是由状态的:空闲状态、绑定到pvc、pvc已经删除但是资源还没有被集群回收、集群回收资源失败
  2. namespace
    • 用户多租户的资源隔离
    • 集合k8s的资源配额管理,限定不同用户所占资源
  3. annotation注解
    • label不同,label是k8s的元数据,可以用于label selector
    • 用户任意定义的附加信息
  4. ConfigMap
    • docker的原理:将程序、依赖库、数据及配置文件打包固定到镜像文件。为了解决配置文件修改的问题,通过docker volume将容器外的配置文件映射到容器内
    • k8s通过key-value模式存储到etcd数据库中
    • etcd的configMap通过volume映射的方式变成pod内的配置文件。不管pod去了哪台机器,都可以完成自动映射,如果configMap的key-value数据被修改,映射到pod配置文件的也会被修改。【configmap是k8s对应用无入侵的配置中心】
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐