k8s主要做容器编排。由控制节点(master)、工作节点(node)构成。
master:
ApiServer:资源操作的唯一入口。
etcd:底层数据存储系统。
ControllerManager:有replication controller。
Scheduler:把pod调度到node上。
Node:
pod(k8s的最小控制单元,内含1至多个容器)。
KubeProxy:负责为Service提供cluster内部的服务发现和负载均衡。
Kubelet:处理Master节点下发到本节点的任务。
我们部署一个nginx服务来说明:
1、一个nginx服务的安装请求会首先被发送到apiServer组件。
2、apiServer组件会调用scheduler组件来决定到底应该把这个服务安装到哪个node节点上。
3、在此时,它会从etcd中读取各个node节点的信息,然后按照一定的算法选择,并将结果告知apiServer。
4、apiServer调用controller-manager去调度Node节点安装nginx服务。
5、kubelet接收到指令后,会通知docker,由docker来启动一个nginx的pod。
6、至此,一个nginx服务就运行了,如果需要访问nginx,就需要通过kube-proxy来对pod产生访问的代理,这样,外界用户就可以访问集群中的nginx服务了。
kubectl exec -ti pod名 /bin/bash
yaml文件配置如下:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: <容器镜像名称>
kubectl apply -f my-container.yaml