volume

k8s通过数据卷来提供pod数据的持久化,k8s的数据卷是对docker数据卷的扩展,k8s的数据卷是pod级别的,用来实现pod中容器的文件共享

volume是pod中能被多个容器访问的共享目录,k8s中的volume与pod生命周期相同,当容器终止或重启时,volume中的数据不会丢失。

示例

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: frontend
  5. spec:
  6. replicas: 1
  7. selector:
  8. matchLabels:
  9. tier: frontend
  10. matchExpressions:
  11. - {key: tier,operator: In,values: [frontend]}
  12. template:
  13. metadata:
  14. labels:
  15. app: app-demo
  16. tier: frontend
  17. spec:
  18. volumes:
  19. - name: datavo1
  20. emptyDir: {}
  21. containers:
  22. - name: tomcat-demo
  23. image: consol/tomcat-7.0
  24. imagePullPolicy: IfNotPresent
  25. volumeMounts:
  26. - mountPath: /mydata-data     #将emptydir挂在到/mydata-data目录
  27. name: datavo1
  28. ports:
  29. - containerPort: 8080
  • 本地数据卷

emptyDir:

      empytDir volume是在pod分配到node的时创建的,初始内容为空,并且无需指定主机上对应的目录文件(k8s自动分配),只要pod存在,emptydir数据卷都会存在(容器删除不会导致emptydir数据卷丢失),当pod从node上移除时,emptyDir中的数据也会被永久删除

hostPath:

      hostPath为在pod上挂载容器宿主机上的文件或目录,如果pod需要使用宿主机的某些文件,可以使用HostPath

创建一个pod需要使用宿主机的ssl证书,将宿主机的/etc/ssl/certs目录挂载到容器,示例如下

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nginx
  5. spec:
  6. containers:
  7. - name: nginx
  8. image: nginx
  9. ports:
  10. - containerPort:
  11. protocol: TCP
  12. volumeMounts:
  13. - name: ssl-certs
  14. mountPath: /etc/ssl/certs
  15. readOnly: true
  16. volumes:
  17. - name: ssl-certs
  18. hostPath:
  19. path: /etc/ssl/certs
  • 网络数据卷

NFS:

     使用nfs网路文件系统存储数据(通过tcp/ip访问资源),需要部署一个nfs server,如下:

示例

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: nfs-web
  5. spec:
  6. containers:
  7. - name: web
  8. image: nginx
  9. ports:
  10. - name: web
  11. containerPort:
  12. volumeMounts:
  13. - name: nfs
  14. mountPath: "/usr/share/nginx/html"
  15. volumes:
  16. - name: nfs
  17. nfs:
  18. server: nfs.server.default.kube.local    #nfs的server地址
  19. path: "/"              #nfs的共享目录

ISCSI

  1. apiVersion: v1
  2. kind: Pod
  3. metadata:
  4. name: iscsipd
  5. spec:
  6. containers:
  7. - name: iscsipd-ro
  8. image: kubernetes/pause
  9. volumeMounts:
  10. - name: iscsi-ro
  11. mountPath: "/mnt/iscsipd"
  12. - name: iscsipd-rw
  13. image: kubernetes/pause
  14. volumeMounts:
  15. - name: iscsi-rw
  16. mountPath: "/mnt/iscsipd"
  17. volumes:
  18. - iscsi:
  19. fsType: ext4                             #文件系统类型
  20. iqn: iqn.2001-04/com.example:storage.kube.sys1.xyz      #iscis的iqn号
  21. lun: 0                                #iscis的逻辑单元号
  22. readOnly: true
  23. targetPortal: 10.10.10.10:3260        #iscsiTarget服务地址
  24. name: iscsipd-ro
  25.  
  26. - iscsi:
  27. fsType: ext4
  28. iqn: iqn.2001-04/com.example:storage.kube.sys1.xyz
  29. lun: 1
  30. readOnly: true
  31. targetPortal: 10.10.10.10:3260
  32. name: iscsipd-rw

PV(Persistent Volume) 网络存储:

信息数据卷 secret

