一文深入理解 Kubernetes.docx
《一文深入理解 Kubernetes.docx》由会员分享,可在线阅读,更多相关《一文深入理解 Kubernetes.docx(26页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一文深入理解Kubernetes注意即使连到节点1的端口可以能分配到节点2上执行。设置externalTrafficPolicy:local属性可将流量路由到当前节点所在的pod.假设当前节点pod不存在连接挂起。externalTrafficPolicy:local不利于负载平衡当节点上的pod分散不均时。有个好处是转发到本地pod不用进展SNAT源网路地址转换这会将改变源IP记录。image-20210617170835886开放NodePort端口。image-202106171621269423获取节点IP【特意观察了下节点IP以及机器IP不是一个但在同一网关下】user00ubunt
2、u:$kubectlgetnodes-ojson|grepaddressaddresses:address:192.168.49.2,可在本地机器上向节点IP:nodePort发送恳求$curl:/192.168.49.2:30123Youvehitkubia-jppwdminikue可通过网页访问minikubeserviceservice-nameimage-20210617164756909LoadBalancer负载平衡器在NodePort外面包了一层。1负载平衡器放在节点前面将恳求传播到安康的节点。负载平衡器拥有自己独一无二的可公开访问的IP地址并将连接重定向到效劳。apiVersi
3、on:v1kind:Servicemetadata:name:kubia-loadbalancerspec:#负载平衡器类型type:LoadBalancerports:-port:80targetPort:8080selector:app:kubia假设没有指定特定端口负载平衡器会随机选择一个端口。$kubectlgetsvc|grepload#EXTERNALIPkubia-loadbalancerLoadBalancer10.96.24.178pending80:30600/TCP11m2创立效劳后要等待很长时间才能将外部IP地址写入对象。可通过外部ip直接访问curl:/EXTERNA
4、LIP3可以通过阅读器访问但每次访问都是一个pod即使SessionAffinity设为None因为阅读器采用keep-alive连接而curl每次开新连接。4恳求连的时候会连接到负载平衡器的80端口并路由到某个节点上分配的NodePort上随后转发到一个pod实例上。本质还是翻开了NodePort仍能继续使用节点IP:隐式NodePort端口访问$curl:/192.168.49.2:30600Youvehitkubia-sxkrrimage-20210617170233160Ingress1Ingress可以对外暴露效劳准入流量控制。2Ingress工作在HTTP层通过一个主机名途径就能转
5、到不同的效劳而每个LoadBalancer效劳需要自己的负载平衡器以及独有的公有IP地址。工作在更高层次的协议层可以提供更丰富的效劳。ingress可以绑定多主机、同主机多途径。image-202106171714362363启用Ingress资源需要Ingress控制器。通过minikubeaddonslist确认。apiVersion:extensions/v1beta1kind:Ingressmetadata:name:kubiaspec:rules:-host:kubia.example:paths:-path:/backend:#将kubia.example/恳求转发到nodepor
6、t效劳serviceName:kubia-nodeportservicePort:804kubia.example访问效劳的前提是域名能正确解析为ingress的IP。$kubectlgetingressNAMECLASSHOSTSADDRESSPORTSAGEkubianonekubia.example192.168.49.28070s然后再/etc/hosts参加映射rootubuntu:#cat/etc/hosts127.0.0.1localhost127.0.1.1ubuntu192.168.49.2kubia.example通过地址访问#必须配置hosts直接通过ingressIP访
7、问是不行的无法知道访问的是哪个效劳$curl:/kubia.exampleYouvehitkubia-xvkpg5ingress访问流程如下通过DNS查找:/kubia.example对应的ingressIP向Ingress控制器发送恳求并在头部中包含需要访问的效劳kubia.example在Endpoints中查看该效劳对应的pod的IP表选择其中一个pod进展处理image-202106171729088176假设要采用s访问需要配置tls.secrete针对每个主机域名配置一个。name:kubiaspec:tls:-hosts:-kubia.examplesecretName:tls-
8、secret就绪探针1确认效劳启动后对外提供效劳。headless效劳有时候在集群内部/或集群外部需要知道其它节点的IP列表创立一个headless效劳包裹一层去查询该效劳的DNS会打印该效劳下的标签选择器选中的所有pod。1clusterIP:None,DNS效劳器返回的是pod的IP而非集群IP2创立headlessService该headless后端包含标签选择器选择的所有podapiVersion:v1kind:Servicemetadata:name:kubia-headlessspec:#headless效劳clusterIP:Noneports:-port:80targetPor
9、t:8080selector:app:kubiaheadless效劳无集群IPimage-20210617174322816运行临时podkubectlrundnsutils-imagetutum/dnsutils-command-sleepinfinitypod/dnsutilscreated在该临时pod查看headless效劳标签选择器选择的pod注意只会展示就绪的podip$kubectlexecdnsutilsnslookupkubia-headlessName:kubia-headless.default.svc.cluster.localAddress:172.17.0.5Nam
10、e:kubia-headless.default.svc.cluster.localAddress:172.17.0.4Name:kubia-headless.default.svc.cluster.localAddress:172.17.0.3普通service返回的是集群IP$kubectlexecdnsutilsnslookupkubiaName:kubia.default.svc.cluster.localAddress:10.105.237.811卷的作用是将磁盘挂载到容器。这个以及linux将指定目录挂载到盘很类似。2每个pod都有独立的文件系统文件系统来自于容器镜像。默认容器重启
11、后并不能识别之前容器写入文件系统的内容。这是因为新的容器拥有新的写入层。3pod中的所有容器都能使用卷但是需要提早挂载。4emptyDir卷是挂载一个空的目录。卷的装载在容器启动之前执行emptyDir卷的生命周期以及pod一样5可用的卷类型emptyDir用于存储临时数据的简单空目录。hostPath用于将目录从工作节点的文件系统挂载到pod中。gitRepo通过检出Git仓库的内容来初始化的卷。nfs挂载到pod中的NFS分享卷。gcePersistentDisk(Google高效能型存储磁盘卷、awsElasticBlockStore(AmazonWeb效劳弹性块存储卷、azureDis
12、k(MicrosoftAzure磁盘卷一一用于挂载云效劳商提供的特定存储类型。cinder、cephf、iscsi、flocker、glusterfs、quobyte、rbd、flexVolume、vsphere-Volume、photonPersistentDisk、scaleIO用于挂载其他类型的网络存储。configMap、secret、downwardAPI一一用于将Kubemetes局部资源以及集群信息公开给pod的特殊类型的卷。persistentVolumeClaim一一一种使用预置或动态配置的持久存储类型我们将在本章的最后一节对此展开讨论。单个容器可同时使用不同类型的多个卷em
13、ptyDir1emptyDir:在pod中的多个容器间分享存储apiVersion:v1kind:Podmetadata:name:fortunespec:containers:-image:luksa/fortunename:html-generatorvolumeMounts:-name:html#挂载的目录mountPath:/var/htdocs-image:nginx:alpinename:web-servervolumeMounts:-name:htmlmountPath:/usr/share/nginx/html#只读readOnly:trueports:#Nginx监听80端口
14、-containerPort:80protocol:TCPvolumes:-name:html#卷名称emptyDir:可在内存上创立emptyDirvolumes:-name:html#卷名称#emptyDir:emptyDir:medium:MemorygitRepo1gitRepo卷gitRepo卷根本上也是一个emptyDir卷它通过克隆Git仓库并在pod启动时但在创立容器之前检出特定版本来填充数据创立pod时会checkout指定版本。apiVersion:v1kind:Podmetadata:name:gitrepo-volume-podspec:containers:-imag
15、e:nginx:alpinename:web-servervolumeMounts:-name:htmlmountPath:/usr/share/nginx/htmlreadOnly:trueports:-containerPort:80protocol:TCPvolumes:-name:html#创立一个gitRepo卷gitRepo:repository:s:/github/luksa/kubia-website-example.gitrevision:master#checkout到当前目录可通过途径/usr/share/nginx/html访问directory:.8可创立一个side
16、car容器实时同步git如DockerHub上的gitsynchostPath1hostPath卷指向节点文件系统上特定的文件或者目录。注意是一些系统级别的pod通常由DaemonSet管理需要访问。2多个podhostPath卷中使用一样的途径可看到一样的文件。image-202106171254260363hostPath是第一种持久性存储的卷。【pod删除后仍然还在】emptyDir以及gitRepod随pod删除而删除。4假设将数据存储到节点上那么pod不能随机调度需要调度到指定节点才行。十分是pod重启时。1nfs效劳器可分享途径apiVersion:v1kind:Podmetada
17、ta:name:mongodb-nfsspec:volumes:-name:mongodb-datanfs:#指定nfs效劳server:1.2.3.4#分享途径path:/some/pathcontainers:-image:mongoname:mongodbvolumeMounts:-name:mongodb-datamountPath:/data/dbports:-containerPort:27017protocol:TCPPV以及PVC1将卷这种持久性信息以及pod解耦可防止处理根底设施细节。2PersistentVlume(持久卷简称PV)由集群管理员设置的底层存储。3Persis
18、tentVlumeClaim持久卷声明简称PVC用户声明需要申请的存储容量以及访问形式API效劳器负责找到知足要求的持久卷并绑定到持久卷声明。持久卷声明可当做pod中的一个卷来使用image-202106171306524864创立PVapiVersion:v1#创立持久卷kind:PersistentVolumemetadata:name:mongodb-pvspec:#持久卷大小capacity:storage:1Gi#读写形式accessModes:#单个客户端挂载是读写形式-ReadWriteOnce#多个客户端挂载是只读形式-ReadOnlyMany#设置策略PVC释放后PB将保存p
19、ersistentVolumeReclaimPolicy:Retain#在Google的gce磁盘上分配gcePersistentDisk:pdName:mongodbfsType:ext4persistentVolumeReclaimPolicy可指定回收策略Retain:删除PVC后PV保存Recycle删除内容可再次被PVC绑定Deleet:删除底层存储5:十分注意的是PV属于集群层面的资源PVC以及Pod:属于命名空间内的资源PVC声明apiVersion:v1kind:PersistentVolumeClaimmetadata:name:mongodb-pvcspec:resourc
20、es:#申请容量requests:storage:1Gi#单个客户端支持读写accessModes:-ReadWriteOnce#动态配置storageClassName:k8s根据声明的访问权限、容量大小寻找知足要求的PVPV以及PVC的创立相对独立。6使用PVC只需要在volumes中引用即可。apiVersion:v1kind:Podmetadata:name:mongodbspec:containers:-image:mongoname:mongodbvolumeMounts:-name:mongodb-datamountPath:/data/dbports:-containerPor
21、t:27017protocol:TCPvolumes:-name:mongodb-data#引用PVCpersistentVolumeClaim:claimName:mongodb-pvc7:PV以及PVC的解耦存储这块方便管理。StorageClass1:创立存储类StorageClass可动态创立PV。方便集群管理员管理。2不指定StorgeClass会使用集群默认的存储类分配。apiVersion:v1kind:PersistentVolumeClaimmetadata:name:mongodb-pvc2spec:resources:requests:storage:100Miacces
22、sModes:-ReadWriteOnce#未指定StorageClass那么使用默认的StorageClass分配3手动配置的PV以及StorageClass可同时存在假设不想用StorageClass分配时可将StorageClass:配置为空那么将使用预先配置的PV持久卷。4创立一个StorageClass对象apiVersion:storage.k8s.io/v1kind:StorageClassmetadata:name:fast#创立PV的预制程序provisioner:k8s.io/minikube-hostpathparameters:type:pd-ssd在PVC中使用Sto
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一文深入理解 Kubernetes 深入 理解
限制150内