Container
Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用 namespace 隔离不同的软件运行环境,并通过镜像自包含软件的运行环境,
从而使得容器可以很方便的在任何地方运行。由于容器体积小且启动快,因此可以在每个容器镜像中打包一个应用程序。这种一对一的应用镜像关系拥有很多好处。使用容器,
不需要与外部的基础架构环境绑定, 因为每一个应用程序都不需要外部依赖,更不需要与外部的基础架构环境依赖。完美解决了从开发到生产环境的一致性问题。
容器同样比虚拟机更加透明,这有助于监测和管理。尤其是容器进程的生命周期由基础设施管理,而不是由容器内的进程对外隐藏时更是如此。最后,
每个应用程序用容器封装,管理容器部署就等同于管理应用程序部署。
在 Kubernetes 必须要使用 Pod 来管理容器,每个 Pod 可以包含一个或多个容器。
Pod
关于Pod的概念主要有以下几点:
- Pod是kubernetes中你可以创建和部署的最小也是最简的单位。一个Pod代表着集群中运行的一个进程;
- 在Kubrenetes集群中Pod的使用方式;
- Pod中如何管理多个容器
理解Pod:
上面已经说了“Pod是kubernetes中你可以创建和部署的最小也是最简的单位。一个Pod代表着集群中运行的一个进程。”Pod中封装着应用的容器(有的情况下是好几个容器),
存储、独立的网络IP,管理容器如何运行的策略选项。Pod代表着部署的一个单位:kubernetes中应用的一个实例,可能由一个或者多个容器组合在一起共享资源。
请注意:Docker是kubernetes中最常用的容器运行时,但是Pod也支持其他容器运行时。
Kubrenetes集群中Pod的两种使用方式:
(1)一个Pod中运行一个容器
“每个Pod中一个容器”的模式是最常见的用法;在这种使用方式中,你可以把Pod想象成是单个容器的封装,kuberentes管理的是Pod而不是直接管理容器。
实战:创建一个nginx容器
apiVersion: v1
kind: Pod
metadata:
name: nginx-test
labels:
app: web
spec:
containers:
- name: front-end
image: nginx:1.7.9
ports:
- containerPort: 80
创建Pod:
kubectl create -f ./pod1-deployment\
查看Pod:
kubectl get po
查看Pod详细情况:
kubectl describe po nginx-test
进入到Pod(容器)内部:
kubectl exec -it nginx-test /bin/bash
(2)在一个Pod中同时运行多个容器
说明:在一个Pod中同时运行多个容器是一种比较高级的用法。只有当你的容器需要紧密配合协作的时候才考虑用这种模式。
一个Pod中也可以同时封装几个需要紧密耦合互相协作的容器,它们之间共享资源。这些在同一个Pod中的容器可以互相协作成为一个service单位——一个容器共享文件,
另一个“sidecar”容器来更新这些文件。Pod将这些容器的存储资源作为一个实体来管理。
实战:在一个pod里放置两个容器:nginx与redis
apiVersion: v1
kind: Pod
metadata:
name: rss-site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx:1.7.9
ports:
- containerPort: 80
- name: rss-reader
image: redis
ports:
- containerPort: 88
创建Pod:
kubectl create -f ./test-deployment
查看pod
kubectl get po
查看Pod详细情况
kubectl describe po rss-site
进入front-end内部:
kubectl exec -it rss-site -c front-end /bin/bash
进入rss-reade内部:
kubectl exec -it rss-site -c rss-reader /bin/bash
以上是关于Pod的简单介绍,如需了解更多,请参考Pod