课堂-kubernetes第六讲存储管理_第1页
课堂-kubernetes第六讲存储管理_第2页
课堂-kubernetes第六讲存储管理_第3页
课堂-kubernetes第六讲存储管理_第4页
课堂-kubernetes第六讲存储管理_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

“Kubenetes”系列公开课2课程Wiki:每周四晚8点档Kubernetes

初探上手KubernetesKubernetes

的资源调度Kubernetes

的运行时Kubernetes

的网络管理Kubernetes

管理Kubernetes

的日志与Kubernetes

的应用部署扩展Kubernetes

生态Kubernetes

的企业实践议程的 插件一览!

K8s

概览!

应用场景!

设计与基本架构!

目前社区所实现和!目前 所存在的问题!K8s

Volume

Provisioner部分的代码实现!

扩展K8s

的几种方式! Persistent

Volume与Persistent

Volume

Claim! PV

Controller的实现! Out-of-Tree

Provisioner的实现!一个简单的K8s

示例K8s的主要应用场景应用程序/服务

状态、数据存取等应用程序/服务配置文件

、秘钥配置等不同应用程序间或者应用程序内进程间共享数据K8s的主要应用场景——一个例子(1/4)需求部署一个Nginx服务,并在/var/nginx-data下用户上传的数据解决:使用AWS的弹性卷并将其挂载至K8s容器指定K8s的主要应用场景——一个例子(2/4)aws

ec2

create-volume

–availability-zone –size

xx

…Step

1创建一个AWS卷获取创建好的

卷ID{"AvailabilityZone":

”,"Encrypted":

false,"VolumeType":

"gp2”,"VolumeId":

"vol-xx”,"State":

"creating”,”,"Iops":

,"SnapshotId":

"”,"CreateTime":

”"Size":

xx}K8s的主要应用场景——一个例子(3/4)Step

2创建一个包含nginxpod定义的yaml文件文件中包含

卷在pod容器中的挂载位置以及K8s

卷定义,其中使用到了Step1中所创建的卷的IDapiVersion:

v1kind:

Podxxmetadata:name:

nginxspec:containers:image:

nginxname:

nginx-servervolumeMounts:-

mountPath:

/var/nginx-dataname:

data-volumevolumes:name:

data-volumeawsElasticBlockStore:volumeID:

vol-fsType:

ext4Step

3基于Step2中创建的yaml文件在K8s集群中创建nginx

pod登录运行中的pod,验证/var/nginx-data已经正确挂载Credit:2017/03/12/kubernetes-flexvolumes.htmlK8s的主要应用场景——一个例子(4/4)kubectl

create

–f

nginx_pod.yamlaws

ec2describe-volumes

--volume-idsvol-x{"Volumes":

[xx",{"Atta ents":

[{"VolumeId":

"vol-"State":

"attached”,"Device":

"/dev/xvdba"}]}]}K8s的主要设计原则遵循K8s整体架构式架构易用性,尽可能多地兼容各种相比较于Docker

Volume而言插件化兼容用户自定制插件平台安全性数据安全性生命周期K8s的主要模块Attach

Detach

ControllerKubeletVolumeManagerPV

ControllerVolume

PluginsNFSPDAWS

EBSFlexVolume…ThirdPartyPluginsHPNFSOut

of

Tree

Provisioners…LVM…K8s

的主要模块——Attach_Detach_Controller负责将两个网络块 设备挂载到某一个K8s节点的Controller结构Actual

State

of

WorldDesired

State

ofWorld三个线程PopulateActualStateofWorldPopulateDesiredStateofWorldReconcile与Volume

Plugin的交互Attach/DetachAttachablePluginsK8s

的主要模块——PV

ControllerPV

Controller和管理集群中的PV和PVC实现PV/PVC生命周期管理PVC:

Pending,

Bound,LostPV:Pending,

Available,

Bound,

Released,

Failed实现PV/PVC绑定实现Dynamic

ProvisionDirect

AccessDynamicProvisionK8s

的主要模块——Volume

Manager(1/2)运行在每个Kubelet上的

模块用于协调attach/detach

controller,PV

controller和各个Volume

Plugin最终实现将块设备从创建到挂载到K8s上指定

的过程K8s

的主要模块——Volume

Manager(2/2)K8s挂载卷的基本过程用户创建Pod包含一个PVCPod被分配到节点NodeAKubelet等待Volume

Manager准备设备PV

controller调用相应Volume

Plugin(in-tree或者out-of-tree)创建持久化卷并在系统中创建PV对象以及其与PVC的绑定(Provision)Attach/Detach

controller或者Volume

Manager通过VolumePlugin实现块设备挂载(Attach)Volume

Manager等待设备挂载完成,将卷挂载到节点指定/var/lib/kubelet/plugins/kubernetes.io/aws-ebs/mounts/vol-(mount)xxKubelet在

知设备准备好后启动Pod中的容器,利用Docker

–v等参数将已经挂载到本地的卷

到容器中(volume

map

)K8s

的主要模块——Volume

Plugin(1/2)Volume

Plugin的主要接口:InitNewProvisioner(Provision)NewDeleter(Delete)NewAttacher(Attach)NewDetacher(Detach)NewMounter(Mount)NewUnmounter(Unmount)Provisioner/Deleter

PluginAttachable

PluginK8s

的主要模块——Volume

Plugin(2/2)持久化

