时间:2025-11-25 09:36
人气:
作者:admin
容器是一个独立的环境,我们在其中打包应用程序及其依赖项。通常,容器运行单个进程,每个容器都有一个IP地址,可以附加卷并控制CPU和内存资源等。所有这些都是通过命名空间和控制组的概念发生的。
Kubernetes是一个用于部署、扩展和管理容器化应用程序的容器编排系统,它有自己的容器运行方式。其中,Pod是Kubernetes中最小的可部署单元,代表应用程序的单个实例。
比如,如果想运行Nginx应用程序,就可以在Pod中运行。与容器的区别:容器是一个单一的单元,而一个Pod可以包含多个容器。可以将Pod视为将一个或多个容器容纳在一起的盒子。Pod提供更高级别的抽象,允许将多个容器作为一个单元管理。这里不再是每一个容器一个IP,而是Pod整体获取一个IP,然后Pod内的多个不同容器互相之间,用localhost通信。
1)Pod内所有容器共享以下Linux命名空间:
2)Pod内容器默认隔离以下资源:
shareProcessNamespace: true开启共享;Pod的设计是Kubernetes对”容器化应用协作”的抽象优化——既保留了容器的隔离性(每个组件独立镜像、独立进程),又通过资源共享降低了协作成本。最终实现: ① 主业务与辅助功能分离,便于独立开发 ② 容器间低延迟通信、资源共享、避免跨节点开销 ③ 组件隔离运行,单个容器故障不扩散至整个应用
【ps】
Pod是原生Kubernetes对象,若要创建Pod,要以YAML格式声明pod要求。还可以用kubectl命令创建pod。以下是创建Nginx web服务器Pod的Pod yaml示例。
apiVersion: v1 kind: Pod metadata: name: web-server-pod labels: app: web-server environment: production annotations: description: This pod runs the web server spec: containers: - name: web-server image: nginx:latest ports: - containerPort: 80
有两种方式创建容器:1)使用kubectl(命令有其自身局限性);2)声明性方法(使用YAML清单)。
Pod 的名称是 web-server-pod 它应该有标签 app:web-server 和 environment:production 添加注释来描述容器。 使用 nginx:1.14.2 容器镜像。 公开容器端口 80。
(1)使用kubectl命令创建Pod
kubectl run web-server-pod \ --image=nginx:1.14.2 \ --restart=Never \ --port=80 \ --labels=app=web-server,environment=production \ --annotations description="This pod runs the web server"
kubectl get pods可以看到容器正在运行的状态,在我们这个例子中pod内只有一个容器。因此显示1/1准备就绪并正在运行。如果想查看正在运行的pod的所有内容,可以使用kebectl来查看这个pod的描述:kubectl describe pod web-server-pod(包括IP地址、命名空间、容器详细信息等)
(2)使用声明式YAML创建Pod
就是上面那个YAML文件,需要使用文件名执行以下kubectl命令:kubectl create -f nginx.yaml。
从本地工作站访问K8S集群中正在运行的pod。kubectl port-forward pod/web-server-pod 8080:80。此时进入到浏览器并访问localhost:8080会看到Nginx主页,该网页由我们的Nginx Web Server的Pod提供服务。
Pod通常由ReplicaSet Controller、Deployment Controller等控制器管理,使用YAML创建单个Pod时,不受任何控制器管理,在这种情况下,Pod会经历不同的生命周期阶段。
参考:
1、https://zhuanlan.zhihu.com/p/714041421