深入剖析Kubernetes--第五章:Kubernetes编排原理_Pod

kubernetes编排原理:Pod

1 为什么需要Pod
复习:

​ Namespace做隔离,Cgroups做限制,rootfs做文件系统

​ 容器的本质是进程

今日学习:

​ 在操作系统中,进程通常以进程组的方式“有原则”地组织在一起。

​ 一些容器之间需要紧密协作(超亲密关系):互相之间发生直接的文件交换、使用localhost 或者Socket文件进行本地通信、会发生非常频繁的远程调用、需要共享某些Linux Namespace(例如一个容器需要加入另一个容器的 Network Namespace)等

​ Pod是一个逻辑概念,是一组共享了某些资源的容器。Pod里所有容器都共享一个Network Namespace,实现上则需要一个中间容器–Infra容器(永远是第一个被创建的容器),其他用户定义的其他容器则通过Join Network Namespace的方式与Infra容器关联在一起。

Pod中的容器A、B:

​ 它们可以直接使用localhost进行通信

​ 他们看到的网络设备跟Infra一样

​ 一个Pod只有一个IP地址,也就是这个Pod的Network Namespace对应的IP地址

​ 所有网络资源都是一个Pod一份,被所有Pod中容器共享

​ Pod的生命周期只跟Infra容器一致,而与容器A和容器B无关

​ ps:如果为k8s开发网络插件,应考虑如何配置Pod的Network Namespace,而不是考虑每一个用户容器如何使用你的网络配置。

共享Volume:

​ kubernetes项目只需要把所有的Volume的定义都设计在Pod层级即可,Pod里的容器只要声明挂载这个Volume,就一定可以共享这个Volume对应的宿主机目录

apiVersion: v1
kind: pod
metadata:
  name: two-containers
spec:
  restartPolicy: Never
  volumes:
  - name: share-data
    hostPath:
      path: /data
  containers:
  - name: nginx-container
    image: nginx
    volumeMounts:
    - name: share-data
      mountPath: "/usr/share/nginx/html"
  - name: debian-container
    image: debian
    volumeMounts:
    - name: share-data
      mountPath: "/pod-data"
    command: ["/bin/sh"]
    args: ["-c","echo Hello from the debian container > /pod-data/index.hgtml"]
kubectl exec two-containers -it -c nginx-container /in/bash
cd /usr/share/nginx/html/
ls
index.hgtml

WAR包与Web服务器解决方法//貌似pull失败

apiVersion: v1
kind: Pod
metadata:
  name: javaweb-2
spec:
  initContainers:
  - image: geektime/sample:v2
    name: war
    command: ["cp","/sample.war","/app"]
    volumeMounts:
    - name: app-volume
      mountPath: /app
  containers:
  - name: tomcat
    image: geektime/tomcat:7.0
    command: ["sh","-c","/root/apache-tomcat-7.0.42-v2/bin/start.sh"]
    volumeMounts:
    - name: app-volume
      mountPath: /root/apache-tomcat-7.0.42-v2/webapps
    ports:
    - containerPort: 8080
      hostPort: 8001
  volumes:
  - name: app-volume
    emptyDir: {
   }

这里声明了两个容器,第一个容器使用的镜像是 geektime/sample:v2 ,这个镜像只有一个存放在根目录的 WAR 包 sample.war。另一个容器使用的镜像是 Tomcat。

WAR 包容器声明的是一个 initContainer 类型。initContainer 和 container 的区别在于,initContainer 会先于 container 且按照声明顺序运行,等 initContainer 运行完成才会运行普通的 container(有关顺序的容器:定义为Init Container)。

Pod 上挂载的 volume 是一个空目录 app-volume,即它只用于容器间共享。WAR 包容器将 app-volume 挂载到自己的 /app 目录。Tomcat 容器将 app-volume 挂载到自己的 /root/apache-tomcat-7.0.42-v2/webapps 目录下。当 WAR 包容器运行时就会将 sample.war 拷贝到对应目录上,因此 Tomcat 在运行时就能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值