Git Repo

  kubernetes支持将git Repo下载到pod中,目前通过Git Repo数据卷实现,即当配置Git Repo数据卷时,就下载配置的Git仓库到Pod的数据卷中,然后挂载到容器

  1. [root@k8s_master ~]# cat gitrepo.yaml
  2. apiVersion: v1
  3. kind: Pod
  4. metadata:
  5. name: busybox
  6. namespace: default
  7. labels:
  8. app: busybox
  9. spec:
  10. containers:
  11. - name: busybox
  12. image: busybox
  13. command:
  14. - "sleep" - "3600"
  15. volumeMounts:
  16. - mountPath: /data
  17. name: busybox-config
  18. volumes:
  19. - name: busybox-config
  20. gitRepo:
  21. repository: http://username:password@10.10.10.217/root/flagship.git
  22. revision: master

Namespace命名空间

  Namespce在很多情况下实现了多租户的资源隔离,通过将集群内部的资源对象分配到不同的namespace中,形成逻辑上分组的不同项目、小组或用户组,便于区分管理

k8s启动后,默认创建一个名为“default”的namespace,通过kubectl命令可查看,用户创建的资源对象,默认放到default命名空间中

  1. kubectl get namespaces        #获取命名空间
  2.  
  3. kubectl get podsservicerc --namespace=<namespace名称>  #获取指定命名空间的资源

Annotation

Annotation与label类似,也是用key=value键值对的形式进行定义,不同的是,lable有严格的命名规则,定义的对象为元数据(metadata)并且用于label selector,而Annotation 是用户定义的任意附加信息

  • build信息、release信息、docker镜像信息。如时间戳、release id号,docker registry地址
  • 日志库、监控库、分析库等资源库地址
  • 程序调试工具信息
  • 团队联系信息

准入控制器(Admission Controller)

  准入控制器(Admission Controller)位于 API Server 中,在对象被持久化之前,准入控制器拦截对 API Server 的请求,一般用来做身份验证和授权。其中包含两个特殊的控制器:MutatingAdmissionWebhook 和 ValidatingAdmissionWebhook。分别作为配置的变异和验证准入控制 webhook

  • 变更(Mutating)准入控制:修改请求的对象
  • 验证(Validating)准入控制:验证请求的对象

准入控制器是在 API Server 的启动参数重配置的。一个准入控制器可能属于以上两者中的一种,也可能两者都属于。当请求到达 API Server 的时候首先执行变更准入控制,然后再执行验证准入控制。

在部署 Kubernetes 集群的时候都会默认开启一系列准入控制器,如果没有设置这些准入控制器的话可以说你的 Kubernetes 集群就是在裸奔,应该只有集群管理员可以修改集群的准入控制器。

默认开启如下的准入控制器。

  1. --admission-control=ServiceAccount,NamespaceLifecycle,NamespaceExists,LimitRanger,ResourceQuota,MutatingAdmissionWebhook,ValidatingAdmissionWebhook

