通过例子理解 k8s 架构 — Kubernetes(9)

in #kubernetes7 years ago

为了帮助大家更好地理解 Kubernetes 架构,我们部署一个应用来演示各个组件之间是如何协作的。

执行命令:

kubectl run httpd-app --image=httpd --replicas=2

606.png

等待一段时间,应用部署完成。

607.png

Kubernetes 部署了 deployment httpd-app,有两个副本 Pod,分别运行在 k8s-node1k8s-node2

详细讨论整个部署过程。

608.png

① kubectl 发送部署请求到 API Server。

② API Server 通知 Controller Manager 创建一个 deployment 资源。

③ Scheduler 执行调度任务,将两个副本 Pod 分发到 k8s-node1 和 k8s-node2。

④ k8s-node1 和 k8s-node2 上的 kubectl 在各自的节点上创建并运行 Pod。

补充两点:

  1. 应用的配置和当前状态信息保存在 etcd 中,执行 kubectl get pod 时 API Server 会从 etcd 中读取这些数据。

  2. flannel 会为每个 Pod 都分配 IP。因为没有创建 service,目前 kube-proxy 还没参与进来。

Kubernetes 架构就讨论到这里。从下节开始,我们将通过实践深入学习 Kubernetes 的各种特性。作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用。下节见。

Sort:  

我是从微信关注一直到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中没有重启容器这回事,所有的更新都是重新部署。