当前位置: 首页 > news >正文

2.Pod理论

Pod基本介绍
1.在 Kubernetes 中,Pod 是最小的调度单元,是容器的逻辑宿主机。Pod 可以包含一个或多个紧密关联的容器,这些容器共享同一个网络命名空间、存储卷以及主机名。通常情况下,这些容器会协同工作来提供一个完整的应用服务。 
2.Pod 是 Kubernetes 中的一个重要概念,因为它为多个容器提供了一个共享的上下文和环境。Pod 中的容器可以直接相互通信,它们之间的交互和通信可以通过本地主机的网络端口进行。Pod 还提供了一些共享的资源,如存储卷和命名空间等,可以使容器之间共享数据和状态。 
3.Pod 是 Kubernetes 中应用部署和管理的基本单元。当需要部署一个应用时,可以将所有相关的容器打包在同一个 Pod 中,然后通过 Kubernetes 控制器进行管理和调度。Pod 也是 Kubernetes 的一种扩展点,可以通过定义自定义资源(Custom Resources)来扩展 Pod 的功能和能力。 Pod、容器、节点关系: 
1.在 Kubernetes 中,容器是部署和运行应用程序的主要载体,而 Pod 则是用来管理容器的。每个 Pod 都可以包含一个或多个容器,这些容器共享同一个网络命名空间、存储卷以及主机名,它们在 Pod 中是处于相同的生命周期和调度环境下的。也就是说,当一个 Pod 被创建时,它里面的所有容器都会被一起创建,而当 Pod 被删除时,里面的所有容器也会被一起删除。 
2.节点是 Kubernetes 集群中的一台服务器,它是 Pod 的宿主机。当 Pod 被创建时,
Kubernetes 调度器会选择一个节点来运行该 Pod,然后在该节点上启动 Pod 中的所有容器。Pod 可以被调度到任意一个节点上运行,也可以在不同节点之间自由迁移。 
3.一个 Pod 包含了一个或多个容器,而这些容器运行在 Kubernetes 集群中的节点上。一个节点上可以运行多个 Pod,而一个 Pod 也可以包含多个容器。通过这种方式,Kubernetes 实现了容器的管理和调度,使得应用程序的部署和管理变得更加高效和便捷。 Go开发代码,这个代码想要跑在k8s里,需要把Go编译:go build编译之后会生成一个可执行
的文件。可执行的文件通过dockerfile做到镜像里。假如说镜像叫做go:v1 

自主式Pod和控制器管理的Pod