准入控制器列表

  1. Kubernetes 目前支持的准入控制器有:
  2.  
  3. AlwaysPullImages:此准入控制器修改每个 Pod 的时候都强制重新拉取镜像。
  4. DefaultStorageClass:此准入控制器观察创建PersistentVolumeClaim时不请求任何特定存储类的对象,并自动向其添加默认存储类。这样,用户就不需要关注特殊存储类而获得默认存储类。
  5. DefaultTolerationSeconds:此准入控制器将Pod的容忍时间notready:NoExecuteunreachable:NoExecute 默认设置为5分钟。
  6. DenyEscalatingExec:此准入控制器将拒绝exec 和附加命令到以允许访问宿主机的升级了权限运行的pod
  7. EventRateLimit (alpha):此准入控制器缓解了 API Server 被事件请求淹没的问题,限制时间速率。
  8. ExtendedResourceToleration:此插件有助于创建具有扩展资源的专用节点。
  9. ImagePolicyWebhook:此准入控制器允许后端判断镜像拉取策略,例如配置镜像仓库的密钥。
  10. Initializers (alpha):Pod初始化的准入控制器,详情请参考动态准入控制。
  11. LimitPodHardAntiAffinityTopology:此准入控制器拒绝任何在 requiredDuringSchedulingRequiredDuringExecution AntiAffinity 字段中定义除了kubernetes.io/hostname 之外的拓扑关键字的 pod
  12. LimitRanger:此准入控制器将确保所有资源请求不会超过 namespace LimitRange
  13. MutatingAdmissionWebhook 1.9版本中为beta):该准入控制器调用与请求匹配的任何变更 webhook。匹配的 webhook是串行调用的;如果需要,每个人都可以修改对象。
  14. NamespaceAutoProvision:此准入控制器检查命名空间资源上的所有传入请求,并检查引用的命名空间是否存在。如果不存在就创建一个命名空间。
  15. NamespaceExists:此许可控制器检查除 Namespace 其自身之外的命名空间资源上的所有请求。如果请求引用的命名空间不存在,则拒绝该请求。
  16. NamespaceLifecycle:此准入控制器强制执行正在终止的命令空间中不能创建新对象,并确保Namespace拒绝不存在的请求。此准入控制器还防止缺失三个系统保留的命名空间defaultkube-systemkube-public
  17. NodeRestriction:该准入控制器限制了 kubelet 可以修改的NodePod对象。
  18. OwnerReferencesPermissionEnforcement:此准入控制器保护对metadata.ownerReferences对象的访问,以便只有对该对象具有“删除”权限的用户才能对其进行更改。
  19. PodNodeSelector:此准入控制器通过读取命名空间注释和全局配置来限制可在命名空间内使用的节点选择器。
  20. PodPreset:此准入控制器注入一个pod,其中包含匹配的PodPreset中指定的字段,详细信息见Pod Preset
  21. PodSecurityPolicy:此准入控制器用于创建和修改pod,并根据请求的安全上下文和可用的Pod安全策略确定是否应该允许它。
  22. PodTolerationRestriction:此准入控制器首先验证容器的容忍度与其命名空间的容忍度之间是否存在冲突,并在存在冲突时拒绝该容器请求。
  23. Priority:此控制器使用priorityClassName字段并填充优先级的整数值。如果未找到优先级,则拒绝Pod
  24. ResourceQuota:此准入控制器将观察传入请求并确保它不违反命名空间的ResourceQuota对象中列举的任何约束。
  25. SecurityContextDeny:此准入控制器将拒绝任何试图设置某些升级的SecurityContext字段的pod
  26. ServiceAccount:此准入控制器实现serviceAccounts的自动化。
  27. 用中的存储对象保护:该StorageObjectInUseProtection插件将kubernetes.io/pvc-protectionkubernetes.io/pv-protection终结器添加到新创建的持久卷声明(PVC)或持久卷(PV)。在用户删除PVCPV的情况下,PVCPV不会被移除,直到PVCPV保护控制器从PVCPV中移除终结器。有关更多详细信息,请参阅使用中的存储对象保护。
  28. ValidatingAdmissionWebhook1.8版本中为alpha1.9版本中为beta):该准入控制器调用与请求匹配的任何验证webhook。匹配的webhooks是并行调用的;如果其中任何一个拒绝请求,则请求失败。

对于Kubernetes 1.10及更高版本,建议使用--enable-admission-plugins标志运行以下一组准入控制器(顺序无关紧要)。

注意: --admission-control在1.10中已弃用并替换为--enable-admission-plugins

  1. --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota

对于Kubernetes 1.9及更早版本,建议使用--admission-control标志(顺序有关)运行以下一组许可控制器。

