容器化技术(八):Pod—Kubernetes中的最小调度单位

Pod—Kubernetes中的最小调度单位

Pod是Kubernetes中的最小调度单位,应用容器就运行在Pod内。Node是我们运行Pod的机器,一个Node上可以运行很多个Pod。可以说Pod是Kubernetes中最重要的概念。

一个Pod是一组容器的集合,这组容器是紧密相关的,这组容器共享网络和存储等。每个Pod内都运行着一个Init的基础容器,其他的容器在Init容器上建立起来的。同一个Pod内的容器共享Init容器建立起来的网络和存储资源。

如下图所示,一个Pod中运行着A、B、C三个容器,它们都是在Init容器启动后创建的,Init容器负责构建整个Pod的网络与存储等资源。整个Pod中的容器都共享存储与网络。

在这里插入图片描述

Talk is cheap,show me code。现在来在我们创建的Kubernetes集群中创建第一个Pod。

执行以下命令:

vim pod-busy-nginx.yaml

pod-busy-nginx.yaml中内容为:

apiVersion: v1
kind: Pod
metadata:
   name: pod-busy-nginx
spec:
   containers:
   - name: busybox
     image: busybox
     command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']
   - name: nginx
     image: nginx
     ports:
     - containerPort: 80
       hostPort: 80

Kubernetes中所有的yaml文件分为四部分:

  • apiVersion:资源的版本号。
  • kind:资源文件的类别,本例子是Pod资源。
  • metadata:一些元数据,本例子中的内容是Pod的名字。
  • spec:资源的模板。

pod-busy-nginx.yaml的目标是创建一个Pod,其中有两个容器:

  • busybox:其中的command命令的功能时打印字符串,同时呢睡眠3600秒,因为busybox只是一个简版的操作系统,没有前台运行的命令,使用sleep命令,让这个容器能够在前台运行3600秒,也就是一小时。
  • nginx:其中的containerPort参数代表的是容器的端口,hostPort是容器的端口映射的宿主机的端口,访问的时候,使用对应宿主机的ip与端口来进行访问。

接下来,让Kubernetes集群执行这个yaml文件:

[root@kubernetes-master01 ~]# kubectl apply -f pod-busy-nginx.yaml
pod/pod-busy-nginx created

查询Pod的运行情况:

[root@kubernetes-master01 ~]# kubectl get pod -o wide
NAME             READY   STATUS    RESTARTS   AGE   IP           NODE                  
pod-busy-nginx   2/2     Running   0          38s   10.244.1.4   kubernetes-worker01

pod-busy-nginx的Pod已经运行起来了,它的状态为Running,整个Pod的ip是10.244.1.4,但是这个ip只能在Kubernetes集群中访问,无法在集群外的任何机器上访问。

Pod运行在节点kubernetes-worker01上面,我们可以到这个节点上,查看容器运行的情况,发现有一个pause镜像在运行,这就是init容器。

[root@kubernetes-worker01 ~]# docker ps
CONTAINER ID   IMAGE                                                            
e68a943f3a60   nginx        
e561eab5d0fa   busybox                                              
f39b1b4fc35c   fvn7v6mj.mirror.aliyuncs.com/mirrorgcrio/pause:3.2   

那么我们如何访问Pod中运行的容器呢?pod-busy-nginx的Pod运行在了节点kubernetes-worker01上面,我们可以直接通过此节点的ip与对应的hostPort端口来访问。

在这里插入图片描述

可以通过kubectl工具分别查看Pod pod-busy-nginx中的容器busybox与nginx的日志:

[root@kubernetes-master01 ~]# kubectl logs pod-busy-nginx -c busybox
Hello, Kubernetes!

命令中:

  • pod-busy-nginx:此参数为运行的Pod的名称。
  • -c:此参数指定Pod中的具体容器的名字。

如何验证Pod中的两个容器共有同一个ip呢?先进入busybox容器中,查看它的ip,如下所示,为10.244.1.4:

[root@kubernetes-master01 ~]# kubectl exec -it pod-busy-nginx -c busybox -- /bin/sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1450 qdisc noqueue
    link/ether 86:3a:36:04:5b:49 brd ff:ff:ff:ff:ff:ff
    inet 10.244.1.4/24 brd 10.244.1.255 scope global eth0
       valid_lft forever preferred_lft forever

然后进入nginx容器,查看它的ip,如下所示,也是10.244.1.4。

[root@kubernetes-master01 ~]# kubectl exec -it pod-busy-nginx -c nginx -- /bin/sh
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
3: eth0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default
    link/ether 86:3a:36:04:5b:49 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 10.244.1.4/24 brd 10.244.1.255 scope global eth0
       valid_lft forever preferred_lft forever

关于Pod中的容器共享网络的例子,我们会在后面的文章中,进行验证。

猜你喜欢

如果你对容器化技术的相关知识感兴趣,可以阅读:秀丽的容器化技术Kubernetes专栏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值