自主式pod: 
在k8s中,我们部署pod的时候,基本上都是使用控制器管理,那如果不使用控制器,也可以直接
定义一个pod资源,那么就是pod自己去控制自己,这样的pod称为自主式pod。root@ubuntu0:~/matedata/pod# cat pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: tomcat-podlabels:apps: v1
spec:containers:- name: tomcatports:- containerPort: 8080image: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresent测试访问
root@ubuntu0:~/matedata/pod# kubectl get pods -o wide
NAME         READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
tomcat-pod   1/1     Running   0          27s   10.244.25.131   ubuntu1   <none>           <none>
root@ubuntu0:~/matedata/pod# curl 10.244.25.131:8080<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><title>Apache Tomcat/8.5.41</title><link href="favicon.ico" rel="icon" type="image/x-icon" /><link href="favicon.ico" rel="shortcut icon" type="image/x-icon" /><link href="tomcat.css" rel="stylesheet" type="text/css" /></head>根据标签查找
root@ubuntu0:~/matedata/pod# kubectl get pods -l  apps=v1  
NAME         READY   STATUS    RESTARTS   AGE
tomcat-pod   1/1     Running   0          3m40s
root@ubuntu0:~/matedata/pod# kubectl get pods --show-labels 
NAME         READY   STATUS    RESTARTS   AGE     LABELS
tomcat-pod   1/1     Running   0          3m49s   apps=v1
root@ubuntu0:~/matedata/pod# kubectl delete -f pod.yaml 
pod "tomcat-pod" deleted
root@ubuntu0:~/matedata/pod# kubectl get pods -o wide
No resources found in default namespace.上面实验可以看到,当我们把pod删除之后,pod不会再创建一个新的pod,而是彻底从机器上删
除了,这种自主式pod适合测试环境或者非核心业务场景,如果生产环境用自主式pod部署应用,那是存在风险的,所以,我们平时管理Pod都是通过控制器去管理的。控制器可以根据不同的需求来创建和管理 Pod,例如: 
1、Deployment 控制器:用于创建和管理可扩展的 Pod 集合,支持滚动升级和回滚操作。 
2、StatefulSet 控制器:用于管理有状态的应用程序,支持有序部署和扩缩容操作。 
3、DaemonSet 控制器:用于在每个节点上运行一组 Pod,以支持集群级别的后台任务等。 
4、Job&&Cronjob 
5、Replicaset当使用这些控制器来创建和管理 Pod 时,控制器会监视 Pod 的状态并确保其持续满足用户的期望
状态。如果 Pod 的状态发生变化,例如某个容器挂掉了,控制器会自动进行故障恢复操作,以确保 
Pod 的期望状态能够得到恢复Deployment 资源
root@ubuntu0:~/matedata/pod# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:name: my-tomcat
spec:selector:matchLabels:run: my-tomcatreplicas: 2 template:metadata:labels:run: my-tomcat   #标签为  run: my-tomcat spec:containers:- name: my-tomcatimage: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresent# ports:#- containerPort: 80root@ubuntu0:~/matedata/pod# kubectl apply -f deployment.yaml 
deployment.apps/my-tomcat created
root@ubuntu0:~/matedata/pod# kubectl get deployments.apps 
NAME        READY   UP-TO-DATE   AVAILABLE   AGE
my-tomcat   2/2     2            2           9s
root@ubuntu0:~/matedata/pod# kubectl get rs             #创建  deployments 会自动的创建rs
NAME                   DESIRED   CURRENT   READY   AGE
my-tomcat-5f68cfc447   2         2         2       20s
root@ubuntu0:~/matedata/pod# kubectl get pods  
NAME                         READY   STATUS    RESTARTS   AGE
my-tomcat-5f68cfc447-hj7lh   1/1     Running   0          23s
my-tomcat-5f68cfc447-zd48k   1/1     Running   0          23s#配置kubectl子命令补全 
[root@xuegod63]# yum install -y bash-completion 
[root@xuegod63]# source /usr/share/bash-completion/bash_completion 
[root@xuegod63]# source <(kubectl completion bash) 
[root@xuegod63]# kubectl completion bash > ~/.kube/completion.bash.inc 
[root@xuegod63]# source '/root/.kube/completion.bash.inc' 
[root@xuegod63]# source $HOME/.bash_profile 
Kubectl 官方备忘单: 
https://kubernetes.io/zh/docs/reference/kubectl/cheatsheet/ 

资源类型

apiVersion	<string>  #字符串类型,后面直接跟字符串
metadata	<Object> #对象类型,下面还有字段
labels	<map[string]string>  #字典类型,相当于key:value
ports	<[]Object>  #对象列表 下一个需要在前面加一个 -  键值对类型
activeDeadlineSeconds	<integer>  整形
enableServiceLinks	<boolean>  布尔类型

创建Pod资源技巧

