9-5 深入Pod - pod相关的点点滴滴(上)

设计思想

pod是最小的调度单位

本质还是容器的隔离(共享了同一个network namespace 共享了一个volume docker也可以使用docker run --net=xxx --volume-from=xxx 实现)

pause容器,每个pod都有它,并且会率先启动

 

创建pod-network.yaml

apiVersion: v1
kind: Pod
metadata :
  name: pod-network
spec:
  containers :
  - name: web
    image: harbor.pdabc.com/kubernetes/web:v3
    ports:
    - containerPort: 8080
  - name: dubbo
    env:
    - name: DUBBO_P0RT
      value: "20881"
    image : harbor.pdabc.com/kubernetes/dubbo:v1
    ports:
    - containerPort: 20881
      hostPort: 20881
      protocol: TCP

 

1pod对网络的设计

创建pod

kubectl create -f pod-network.yaml

kubectl get pods -o wide

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

到node3上执行docker ps |grep network

最先启动的是pause

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

进入其中一个容器

docker exec -it  0b0a79e9320d   /bin/sh 

 

发现当前容器是dubbo服务 但是可以同时看到tomcat的端口

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

通过wget 去访问8080端口 说明网络是通的

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

运行ifconfig 并记录下容器的ip为10.244.5.83

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

退出并进入另一个容器

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

发现ip是一样的 共享一个ip地址

 

 

2pod对volume的设计

先删除pod-network.yaml

kubectl delete -f pod-network.yaml

 

创建pod-volume.yaml

模拟业务容器写入日志 日志容器采日志 共用一个volume的情况 共享日志目录

创建pod-volume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
spec:
  containers:
  - name: web
    image: harbor.pdabc.com/kubernetes/web:v3
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-web
  - name: dubbo
    env:
    - name: DUBBO_PORT
      value: "20881"
    image: harbor.pdabc.com/kubernetes/dubbo:v3
    ports:
    - containerPort: 20881
      hostPort: 20881
      protocol: TCP
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-dubbo
  volumes:
  - name: shared-volume
    hostPath:
      path: /shared-volume-data


 

 

 kubectl  create -f pod-volume.yaml

这里我第一次创建的时候 容器一直处于error或者CrashLoopBackOff状态 通过describe 查看日志也看不出什么.后来发现是弄错镜像了.v1版本的镜像dockerfile 不对

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

查看到pod启动在node3上,在node3进入容器看一下

进入第一个容器 并创建jiaminxu.txt的文件 验证是否可以共享

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

查看两个volume容器的/etc/hosts文件是否一致

docker ps |grep volume

docker exec -it c881e17ea8b8 cat /etc/hosts

docker exec -it 5837140fd00c cat /etc/hosts

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

证明了这个hosts文件是pod负责创建并管理的 并不是容器管理的,如果需要自定义修改hosts,不能在容器层面修改.需要修改pod-volume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
spec:
  hostAliases:
  - ip: "10.244.5.86"
# 可以添加多个主机名
    hostnames:
    - "web-alia.pdabc.com"
  containers:
  - name: web
    image: harbor.pdabc.com/kubernetes/web:v3
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-web
  - name: dubbo
    env:
    - name: DUBBO_PORT
      value: "20881"
    image: harbor.pdabc.com/kubernetes/dubbo:v3
    ports:
    - containerPort: 20881
      hostPort: 20881
      protocol: TCP
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-dubbo
  volumes:
  - name: shared-volume
    hostPath:
      path: /shared-volume-data


 

kubectl delete -f pod-volume.yaml 

kubectl create -f pod-volume.yaml

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

已经添加

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

继续修改pod-volume.yaml 

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
spec:
  hostNetwork: true
  hostPID: true
  hostAliases:
  - ip: "10.244.5.86"
    hostnames:
    - "web-alia.pdabc.com"


  containers:
  - name: web
    image: harbor.pdabc.com/kubernetes/web:v3
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-web
  - name: dubbo
    env:
    - name: DUBBO_PORT
      value: "20881"
    image: harbor.pdabc.com/kubernetes/dubbo:v3
    ports:
    - containerPort: 20881
      hostPort: 20881
      protocol: TCP
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-dubbo
  volumes:
  - name: shared-volume
    hostPath:
      path: /shared-volume-data

 

delete 之后create

kubectl delete -f pod-volume.yaml 

kubectl create -f pod-volume.yaml 

 

进入容器之后ps 可以看到很多进程

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

生命周期

继续修改pod-volume.yaml

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume
spec:
  hostNetwork: true
  hostPID: true
  hostAliases:
  - ip: "10.244.5.86"
    hostnames:
    - "web-alia.pdabc.com"


  containers:
  - name: web
    image: harbor.pdabc.com/kubernetes/web:v3
    ports:
    - containerPort: 8080
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-web
# poststart这步是容器执行entrypoint命令进行启动的时候,也会同时执行exec的command,不要放一些需要容器启动之后的命令 .
    lifecycle:
      postStart:
        exec:
          command: ["/bin/sh", "-c", "echo web starting ... >> /var/log/messages"]
# 这个命令是串行的,在容器停止之前会启动这个脚本,这个执行完之后才会停止容器,并且会等待命令执行完毕,有默认超时时间.
      preStop:
        exec:
          command: ["/bin/sh", "-c", "echo web stoping ... >> /var/log/messages && sleep 5"]


  - name: dubbo
    env:
    - name: DUBBO_PORT
      value: "20881"
    image: harbor.pdabc.com/kubernetes/dubbo:v3
    ports:
    - containerPort: 20881
      hostPort: 20881
      protocol: TCP
    volumeMounts:
    - name: shared-volume
      mountPath: /shared-dubbo
  volumes:
  - name: shared-volume
    hostPath:
      path: /shared-volume-data

 

delete 并且create

 

查看tomcat容器的messages 有启动的日志

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

再delete

[kubernetes]9-5 深入Pod - pod相关的点点滴滴(上)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关文章: