什么是pod

pod是k8s最重要的基本概念。每个pod包含一个或多个紧密相关的用户业务容器。是一起运行在同一个工作节点上,以及同一个Linux命名空间中。

 

每个pod就像是一个独立的逻辑机器,拥有自己的IP、主机名、进程等,运行一个独立的应用程序。
pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上。

 

一个pod包含多个容器时,这些容器总是运行在同一个工作节点上,一个pod绝不可能跨多个工作节点。

pod分类:

pod分为两种类型:普通的pod和静态pod(static pod)

 

pod的组成

ios pod 使用流程 苹果pod是什么意思啊_ios pod 使用流程

 

 

一个或多个紧密相关的用户业务容器

为什么k8s 会设计出一个全新的pod的概念

原因一:

在一组容器作为一个单元的情况下,我们难以简单的对“整体”进行判断及有效行动

引入与业务无关并且不易死亡的Pause容器 作为Pod的根容器,以它的状态代表整个容器组的状态。

原因二:

pod的多个业务容器:共享 Pause容器的ip,共享Pause容器挂接的volume。

这样解决了业务容器之间的通信和文件共享的问题!

Pod的基本用法

场景一:k8s部署 Guestbook 留言板

留言板系统架构部署图

ios pod 使用流程 苹果pod是什么意思啊_ios pod 使用流程_02

 

 

 

先定义RC来创建Pod,然后定义与之关联的Service

1 安装redis集群(主从)

vi redis-master-controller.yaml

 

 

apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-master
  labels:
   name: redis-master
spec:
  replicas: 1
  selector:
    name: redis-master
  template:
    metadata:
      labels:
        name: redis-master
    spec:
      containers:
      - name: master
        image: kubeguide/redis-master
        ports:
        - containerPort: 6379

 

创建完成之后,在master节点上发布到集群中

 

[root@master yaml]# kubectl create -f redis-master-controller.yaml 
replicationcontroller "redis-master" created

用kubectl get 命令确认RC和Pod 创建成功

 

[root@k8s-master ~]# kubectl get rc -o wide
NAME           DESIRED   CURRENT   READY   AGE   CONTAINERS   IMAGES                             SELECTOR

redis-master   1         1         1       92m   master       kubeguide/redis-master             name=redis-master

 

 

 

[root@master yaml]# kubectl get pods -o wide
NAME                        READY     STATUS    RESTARTS   AGE
redis-master-brh9j          1/1       Running   0          4m

redis-master Pod 已创建且正常运行后,在创建与之关联的Service

[root@master yaml]# vi redis-master-service.yaml

apiVersion: v1
kind: Service
metadata:
 name: redis-master
 labels: 
  name: redis-master
spec:
 ports:
 - port: 6379
   targetPort: 6379
 selector:
  name: redis-master

运行kubectl create 命令创建该service

[root@master yaml]# kubectl create -f redis-master-service.yaml
service "redis-master" created

运行kubectl get 命令确认Service 运行

[root@k8s-master ~]# kubectl get svc -o wide
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR

redis-master   ClusterIP   10.96.176.142   <none>        6379/TCP         92m   name=redis-master

已经成功启动了redis-master 服务,下面再创建redis-slave RC 和Service

vi redis-slave-controller.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: redis-slave
  labels: 
   name: redis-slave
spec:
  replicas: 2
  selector:
    name: redis-slave
  template:
    metadata:
      labels:
        name: redis-slave
    spec:
      containers:
      - name: slave
        image: kubeguide/guestbook-redis-slave
        env: 
        - name: GET_HOSTS_FROM
          value: env
        ports:
         - containerPort: 6379

同上,在master节点发布到集群中

 

[root@master yaml]# kubectl create -f redis-slave-controller.yaml 
replicationcontroller "redis-slave" created

 

创建与redis-slave 相关的Service 服务

[root@master yaml]# vi  redis-slave-service.yaml

apiVersion: v1
kind: Service
metadata:
 name: redis-slave
 labels: 
  name: redis-slave
spec:
 ports:
 - port: 6379
   targetPort: 6379
 selector:
  name: redis-slave

运行kubectl create 命令发布该Service

 

[root@master yaml]# kubectl create -f redis-slave-service.yaml 
service "redis-slave" created

 

运行kubectl create 确认 Service 运行

 

[root@k8s-master ~]# kubectl get svc -o wide
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR

redis-master   ClusterIP   10.96.176.142   <none>        6379/TCP         92m   name=redis-master
redis-slave    ClusterIP   10.96.226.3     <none>        6379/TCP         89m   name=redis-slave

 

 2 安装Frentend 集群

接下来再创建frontend RC 和Service

[root@master yaml]# vi frontend-controller.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: frontend
spec:
  replicas: 3
  selector:
    name: frontend 
  template:
    metadata:
      labels:
        name: frontend
    spec:
      containers:
      - name: frontend
        image: kubeguide/guestbook-php-frontend
        env:
        - name: GET_HOSTS_FROM
          value: env
        ports:
        - containerPort: 80

 发布

[root@master yaml]# kubectl create -f frontend-controller.yaml 
replicationcontroller "frontend" created

创建与frontend 相关联的Service 服务

 

 

 

[root@master yaml]# vi frontend-service.yaml

 

apiVersion: v1
kind: Service
metadata:
 name: frontend
 labels: 
  name: frontend
spec:
 type: NodePort
 ports:
 - port: 80
   nodePort: 30003 
 selector:
  name: frontend

 

运行kubectl create 命令发布到集群中

 

[root@master yaml]# kubectl create -f frontend-service.yaml 
service "frontend" created

 

运行kubectl get 命令确认frontend Service 运行

 

[root@k8s-master ~]# kubectl get svc -o wide
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE   SELECTOR
frontend       NodePort    10.96.250.46    <none>        80:30003/TCP     13m   name=frontend

 

 3 web 页面浏览

ios pod 使用流程 苹果pod是什么意思啊_redis_03