在创建pod的时候,可以通过写资源清单文件去实现,Pod资源清单文件中有几个重要的部分:
apiVersion、kind、metadata、spec 以及status,其中apiVersion 和kind是比较固定的,status
是运行时的状态,不需要我们自己定义,所以最重要的就是metadata和spec两个部分。 
#查看定义pod资源包含哪些字段,可以使用kubectl explain命令:apiVersion: v1  
在 Kubernetes 中,每个资源都有一个apiVersion字段,它用于标识 API 中的不同版本。
apiVersion 字段由两个部分组成,用斜杠分隔:group/version。其中,group 表示 API 组的名称,version 表示 API 版本号。 对于 Pod 资源来说,它的 apiVersion 字段通常是 v1,即 Kubernetes 的核心 API 组的版本。因此,Pod 的完整资源定义通常是这样的: 
apiVersion: v1 
kind: Pod 
metadata: name: my-pod 
spec: containers: - name: my-container image: nginx ports: - containerPort: 80#查看k8s中有哪些api版本 
root@ubuntu0:~/matedata/pod# kubectl api-versions 
admissionregistration.k8s.io/v1
apiextensions.k8s.io/v1
apiregistration.k8s.io/v1
apps/v1
authentication.k8s.io/v1
authorization.k8s.io/v1
autoscaling/v1
autoscaling/v2
autoscaling/v2beta1
autoscaling/v2beta2
batch/v1
batch/v1beta1
certificates.k8s.io/v1
coordination.k8s.io/v1
crd.projectcalico.org/v1
discovery.k8s.io/v1
discovery.k8s.io/v1beta1
events.k8s.io/v1
events.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta1
flowcontrol.apiserver.k8s.io/v1beta2
networking.k8s.io/v1
node.k8s.io/v1
node.k8s.io/v1beta1
policy/v1
policy/v1beta1
rbac.authorization.k8s.io/v1
scheduling.k8s.io/v1
storage.k8s.io/v1
storage.k8s.io/v1beta1
v1在上面的 Pod 定义中,kind 字段的值为 Pod,表示这是一个 Pod 资源的定义。其他常见的资源类型还包括 Deployment、Service、ConfigMap、Secret 等。 metadata 
在 Kubernetes 中,每个资源都有一个 metadata 字段,用于存储该资源的元数据信息,如资源名称、命名空间、标签、注释等。这些元数据信息可以用于标识和描述该资源,方便用户和Kubernetes 对该资源进行管理和操作。annotations: 注释,用于存储一些关于资源的元数据信息,如描述、版本、维护信息等,不影
响 Kubernetes 的管理和操作。
1、 annotations: 
假设你有一个 Kubernetes 集群,上面部署了一个 Web 应用,这个应用运行在一个 Pod 中。你想要记录该应用的版本号和部署时间,方便日后进行排查和版本管理。 
一种方案是将版本号和部署时间存储在 Pod 的 annotations 中。Pod 的定义文件可能如下所
示: 
apiVersion: v1 
kind: Pod 
metadata: name: my-app-pod annotations: version: v1.0.0 deployment-time: 2023-05-06T10:00:00Z 
spec: containers: - name: my-app-container image: nginx ports: - containerPort: 80给pod打标签
root@ubuntu0:~/matedata/pod# kubectl get pods --show-labels 
NAME                         READY   STATUS    RESTARTS   AGE   LABELS
my-tomcat-5f68cfc447-hj7lh   1/1     Running   0          12h   pod-template-hash=5f68cfc447,run=my-tomcat
my-tomcat-5f68cfc447-zd48k   1/1     Running   0          12h   pod-template-hash=5f68cfc447,run=my-tomcat给pod打标签: 
[root@xuegod63 ~]# kubectl label pods pod 名字  release=canary -n kube-system 
root@ubuntu0:~/matedata/pod# kubectl get pods --show-labels 
NAME                         READY   STATUS    RESTARTS   AGE   LABELS
my-tomcat-5f68cfc447-hj7lh   1/1     Running   0          12h   pod-template-hash=5f68cfc447,release=canary,run=my-tomcat
my-tomcat-5f68cfc447-zd48k   1/1     Running   0          12h   pod-template-hash=5f68cfc447,run=my-tomcat删除指定Pod的标签: 
kubectl label pods  pod名字  release-  -n kube-system 
root@ubuntu0:~/matedata/pod# kubectl label pods my-tomcat-5f68cfc447-hj7lh release-
pod/my-tomcat-5f68cfc447-hj7lh unlabeled
root@ubuntu0:~/matedata/pod# kubectl get pods --show-labels 
NAME                         READY   STATUS    RESTARTS   AGE   LABELS
my-tomcat-5f68cfc447-hj7lh   1/1     Running   0          12h   pod-template-hash=5f68cfc447,run=my-tomcat
my-tomcat-5f68cfc447-zd48k   1/1     Running   0          12h   pod-template-hash=5f68cfc447,run=my-tomcat给node打标签
root@ubuntu0:~/matedata/pod# kubectl get  node --show-labels
NAME      STATUS   ROLES                  AGE   VERSION    LABELS
node      Ready    control-plane,master   23h   v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=node,kubernetes.io/os=linux,node-role.kubernetes.io/control-plane=,node-role.kubernetes.io/master=,node.kubernetes.io/exclude-from-external-load-balancers=
ubuntu1   Ready    <none>                 23h   v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntu1,kubernetes.io/os=linux
ubuntu2   Ready    <none>                 23h   v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntu2,kubernetes.io/os=linuxroot@ubuntu0:~/matedata/pod# kubectl label nodes ubuntu1 class=IT
node/ubuntu1 labeled
root@ubuntu0:~/matedata/pod# kubectl get  node --show-labels|grep class=IT
ubuntu1   Ready    <none>                 23h   v1.23.17   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,class=IT,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntu1,kubernetes.io/os=linux
删除node标签
root@ubuntu0:~/matedata/pod# kubectl label nodes ubuntu1 class-
node/ubuntu1 unlabeled
root@ubuntu0:~/matedata/pod# kubectl get  node --show-labels|grep class=IT
root@ubuntu0:~/matedata/pod# 

