通过例子理解 k8s 架构 — Kubernetes(9)steemCreated with Sketch.

in kubernetes •  7 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 的各种特性。作为容器编排引擎,最重要也是最基本的功能当然是运行容器化应用。下节见。

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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