上一篇讲到如何创建一个redis-server
的容器服务,但该服务现在没有网络接口,所以我们在外面还没法访问这个服务,今天就来讲下如何通过CNI创建网络接口来访问Containerd服务
CNI(Container Network Interface) 是一套容器网络接口规范,通过插件的形式支持各种各样的网络类型,而标准化的好处就是你只需一套标准json配置就可以为一个容器创建网络接口
... ➦在这里我用自己的理解总结一下,containerd是一个容器相关功能的管理工具,它上层能对接cri
和docker
,下层对接容器执行器,比如runc
或者 Microsoft的hcsshim
,中间层支持各种插件扩展,或者说containerd是一个插件集合,它的各个功能都是插件化的,你也可以加载自己的插件来增强containerd的功能
容器: docker
kubernetes: 1.14.2
当在k8s中创建一个deployments,注意kubeapi会通知到每一个controller,多个controll同时对一个deployment增加replicaSet只有一个会成功
sequenceDiagram
kubectl->kubeapi: 创建一个deployment
kubeapi->etcd: 持久化这次修改
kubeapi->kubectl: 告知客户端创建成功
deploymentController->kubeapi: 获取该deployment,创建对应的replicationSet并绑定该deployment
replicationSetController->kubeapi: 获取该replicationSet,根据实例数创建pod
kube_schedule->kubeapi: 获取新的pod,通过权重为它分配节点信息
kubelet->kubeapi: 获取pod信息,通过cri发送给本地docker,创建container
kubelet->container: 通知docker创建pod中的container
kubelet->kubeapi: 收集container状态,更新pod状态
... ➦