kubernetes 核心技术概念(二)之 volume namespace annoation的更多相关文章

  1. Kubernetes基本概念之Name和NameSpace

    在Kubernetes中,所有对象都会被指定一个唯一的Name和UID. 用户还可以指定一些不要求唯一性的数据附加到对象上,例如Label和Annotation. 1. Name Name是创建一个K ...

  2. Kubernetes的核心技术概念和API对象

    Kubernetes的核心技术概念和API对象 API对象是K8s集群中的管理操作单元.K8s集群系统每支持一项新功能,引入一项新技术,一定会新引入对应的API对象,支持对该功能的管理操作.例如副本集 ...

  3. K8s - Kubernetes重要概念介绍(Cluster、Master、Node、Pod、Controller、Service、Namespace)

    K8s - Kubernetes重要概念介绍(Cluster.Master.Node.Pod.Controller.Service.Namespace)       Kubernetes 是目前发展最 ...

  4. Kubernetes笔记(二):了解k8s的基本组件与概念

    前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...

  5. 01 . 容器编排简介及Kubernetes核心概念

    Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器-Borg的一个开源版本,是Docker分布式系统解决方案.2014年由Google公司启动. Kubernetes提供了面 ...

  6. 第3 章 : Kubernetes 核心概念

    Kubernetes 核心概念 本文整理自 CNCF 和阿里巴巴联合举办的云原生技术公开课的课时 3:Kubernetes 核心概念.本次课程中,阿里巴巴资深技术专家.CNCF 9个 TCO 之一 李 ...

  7. kubernetes核心概念

    摘抄自:  https://www.cnblogs.com/zhenyuyaodidiao/p/6500720.html 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:A ...

  8. Kubernetes核心概念总结

    目录贴:Kubernetes学习系列 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:APIServer.scheduler.controller manager.etcd ...

  9. kubernetes基本概念和术语

    一. kubernetes是什么 kubernetes是一个全新得基于容器技术得分布式架构领先方案.是google Borg得一个开源版本.Borg是google得一个久负盛名得内部使用得大规模集群管 ...

随机推荐

  1. Openlayer 3加载本地ArcGIS切片

    第一篇博客,简单的开个头吧.希望自己能坚持记录.一般什么情况什么人需要这样的需求呢,伐木的光头强大哥说我们在深山老林里,没网的啊,地图就手机本地duang的加载一下吧.那么Server啊就要丢掉丢掉. ...

  2. dotnet core如何编译exe

    dotnet core 有一个转变,他用dll格式来代替exe作为通用执行格式,然后要命令行dotnet yourApp.dll 来运行程序.为了提高逼格,双击可以运行,可以采用以下方案: 方案一 用 ...

  3. IDEA XML注释与取消注释快捷键

    IntelliJ IDEA和eclipse中编辑Java文件时,注释和取消注释的快捷键都是: "CTRL + / " 编辑xml文件时, 注释:CTRL + SHIFT + / 取 ...

  4. [20190418]exclusive latch spin count.txt

    [20190418]exclusive latch spin count.txt--//昨天测试"process allocation" latch,主要这个latch与其它拴锁s ...

  5. activemq读取剩余消息队列中消息的数量

    先上原文链接: http://blog.csdn.net/bodybo/article/details/5647968  ActiveMQ在C#中的应用 ActiveMQ是个好东东,不必多说.Acti ...

  6. 网络浅析(<<网络是怎么连接的>> 总结)

    概要 基本概念 网线 集线器 交换机 路由器 路由器和交换机 路由器和集线器 接入网 IP DNS 以太网 协议栈 网络连接过程 通信过程(浏览器 -> 服务器) 客户端和服务端 服务端的套接字 ...

  7. Linux:Day9(上) 压缩工具

    压缩.解压缩及归档工具 compress/uncompress:.Z # 现在已经很少在见到了 gzip/gunzip:.gz bzip2/bunzip2:.bz2 xz/unxz:.xz # 目前推 ...

  8. 11 Django REST Framework 针对基于类的视图添加 @csrf_exempt

    01-在类的 dispatch 方法上使用 @csrf_exempt from django.views.decorators.csrf import csrf_exempt class MyView ...

  9. 我的Qt历程1:第一个Qt程序

    1.启动Qt,按照红圈内所标注顺序执行操作. 2.按下Choose键后,在“名称”栏目里给程序起名字(不要是汉字名字). 3.在“创建路径”栏目里指定程序将要使用的路径(不能用汉字路径). 4.在“类 ...

  10. Recovering Low-Rank Matrices From Few Coefficients In Any Basis

    目录 引 主要结果 定理2,3 定理4 直观解释 Recovering Low-Rank Matrices From Few Coefficients In Any Basis-David Gross ...