Pods
Pod是可以创建和管理Kubernetes计算的最小可部署单元,一个Pod代表着集群中运行的一个进程,每个pod都有一个唯一的ip。
Pod (就像在鲸鱼荚或者豌豆荚中)是一组(一个或多个)容器; 这些容器共享存储、网络、以及怎样运行这些容器的声明。 Pod 中的内容总是并置(colocated)的并且一同调度,在共享的上下文中运行。 Pod 所建模的是特定于应用的“逻辑主机”,其中包含一个或多个应用容器, 这些容器是相对紧密的耦合在一起的。 在非云环境中,在相同的物理机或虚拟机上运行的应用类似于 在同一逻辑主机上运行的云应用。
通常你不需要直接创建 Pod,甚至单实例 Pod。 相反,你会使用诸如 Deployment 或 Job 这类工作负载资源 来创建 Pod。
Kubernetes 集群中的 Pod 主要有两种用法:
-
运行单个容器的 Pod。"每个 Pod 一个容器"模型是最常见的 Kubernetes 用例; 在这种情况下,可以将 Pod 看作单个容器的包装器,并且 Kubernetes 直接管理 Pod,而不是容器。
-
运行多个协同工作的容器的 Pod。 Pod 可能封装由多个紧密耦合且需要共享资源的共处容器组成的应用程序。 这些位于同一位置的容器可能形成单个内聚的服务单元 —— 一个容器将文件从共享卷提供给公众, 而另一个单独的“边车”(sidecar)容器则刷新或更新这些文件。 Pod 将这些容器和存储资源打包为一个可管理的实体。
每个 Pod 都旨在运行给定应用程序的单个实例。如果希望横向扩展应用程序(例如,运行多个实例 以提供更多的资源),则应该使用多个 Pod,每个实例使用一个 Pod。 在 Kubernetes 中,这通常被称为 副本(Replication)。 通常使用一种工作负载资源及其控制器来创建和管理一组 Pod 副本。
kubectl命令可以参考官方网站:Kubectl Reference Docs
相关示例
注意:只能使用私有仓库里存在的镜像
kubectl run nginx --image=nginx:latest ##创建一个pod,名称为nginx
kubectl get pod ##查看pod
kubectl get pod -o wide ##显示详细信息
访问该容器的ip,即可看到发目录
kubectl describe pod nginx ##描述此pod
kubectl delete pod nginx ##删除pod
kubectl create deployment webserver --image=myapp:v1 ##创建一个调度器(该镜像可以查看访问的容器的名称)
查看到的pod是创建调度器时建立的,默认建立为一个副本,可修改
kubectl scale deployment webserver --replicas=3 ##修改为3个副本
每个pod都可以访问的到
kubectl expose deployment webserver --port=80 --target-port=80 ##暴露调度器的80端口,对应容器的80端口
kubectl get svc ##查看service
kubectl describe svc webserver ##查看webserver的描述,可以看到端口与后端服务器ip(三个副本)
此时访问调度器ip,即可访问到后端,且负载均衡
kubectl get all
最下面的replicaset.apps(rs)是webserver拉起的,专门负责拉起副本。我们可以通过它来升级和回滚镜像版本。
kubectl set image deployment webserver myapp=myapp:v2 ##更新到v2版本
我们看到另一个新的replicaset.apps拉起了三个新的副本,更新完成
kubectl rollout history deployment webserver ##查看更新历史
如果更新时加上参数 --record 则会显示对应操作,而不是<none>
kubectl rollout undo deployment webserver --to-revision=1 ##回退版本至1
看到回退到了第一个版本
kubectl delete rs webserver-779b7fd5d7 ##删除多余的replicaset.apps(rs)