学院网站建设情况,crm客户管理系统模板,广告机信息发布系统软件,苏州企业建设网站文章目录 命名空间#xff08;Namespaecs#xff09;查看命名空间查看带有命名空间对象下资源 文件存储持久卷#xff08;pv#xff0c;Persistent Volumes#xff09;卷容量卷模式#xff08;volumeMode#xff09;访问模式#xff08;accessModes#xff09;回收策略… 文章目录 命名空间Namespaecs查看命名空间查看带有命名空间对象下资源 文件存储持久卷pvPersistent Volumes卷容量卷模式volumeMode访问模式accessModes回收策略persistentVolumeReclaimPolicylocal卷nfs卷 持久卷声明pvcPersistentVolumesClaims资源 PV绑定PVC DeploymentService服务服务类型spec.type端口定义spec.ports 在K8s中进行资源命名时大部分支持的命名方式为DNS子域名命名方式即xxx-xxx的方式在大部分资源命名时不支持_所以在命名时但需要进行驼峰划分时推荐使用-进行划分 命名空间Namespaecs
查看命名空间
# 列出集群所有命名空间
kubectl get namespaces
kubectl get ns# 获取命名空间摘要信息
kubectl get ns ${namespace_name}# 获取命名空间详情信息
kubectl describe ns ${namespace_name}ns: namespace命令的缩写在k8s中可用ns命令指代namespaces下面统一采用ns代替namespaces 查看带有命名空间对象下资源
# 以pods资源为例
kubectl get pods --ns${namespace_name}文件存储
在K8s中通过卷volume来存储文件信息。在容器中的的文件内容在磁盘上临时存放当容器崩溃或被销毁时容器上的生命周期、状态文件信息等内容都会丢失。若是我们希望能够将容器内的文件信息和容器外的磁盘上文件进行关联需要通过挂载卷的方式进行挂载这些当容器出错时挂载的内容将不会被销毁。
持久卷pvPersistent Volumes
K8s中的持久卷Persistent Volumes简称PV是一种特殊类型的存储资源它可以为 Kubernetes中的Pod 供持久性的数据存储。持久卷的特点如下
数据持久性持久卷的数据在 Pod 退出时不会丢失即使 Pod 被删除卷中的数据也会保留。这使得持久卷成为一个非常适合存储数据持久性的解决方案。独立于 Pod每个持久卷都是独立于 Pod 的卷的存储和访问并不依赖于某个特定的 Pod。这意味着可以使用不同的持久卷来存储不同的数据或者将多个持久卷分配给同一个Pod。动态分配持久卷可以在Kubernetes中动态创建和删除。当一个PersistentVolumeClaim需要使用持久卷时Kubernetes会自动为其分配一个空闲的持久卷。当PersistentVolumeClaim不再需要该卷时Kubernetes会自动释放该卷以便其他PersistentVolumeClaim使用。存储类型持久卷可以存储各种类型的数据如Block存储、File存储、网络文件系统如NFS等。这使得持久卷可以用于各种不同的场景和用例。共享访问多个PersistentVolumeClaim可以共享同一个持久卷。这可以提高存储利用率减少卷的创建和删除次数从而简化了 Kubernetes 中的存储管理。
总之持久卷是 Kubernetes 中一种非常灵活和强大的存储解决方案它提供了数据持久性、独立性、动态分配、多种存储类型和共享访问等特点使得在管理和存储数据时具有很高的灵活性和效率。
卷容量
一般来说在PV持久卷里面需要声明卷容量该容量通过spec.capacity.storage指定
卷模式volumeMode
在PV持久卷中支持两种卷模式
Filesystem文件系统 属性设置为Filesystem的卷会被Pod挂载到某个目录如果卷的存储来自某块设备而该设备目前为空Kuberneretes会在第一次挂载卷之前在设备上创建文件系统。 Block快设备 将卷作为原始块设备来使用其上没有任何文件系统这种模式对于为 Pod 提供一种使用最快可能方式来访问卷而言很有帮助Pod和卷之间不存在文件系统层。另外Pod中运行的应用必须知道如何处理原始块设备
在yaml中可以通过spec.volumeMode指定卷模式该模式是可选的默认为Filesystem
访问模式accessModes
在PV上的访问模式有
ReadWriteOnceRWO卷可以被一个节点以读写方式挂载。ReadWriteOnce访问模式仍然可以在同一节点上运行的多个Pod访问该卷。 对于单个Pod的访问请参考ReadWriteOncePod访问模式。ReadOnlyManyROX卷可以被多个节点以只读方式挂载。ReadWriteManyRWX卷可以被多个节点以读写方式挂载。ReadWriteOncePodRWOP卷可以被单个Pod以读写方式挂载。如果你想确保整个集群中只有一个Pod可以读取或写入该PVC请使用ReadWriteOncePod访问模式。
在yaml中可以通过spec.accessModes指定卷模式该模式是可选的默认为Filesystem
回收策略persistentVolumeReclaimPolicy
目前的回收策略有
Retain手动回收Recycle简单擦除 (rm -rf /thevolume/*)Delete删除存储卷
local卷
local卷所代表的是某个被挂载的本地存储设备例如磁盘、分区或者目录。local 卷只能用作静态创建的持久卷。不支持动态配置。
当我们需要挂载集群上某一宿主机的卷时可以使用local卷进行挂载。
以下是一个PV使用local卷的示例
apiVersion: v1
kind: PersistentVolume
metadata:name: example-pv
spec:capacity:storage: 100GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: local-storagelocal:# 卷路径path: /mnt/disks/ssd1nodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:# 卷所在集群节点名称- example-nodenfs卷
nfs卷能将NFS(网络文件系统) 挂载到你的Pod中。
apiVersion: v1
kind: PersistentVolume
metadata:name: example-pv
spec:capacity:storage: 100GivolumeMode: FilesystemaccessModes:- ReadWriteManypersistentVolumeReclaimPolicy: RetainstorageClassName: nfs-storagenfs:server: xxxxxpath: /持久卷声明pvcPersistentVolumesClaims
在上述声明的PV卷是集群中的资源。声明了资源之后是无法直接对资源操作的在K8s中通过持久卷声明pvcPersistentVolumesClaims声明对资源对请求和检查工作。
即PV声明资源PVC声明对资源的访问方式通过PVC来访问持久卷资源。 同PV一样PVC同样支持访问模式卷模式具体参考上文 资源
同Pod一样PVC可以请求特定数量的资源。但在中请求的资源是存储。
通过spec.resources.requests.storage来声明请求的资源
PVC参考示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: example-pvc
spec:volumeMode: FilesystemaccessModes:- ReadWriteManystorageClassName: local-storageresources:requests:storage: 8GiPV绑定PVC
动态绑定在PV和PVC中通过spec.storageClassName声明存储类。如果集群中有合适的PV可用即与PVC规格匹配并且未被绑定则Kubernetes会自动将两者绑定在一起。如果没有可用PV则可能根据存储类触发动态供应流程创建新的PV。静态绑定管理员可以手动创建PV并为其设置特定的标签或者注解。然后在创建PVC时可以明确指定需要匹配的标签这样Kubernetes会在已有PV中寻找符合标签条件的PV进行绑定。
Deployment
在K8s中通过Deployment定义Pod和ReplicaSet的状态来提供声明式更新能力。通过在Deployment声明期望服务的目标状态当运行中的Pod等资源以非目标状态访问时Deployment控制器Controller以受控速率更改实际状态将目标资源变为期望状态。
deployment示例
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentnamespace: example-nslabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80env:- name: TZvalue: Asia/ShanghaivolumeMounts:- name: local-storagemountPath: /data/data/uploadsubPath: datavolumes:- name: local-storagepersistentVolumeClaim:claimName: ysocr-pvcmetadata: Deployment元数据信息 name: 定义了deployment名称且后续的Pod和ReplicaSet等资源以该name开头namespace: 指定该deployment所在命名空间label: 在Deployment中定义的标签以key: value的方式定义 spec.replicas: 声明的Pod和ReplicaSet资源的分片数量spec.selector: 定义所创建的ReplicaSet如何查找要管理的Pod。这里选择在Pod模板中定义的标签进行管理spec.template: metadata: 定义pod的元数据和spec: pod容器配置 container: 创建一个容器并使用 ports.containerPort: 定义容器内暴露的端口env: 容器环境变量配置volumeMounts: 卷挂载 name: volumes定义的卷名称mountPath: 容器内路径subPath: 相对于卷的路径 volumes: 卷配置通过关联PVC挂载卷和容器
Service服务
Deployment中定义了容器信息和容器的状态等内容不同于Docker Compose或Docker Swarm同一服务下的容器可以相互访问。K8s中Deployment仅定义了容器的状态相关信息如果希望在命名空间内部或者在宿主机上访问内部资源需要通过Service的方式来公开程序为网络服务。
Servic 是将运行在一个或一组 Pod 上的网络应用程序公开为网络服务的方法。
服务类型spec.type
K8s允许通过服务类型来设置容器对外提供服务的方式
ClusterIP 这类服务仅在Kubernetes集群内部可见不暴露给集群外部ClusterIP服务使用ClusterIP类型将Pods的网络接口与集群IP地址关联起来这种服务适用于在集群内部进行通信的情况该服务为默认Service服务类型当不进行服务类型配置时默认使用该配置 NodePort 这类服务在集群内部和外部都可以访问通过为Pods分配一个NodePortNodePort服务允许用户在外部访问Pods从而实现服务在集群内部和外部的统一访问适用于宿主机需要访问集群内部服务的情况 LoadBalancer 这类服务在集群内部和外部都可以访问这类服务将Pods的网络接口与集群external IP地址关联起来。LoadBalancer 服务在集群外部是可见的可以接收来自外部的流量通常LoadBalancer服务用于负载均衡和高可用场景当Pod有多个分片时可以考虑使用LoadBalancer进行负载均衡 ExternalName 这类服务将Pods的网络接口与外部的域名关联起来ExternalName服务允许用户为服务指定一个外部域名并将该域名解析为Pods的网络接口这种服务适用于将服务提供以域名的方式提供给外部用户的情况
端口定义spec.ports
在Kubernetes中Services的spec.ports定义了服务的外部访问端口。这些端口在集群内是可见的并且允许集群内的节点访问该服务。
spec.ports参数是一个包含多个端口对象的数组每个端口对象表示一个外部访问端口。spec.ports参数对象的常见参数有
name: 当Services中只定义单个端口时端口名称是可选的当在一个Services中定义多个端口时必须为所有端口提供名称以使它们无歧义protocol: 支持的协议可选参数默认为TCPport: 服务访问端口集群内部访问的端口暴露到集群上的端口定义了服务对外的访问接口可以通过clusterIp:port的形式访问targetPort: 表示服务内部使用的端口。是Pod控制器中定义的端口应用访问的端口。一般情况下port和targetPort保持一致 在Services中使用Pod控制器定义的端口时需要在Pod中声明containerPort参数 nodePort: 提供了集群外部客户端访问 Service 的一种方式指定nodePort后可以通过nodeIp:nodePort的形式进行访问 默认情况下为了方便起见Kubernetes控制平面会从某个范围内分配一个集群外部可访问端口号默认30000-32767
Services示例
apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:type: NodePortselector:app: nginxports:- name: name-of-service-portprotocol: TCPport: 80targetPort: 80nodePort: 30080