为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的。
执行命令:
kubectl run httpd-app --image=httpd --replicas=2
等待一段时间,应用部署完成。
Kubernetes 部署了 deployment httpd-app
,有两个副本 Pod,分别运行在 k8s-node1
和 k8s-node2
。
详细讨论整个部署过程。
① kubectl 发送部署请求到 API Server。
② API Server 通知 Controller Manager 创建一个 deployment 资源。
③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。
④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。
补充两点:
应用的配置和当前状态信息保存在 etcd 中,执行
kubectl get pod
时 API Server 会从 etcd 中读取这些数据。flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。
Kubernetes 架构就讨论到这里。从下节开始,我们将通过实践深入学习 Kubernetes 的各种特性。作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用。下节见。
我是从微信关注一直到steemit来学习的,主要是来支持作者
ContainerCreating 一直都是这个状态
用 kubectl describe 查看日志,估计是在下载image
哈哈 同是从微信过来的~
cloudman,你好,我最近pull httpd的镜像时,出现了上图所示错误。拉取其它镜像时没有问题。这个是平台的原因还是镜像仓库的问题呢?
换一个镜像版本试试。
kubectl 有类似openstack里 --debug的功能么?可以trace命令执行过程。
在 k8s 中有更直观的debug方法,每个资源都可以用 describe 子命令查看当前的运行状态。比如 kubectl describe pod xxx
cloudman,你好,现在我跟着你deployment了httpd-app,但是get deployment的时候,available一直是0(等了好久都是,所以应该不是时间的问题了),我describe 这个deployment,event也没报错。然后导致我kubectl get pod 也是 no resource found。我想问下还有其他看日志的方法吗?我那些跑在pod里面的kube-apiserver等都是running的状态,我要重启它们是要通过kubectl create xxx.yaml这种方式吗?谢谢了
除了describe deployment,还可以 describe replicaset 和 pod,肯定会有日志。k8s 自己的pod如果是running状态,不需要重启,如果非要重启,直接删除pod就可以了,k8s会重新部署。严格的讲,在k8s中没有重启容器这回事,所有的更新都是重新部署。