




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
“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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 政府积分管理办法
- 护理调动管理办法
- 村居薪酬管理办法
- 投诉维权管理办法
- 文明商户管理办法
- 征信人员管理办法
- 林业种子管理办法
- 日常效能管理办法
- 手机刷票管理办法
- 快递仓储管理办法
- 2024年贵州遵义市新蒲新区城市社区工作者招聘笔试参考题库附带答案详解
- 多旋翼无人机驾驶员执照(CAAC)备考试题库大全-上部分
- 糖尿病急性并发症识别处理和预防护理课件
- 《电力机车制动机》 课件 项目三 CCB-II制动系统
- 中药临床应用指导原则与合理用药课件
- 信号灯、标志牌-标线、护栏、检验批
- 个人所得税赡养老人约定分摊协议书
- DFMEA与PFMEA案例参考模板
- 实习律师指南
- 2023湖北省黄冈市黄梅县黄梅镇招聘社区工作人员12人高频笔试、历年难易点考题(共500题含答案解析)模拟试卷
- 中建起重吊装工程施工方案
评论
0/150
提交评论