namespace:命名空间

   namespace 是k8s集群级别的资源,可以给不同的用户、租户、环境或项目创建对应的名称空间,例如,可以为development、qa、和production应用环境分别创建各自的名称空间。k8s 的绝大多数资源都属于名称空间级别,同一名称空间内的同一类资源名必须是唯一的,但跨名称空间时并无此限制。k8s还有一些资源属于集群级别的,如node、namespace、PersistentVolume等资源,它们不属于任何名称空间,因此资源对象的名称必须全局唯一。1、查看名称空间及其资源对象 k8s 集群默认提供了几个名称空间用于特定目的,例如,kube-system主要用于运行系统级资源,而default 则为那些未指定名称空间的资源操作提供一个默认值。使用kubectl get namespace 或者kubectl get ns 可以查看namespace 资源,使用kubectl describe namespace $NAME 可以查看特定的名称空间的详细信息。 2、管理namespace资源 namespace 是k8s api的标准资源类型之一,namespace资源属性较少,通常只需要指定名称即可创建,如“kubectl create namespace qa”。namespace 资源的名称仅能由字母、数字、下划线、连接线等字符组成。删除namespace资源会级联删除其包含的所有其他资源对象:命令格式   功能kubectl delete TYPE RESOURCE -n NS 删除指定名称空间内的指定资源    TYPE就是资源类型  比如说 kubectl delete pod就是删除pod资源 RESOURCE 具体的资源名字  -n删除那个名称下的pod
kubectl delete TYPE --all -n NS    
删除指定名称空间内的指定类型的所有资源 
kubectl delete all -n NS 删除指定名称空间内的所有资源 
kubectl delete all --all 删除所有名称空间中的所有资源 
kubectl get all     列出指定名称空间的所有资源,除了个别的资源,如secret等不会列出来,大部分都会列出来 
kubectl get all -A  列出来所有名称空间的所有资源,除了个别的资源,如secret等不会列出来,大部分都会列出来  

运行pod

root@ubuntu0:~/matedata/pod# cat demo-pod.yaml 
apiVersion: v1
kind: Pod
metadata:name: demo-podnamespace: defaultlabels:app: myappenv: dev
spec:nodeName: ubuntu1containers:- name: tomcat-pod-javaimage: tomcat:8.5-jre8-alpineimagePullPolicy: IfNotPresentports: - containerPort: 8080- name: busyboximage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- "/bin/sh"- "-c"- "sleep 3600"root@ubuntu0:~/matedata/pod# kubectl apply -f demo-pod.yaml 
pod/demo-pod created
root@ubuntu0:~/matedata/pod# kubectl get pods -o wide
NAME       READY   STATUS    RESTARTS   AGE   IP              NODE      NOMINATED NODE   READINESS GATES
demo-pod   2/2     Running   0          5s    10.244.25.136   ubuntu1   <none>           <none>如果报错的话,可以通过describe来看日志,也可以看具体镜像的日志
root@ubuntu0:~/matedata/pod# kubectl describe pods demo-pod |grep -B2 'Image:'tomcat-pod-java:Container ID:   docker://933ebc1b1fd8c5314f11058f57742e1a42d2d88acb6e6a27cd7a8b85e32b653eImage:          tomcat:8.5-jre8-alpine
--busybox:Container ID:  docker://82b3d5f928c5f8f0e4e3b10827a11c1116c72f3728567e1bfea7e23ce0f20ea0Image:         busybox:1.28看单个容器的日志
root@ubuntu0:~/matedata/pod# kubectl logs demo-pod -c tomcat-pod-java
会有提示
root@ubuntu0:~/matedata/pod# kubectl logs demo-pod                   
error: a container name must be specified for pod demo-pod, choose one of: [tomcat-pod-java busybox]进入容器
root@ubuntu0:~/matedata/pod#  kubectl exec -it demo-pod -c busybox -- /bin/sh
/ # 删除pod,有两种方法
方法一:
root@ubuntu0:~/matedata/pod# kubectl delete -f demo-pod.yaml 
pod "demo-pod" deleted
root@ubuntu0:~/matedata/pod# kubectl delete pods demo-pod 

pod.spec字段详解

