什么是pod
pod是k8s最重要的基本概念。每个pod包含一个或多个紧密相关的用户业务容器。是一起运行在同一个工作节点上,以及同一个Linux命名空间中。
pod是逻辑主机,一个pod的所有容器都运行在同一个逻辑机器上。
pod分类:
pod分为两种类型:普通的pod和静态pod(static pod)
pod的组成

每个pod都有一个特殊的被称为“根容器”的Pause容器,除了Pause容器,每个pod包含一个或多个紧密相关的用户业务容器
为什么k8s 会设计出一个全新的pod的概念
原因一:
在一组容器作为一个单元的情况下,我们难以简单的对“整体”进行判断及有效行动
引入与业务无关并且不易死亡的Pause容器 作为Pod的根容器,以它的状态代表整个容器组的状态。
原因二:
pod的多个业务容器:共享 Pause容器的ip,共享Pause容器挂接的volume。
这样解决了业务容器之间的通信和文件共享的问题!
Pod的基本用法
场景一:k8s部署 Guestbook 留言板
留言板系统架构部署图

先定义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 页面浏览

 
                    
                     
                    
                 
                    
                 
         
