K8s-Pod

网友投稿 284 2022-09-08

K8s-Pod

K8s-Pod

文章目录

​​K8s-Pod​​

​​基础结构​​

​​网络​​​​存储​​

​​实践​​​​Deployment​​

Pod是一组容器(一个或者多个),是k8s中的最小调度单位,可以把Pod理解为传统的虚拟机,Pod中的容器就是虚拟机中运行的进程,k8s无法直接操作和调度容器,只能通过编排Pod来调度容器,Pod为其中运行的容器提供共享的网络,存储和命名空间

基础结构

网络

Pod中的容器共享Pod的网络资源:

一个Pod只有一个IP地址,Pod中的容器共享该Pod的IP地址和端口

Pod中容器间的通信:

通过共享卷通信

使用主机中的一个共享目录作为通信,pod中的一个容器向共享卷中写入数据,其他容器读取共享卷中的数据

进程间通信(IPC)

Pod中的容器共享同一个IPC命名空间,这意味着它们可以使用标准的进程间通信方式来互相通信,比如SystemV信号量和POSIX共享内存。

容器间的网络通信

Pod中的容器可以通过“localhost”来互相通信,因为他们使用同一个网络命名空间。而且,对容器来说,hostname就是Pod的名称。因为Pod中的所有容器共享同一个IP地址和端口空间,你需要为每个需要接收连接的容器分配不同的端口。也就是说,Pod中的应用需要自己协调端口的使用。

存储

Pod 可指定一组存储卷,Pod 中多容器均可以访问该存储卷,以便互相共享数据,Pod 中的共享卷可以持久保存,防止容器重启丢失数据

实践

发布一个pod

编写pod的yaml文件

apiVersion: v1kind: Podmetadata: name: nginxspec: containers: - name: nginx # 指定镜像 image: nginx:alpine # 指定暴露端口 ports: - containerPort: 80

根据配置文件部署pod

kubectl apply -f nginx.yaml

查看pod运行状态:如果状态是running,则pod部署成功

kubectl get pods

使用-o wide可获取到nginx这个pod的ip

kubectl get pods nginx -o wide

每个 pod 都有一个IP地址,直接访问IP地址获取内容

通过​​kubectl exec​​​可以进入到Pod内部,如果 Pod 中有多个容器,使用​​kubectl exec -c​​ 指定容器

kubectl exec -it nginx sh

可以看到nginx已经暴露了80端口

netstat -tan

访问下nginx

wget -q -O - localhost

Deployment

在K8s中编排应用可以更好的做弹性扩容,负载均衡,竟然要做负载均衡,那么一个Pod是不够的,需要部署多个pod

在k8s中管理Pod的成为controller,可以使用Deployment这种controller对pod进行扩容,回滚,滚动升级等

发布一个deployment:

apiVersion: apps/v1kind: Deploymentmetadata: name: nginx-deployment # deployment名称spec: selector: matchLabels: app: nginx # service负载均衡的选择标签 replicas: 3 # 部署的pod数量 template: # 指定部署的pod metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:alpine ports: - containerPort: 80

发布:

kubectl apply -f nginx-deployment.yaml

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:K8s-Service
下一篇:“文具盲盒”流行隐藏哪些套路 专家:过度商业包装和营销是诱因!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~