参数解释说明: 
1、activeDeadlineSeconds:它定义了一个 Pod 的运行时最长时间。一旦 Pod 的运行时间超过这个时间,Kubernetes 就会自动终止 Pod,然后将其删除。这个参数可以用来避免某些应用程序的错误或异常导致 Pod 的生命周期过长,占用集群资源,影响其他应用程序的性能。举个例子,假设你有一个应用程序在 Kubernetes 中运行,这个应用程序可能因为某种原因陷入死循环或者其它异常情况,导致它的生命周期无限延长。如果你没有设置 activeDeadlineSeconds,那么这个应用程序将会一直运行下去,直到你手动停止它或者 Kubernetes 集群自动终止它为止。 如果你设置了 activeDeadlineSeconds,那么这个应用程序的生命周期将会被限制在指定的时间内。一旦应用程序运行的时间超过了这个时间,Kubernetes 就会自动终止它,然后删除它。这样可以避免应用程序的错误或异常对集群造成过多的负荷,保护集群的稳定性和安全性。 如果 Pod 需要一直提供服务,那么 activeDeadlineSeconds 参数就不再适用了,因为它的作用是限制 Pod 生命周期最长时间。在这种情况下,你可以将 activeDeadlineSeconds 设置为一个非常大的值,比如 100 天,以确保它不会影响你的服务稳定性。 需要注意的是,即使你将 activeDeadlineSeconds 设置为一个非常大的值,Pod 仍然可能会在某些情况下被终止,比如它所在的节点发生故障,或者你手动将它删除。因此,为了保证服务的高可用性,建议使用 Kubernetes 的高可用性特性,比如 Pod 的复制集、服务发现、自动扩展等,来确保服务的稳定性和可用性。2.dnsConfigs
dnsConfig 字段用于设置 Pod 内部 DNS 解析的相关参数,可以通过该字段来配置 Pod 的 
DNS 解析方式,包括 DNS 服务器地址、搜索域、是否启用 DNS 传输层安全(DNS-over-TLS)等选项。 具体来说,dnsConfig 字段包含以下字段: nameservers:指定 DNS 服务器的 IP 地址列表。searches:指定 DNS 解析时的搜索域列表。在 Kubernetes 中,通常情况下 Pod 内部的 DNS 解析是自动进行的,而且已经默认配置了一个 DNS 服务器(通常是 kube-dns 或 CoreDNS),以供 Pod 内部进行 DNS 解析。然而,在一些特定的场景下,比如需要使用特定的 DNS 服务器或者搜索域时,就可以使用 dnsConfig 字段来进行设置。 需要注意的是,dnsConfig 字段只对 Pod 内部的 DNS 解析生效,如果你需要在 Pod 外部   访问该 Pod,则需要通过 Service 或者 Ingress 等资源进行暴露,而不是通过 dnsConfig  字段进行配置。一个具体的例子是,假设你有一个需要使用特定 DNS 服务器和搜索域的应用程序运行在 
Kubernetes 集群中的某个 Pod 中,你可以在该 Pod 的 spec 字段中添加如下配置: 
apiVersion: v1 
kind: Pod 
metadata: name: myapp-pod 
spec: containers: - name: myapp-container image: nginx dnsConfig: nameservers: - 10.10.10.10 - 10.10.10.11 searches: - myapp.example.com - mydb.example.com 上面的配置指定了两个 DNS 服务器的 IP 地址以及两个搜索域,分别为 10.10.10.10,10.10.10.11 和 myapp.example.com、mydb.example.com。这样,Pod 内部进行 DNS 解析时就会使用这些配置,而不是默认的 DNS 服务器和搜索域。 什么使搜索域? 
搜索域(Search Domain)是指在 DNS 解析时,当查询的主机名(Hostname)不是一个完全合格的域名(Fully Qualified Domain Name,FQDN)时,系统会自动在查询之前加上一个默认的域名后缀,尝试解析完整的主机名。 例如,假设你的应用程序要连接一个名为 db 的数据库服务。如果你的主机名为 myapp,而搜索域设置为 example.com,那么在 DNS 解析时会自动将主机名解析为 db.example.com 3.dnsPolicydnsPolicy 是 Kubernetes 中用来指定 Pod 的 DNS 解析策略的一个字段,它的值可以是 Default、ClusterFirst、ClusterFirstWithHostNet、None。具体各个取值的含义如下:Default:继承自所在 Node 的 DNS 配置。这是默认的 DNS 策略。 
ClusterFirst:在 Pod 的 DNS 解析中,优先使用 Kubernetes 集群内部的 DNS 解析服务(kube-dns 或 CoreDNS),如果解析失败,则使用 Node 的 DNS 解析服务。 
ClusterFirstWithHostNet:当 pod 共享物理机网络时,它将首先查找集群内部的DNS服务来解析域名。如果无法解析,则尝试使用主机上的DNS解析  
None:禁用 Pod 的 DNS 解析功能,由用户自己负责配置。具体的应用场景: 
如果一个 Pod 需要访问其他 Pod,且需要使用 Kubernetes 集群内部的 DNS 服务解析主机名,那么可以将 dnsPolicy 设置为 ClusterFirst。
如果一个 Pod 需要使用本地主机的 DNS 服务解析主机名,那么可以将 dnsPolicy 设置为 Default。
如果一个 Pod 需要直接访问本地主机的 DNS 服务,那么可以将 dnsPolicy 设置为 ClusterFirstWithHostNet。 
需要注意的是,在设置 dnsPolicy 时,需要根据具体的应用场景和网络环境来选择合适的值,以确保 DNS 解析的正确性和性能。hostAliases
它允许在 Pod 内部定义一个主机别名列表,以便在 Pod 内部解析主机名时使用。每个别名都是由一个 IP 地址、一个主机名列表和一个可选的 IP 地址类型组成。例如:
hostAliases: 
- ip: "192.168.1.1" hostnames: - "foo.example.com" - "bar.example.com" 
- ip: "10.1.2.3" hostnames: - "baz.example.com" 
- ip: "fe80::1" hostnames: - "ipv6foo.local" - "ipv6bar.local" ip6: true这个例子定义了三个主机别名。第一个别名将 IP 地址 192.168.1.1 映射到 foo.example.com 和 bar.example.com 两个主机名上。第二个别名将 IP 地址 10.1.2.3 映射到 baz.example.com 主机名上。第三个别名将 IPv6 地址 fe80::1 映射到 ipv6foo.local 和 ipv6bar.local 两个主机名上,并且指定了 IPv6 地址类型。通过定义 hostAliases,Pod 可以在内部访问其他主机,而不需要使用 Kubernetes 中的Service 或者外部的 DNS。这通常在需要与一些特定主机进行通信的场景下使用,例如在使用一些外部存储解决方案时。5.hostNetwork
如果一个 Pod 的 hostNetwork 参数设置为 true,那么这个 Pod 中的容器将会和宿主机共享网络命名空间,即它们将会使用宿主机的网络配置,而不是 Kubernetes 中的网络配置。使用 hostNetwork 参数可以让容器直接访问宿主机上的网络资源,而无需通过 Kubernetes 网络插件进行网络转发和转换。但同时,使用 hostNetwork 参数也会存在一些安全和隔离性问题,因为容器和宿主机共享同一个网络命名空间,容器的网络流量也将会被宿主机上的其他进程所共享。因此,在使用 hostNetwork 参数时需要仔细权衡安全和性能等方面的因素
http://www.lryc.cn/news/623483.html