(网络)Persistent

Disk•AWS

Elastic

Block

StoreAzure

File

StorageAzure

DataDiskiSCSIFlockerNFSvShpereGlusterFSCeph

File

and

RBDCinderQuobyte

VolumeFibreChannelVMWare

Photon

PDPortworxDell

EMC

ScaleIO临时

(本地)Empty

Dir(tmpfs)K8s

APISecretConfigMapDownward

APIProjectedVolume其他Flex

VolumeHost

PathLocal

Persistent

StorageK8s目前存在的一些问题Resource

Limitation

&

SeparationData

Replication

&SnapshotVolume

Resize

and

AutoscalingMonitoring

and

QoSAccessModePV

Lost议程!

K8s

概览的 插件一览!

应用场景!

设计与基本架构!

目前社区所实现和!目前 所存在的问题!

K8s

Volume

Provisioner部分的代码实现!

扩展K8s

的几种方式! Persistent

Volume与Persistent

Volume

Claim! PV

Controller的实现! Out-of-Tree

Provisioner的实现!

一个简单的K8s

示例扩展K8s的几种方式的基本需扩展K8s求扩展方式新的Volume

PluginFlexVolumeOut-of-Tree

ProvisionerPersistent

Volume与Persistent

Volume

ClaimPersistent

Volume/Persistent

Volume

Claim从Storage

Admin与用户的角度看PV与PVCAdmin创建和

PV用户只需要使用PVC(size

&

access

mode)PVC与PV的绑定用户级别的逻辑对象,将Volume实现与Pod解耦PVC与VolumePV与VolumeStorage

ClassStorageClassStorageClass将说明Volume由哪种Volume

Provisioner创建、创建时参数以及从其他功能性/非功能性角度描述的

volume的各种参数Static

ProvisioningDynamic

ProvisioningIn-tree

provisionerOut-of-tree

provisionerPV、PVC&

StorageClassapiVersion:

v1metadata:name:

myclaimspec:accessModes:-

ReadWriteOnceresources:requests:storage:

10GistorageClassName:

slowkind:

PersistentVolumeClaim

kind:

PersistentVolumeapiVersion:

v1metadata:name:

pv0003spec:capacity:storage:

5GiaccessModes:-

ReadWriteOnceawsElasticBlockStore:volumeID:

vol-fsType:

ext4kind:

StorageClassapiVersion:

storage.k8s.io/v1metadata:name:

slowprovisioner:

kubernetes.io/aws-eparameters:parameters:type:

io1persistentVolumeReclaimPolicy:

Recyclzeone:

us-east-1dstorageClassName:

slowiopsPerGB:

"10"利用PVC重写前面例子中的Volume定义apiVersion:

v1kind:

Podmetadata:name:

nginxspec:containers:image:

nginxname:

nginx-servervolumeMounts:-

mountPath:

/var/nginx-dataname:

data-volumevolumes:name:

data-volumepersistentVolumeClaim:claimName:

myclaimxxapiVersion:

v1kind:

Podmetadata:name:

nginxspec:containers:image:

nginxname:

nginx-servervolumeMounts:-

mountPath:/var/nginx-dataname:

data-volumevolumes:name:

data-volumeawsElasticBlockStore:volumeID:

vol-fsType:

ext4PV

Controller——PersistentVolumeController主要数据结构volumeQueueworkqueue.TypevolumespersistentVolumeOrderIndex(cache.Store)corelisters.PersistentVolumeLister运行时刻框架volumeWorkerPV

add/update/sync/deletevolumeQueue管理PV生命周期

&

与PVC绑定

管理PVC生命周期

&

与PV绑定主要数据结构claimQueueworkqueue.TypeClaimscache.Storecorelisters.PersistentVolumeClaimLister运行时刻框架claimWorkerPVCadd/update/sync/deleteclaimQueuePV

Controller的基本实现kubernetes/pkg/controller/volume/persistentvolumePV

Controller的初始化过程Volume

Worker与Claim

Worker的工作流程Volume

WorkerClaim

WorkerSyncClaim的基本逻辑(pv_controller.go)PVC的基本状态PendingBoundLostAccess

ModeRWXRWOROXSyncVolume的基本逻辑(pv_controller.go)PV的基本状态PendingAvailableBoundReleasedFailedVolume

RecyclePolicyRetainRecycleDeletePV

Controller中的ProvisionProvisioner#NewProvisionerProvisioner:

#ProvisionStatic

ProvisionDynamic

ProvisionOut-of-Tree

Provisioner的基本工作场景Out

of

Tree

Provisioner的基本实现Incubator

Project

/kubernetes-incubator/

external-storage基本模块Provisioner部分(Samples)Controller部分Watch

PVC/PVCreate

PVDelete

PVMulti-ControllerLock代码位于external-storage/lib/controllerOut

of

Tree

Provisioner之多controller实例利用锁机制在多个不同controller实例时间共享锁信息代码位于external-storage/libs/leaderelection定义了一个Provision锁以及锁的操作机制。锁信息将作为annotation

于PVC中acquire->run->renewtype

LeaderElectionRecord

struct

{HolderIdentity

string

`json:"holderIdentity"`LeaseDurationSeconds

int`json:"leaseDurationSeconds"`AcquireTime

metav1.Time`json:"acquireTime"`RenewTime

metav1.Time`jso

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论