白话k8s-Pod的组成

k8s的所有功能都是围绕着Pod进行展开的,我们经常会看到类似这样一张图

白话k8s-Pod的组成

告诉我们,Pod是一组container的集合,container之间可以通过localhost:port的方式直接访问。
感觉很神奇,明明是不同的container怎么做到共用一个IP的,在随便一个容器内通过localhost访问就能访问其他容器的服务,通过例子和阅读源码找到了原因:

创建一个简单的Pod

apiVersion: v1 kind: Pod metadata: name: nginx labels: app: hello-world spec: containers: - name: nginx image: nginx ports: - containerPort: 80

create

kubectl create -f pod1.yaml

查看 pod 信息

$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx 1/1 Running 0 69s 10.244.1.3 node01 <none> <none>

在节点上docker ps一下,你会发现,一个Pod的组成:是由一个pause的容器和n个你自定义的容器组成的

白话k8s-Pod的组成

也就是如下图所示这样

白话k8s-Pod的组成

那Pod是如何把这些container组成一个的呢?用的是label
查看container的lable信息
pause的label

白话k8s-Pod的组成

nginx的label

白话k8s-Pod的组成

看一下数据, pod.name:"nginx", namespace: "default","pod.uid"都是一样的。k8s就是通过这些label来组织Pod的。

不使用k8s创建一个Pod

查看kubernets源码,发现K8s在启动一个Pod的时候,是先启动一个sandbox的容器,然后才再启动用户自定义的容器。

defaultSandboxImage = "k8s.gcr.io/pause:3.2"

白话k8s-Pod的组成

这个sandbox启动的时候会以--ipc="shareable"共享namespace方式启动

“shareable” Own private IPC namespace, with a possibility to share it with other containers.

也就是说,一个Pod里所有的容器共享 pause容器的资源,比如namesapce,network,uts...
我们可以做一个试验不使用k8s,直接使用docker来创建一个自己的Pod
先启动一个pause,分配一个端口

docker run -d --name pause --ipc="shareable" -p 9080:8080 k8s.gcr.io/pause:3.1

再启动一个echoserver,会启动一个http服务,监听8080端口。
共享的pause的各种资源

docker run -d --name echoserver --net=container:pause --ipc=container:pause --pid=container:pause googlecontainer/echoserver:1.9

我们请求pause容器。

$ curl :9080 -d "hello" Hostname: d6c76d2b87e5 Pod Information: -no pod information available- Server values: server_version=nginx: 1.13.3 - lua: 10008 Request Information: client_address=172.17.0.1 method=POST real path=http://www.likecs.com/ query= request_version=1.1 request_scheme=http request_uri=http://127.0.0.1:8080/ Request Headers: accept=*/* content-length=5 content-type=application/x-www-form-urlencoded host=127.0.0.1:9080 user-agent=curl/7.61.1 Request Body: hello

这两个容器就组成了一个简单的pod。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfzsp.html