相关文章:

  • Golang database/sql 包深度解析(二):连接池实现原理
  • 云原生俱乐部-RH134知识点总结(3)
  • PyCharm与前沿技术集成指南:AI开发、云原生与大数据实战
  • Spring Boot 项目配置 MySQL SSL 加密访问
  • Debug马拉松:崩溃Bug的终极挑战
  • 本地处理不上传!隐私安全的PDF转换解决方案
  • 华为云之Linux系统安装部署Tomcat服务器
  • Git 命令指南:从 0 到熟练、从常用到“几乎全集”(含常见报错与解决)建议收藏!!!
  • LintCode第137-克隆图
  • 学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17
  • 《设计模式》工厂方法模式
  • 代码随想录算法训练营四十四天|图论part02
  • 天地图开发的优点
  • The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
  • GANs生成对抗网络生成手写数字的Pytorch实现
  • VS Code配置MinGW64编译Apache Arrow C++库
  • 【k8s、docker】Headless Service(无头服务)
  • python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建
  • C++算法题目分享:二叉搜索树相关的习题
  • 【前端基础】flex布局中使用`justify-content`后,最后一行的布局问题
  • ubuntu 24.04 安装
  • Android RxJava线程调度与性能优化指南
  • (一)前端面试(cookie/)
  • PostgreSQL导入mimic4
  • 数据结构代码分享-1 顺序表
  • 简单的 VSCode 设置
  • Oracle algorithm的含义
  • 基于Vue + Node能源采购系统的设计与实现/基于express的能源管理系统#node.js
  • Qt 5.5 的安装与配置(使用 VSCode编辑)
  • 【架构师从入门到进阶】第五章:DNSCDN网关优化思路——第十二节:网关安全-信息过滤