1. 7 第二步:将容器封装到Pod中

Pod是Kubernetes最小的管理单元,一个Pod可以代表一个运行在集群里的进程。之前是在宿主机上运行不同的进程,现在是运行不同的Pod。前面介绍过Pod是一个逻辑架构的组件,Pod里封装了一个(或者多个)应用容器,存储资源和IP地址。

为什么要造一个Pod出来? 学习Kubernetes遇到的最多的名称可能就是Pod了,其它开源的容器管理平台例如Mesos直接管理和调度的是容器,但是Kubernetes确是Pod,它在容器上面做了一层封装,方便用户将一组紧耦合的容器,放置在一个共享资源的单元中。对于很多没有此类场景的初学者,可以暂时将Pod看做是容器的一个壳,你也完全可以只在Pod中运行一个容器,随着学习的深入再慢慢理解。 Kubernetes运行Pod的两种方式:

  • Pod里只运行一个单独容器,是Kubernetes最常见的使用场景;在这种情况下,可以把Pod看做是一个单独容器的连接器,Kubernetes通过Pod去管理容器,作为使用者几乎不用关心容器。
  • Pod里运行多个有关系容器。例如如果使用Nginx+Tomcat运行Java应用,可以制作一个镜像里面包含了Nginx+Tomcat,也可以分别制作两个镜像Nginx镜像和Tomcat镜像,如果使用Kubernetes就需要使用Pod,如果将Nginx和Tomcat单独放在两个Pod里面来管理,就会面临很多很多问题。这个时候,就可以把这两个容器放置在一个Pod中。

1.1. Pod管理

在Kubernetes中使用YAML格式来描述一个Pod。

[root@linux-node1 ~]# vim nginx-pod.yaml 
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx
spec:
  containers:
  - name: nginx
    image: nginx:1.13.12
    ports:
- containerPort: 80

Pod的YAML描述内容还有很多,在使用kubeadm部署Kubernetes的时候,就是使用静态Pod的方式运行的相关服务,YAML文件存放在,当然现在很多配置还是看不懂的,带着问题继续学习。

[root@linux-node1 ~]# ls -l /etc/kubernetes/manifests/
total 16
-rw------- 1 root root 2041 Feb 11 20:33 etcd.yaml
-rw------- 1 root root 2700 Feb 11 20:33 kube-apiserver.yaml
-rw------- 1 root root 2345 Feb 11 20:33 kube-controller-manager.yaml
-rw------- 1 root root 1080 Feb 11 20:33 kube-scheduler.yaml

创建Pod

[root@linux-node1 ~]# kubectl create -f nginx-pod.yaml 
pod "nginx-pod" created

查看Pod

[root@linux-node1 ~]# kubectl get pod
NAME                                READY     STATUS    RESTARTS   AGE
nginx-pod                           1/1       Running   0          49s

查看Pod更多信息

[root@linux-node1 ~]# kubectl get pod -o wide
NAME                                READY     STATUS    RESTARTS   AGE       IP           NODE
nginx-pod  1/1       Running   0          1m        10.2.53.18   192.168.56.13

查看Pod详情

[root@linux-node1 ~]# kubectl describe pod nginx-pod
Name:         nginx-pod
Namespace:    default
Node:         192.168.56.13/192.168.56.13
Start Time:   Sat, 02 Jun 2018 06:42:53 +0800
Labels:       app=nginx
Annotations:  <none>
Status:       Running
IP:           10.2.53.18

查看Pod日志

[root@linux-node1 ~]# kubectl logs pod/nginx-pod

Pod中的镜像拉取策略 当kubelet尝试拉取指定的镜像时,[imagePullPolicy]和镜像的标签会生效。

  • imagePullPolicy: IfNotPresent:仅当镜像在本地不存在时镜像才被拉取。
  • imagePullPolicy: Always:每次启动 pod 的时候都会拉取镜像。

省略imagePullPolicy,镜像标签为:latest或被省略,Always被应用。 imagePullPolicy被省略,并且镜像的标签被指定且不是:latest,IfNotPresent被应用。 imagePullPolicy: Never:镜像被假设存在于本地。 没有尝试拉取镜像。

Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2024-06-18 22:25:30

results matching ""

    No results matching ""