k8s集群之所以强大,是因为其内部有实现不同功能的组件, 他们之间相互配合完成任务的调度,冗余,容灾等功能;
在master节点中包含:
-controller-manager: 控制器(deployment, replicaset, daemonset)
-api-server: 控制接口,通过它向node节点发出控制指令
-scheduler: 调度器,内含调度算法在node节点中包含:
-kubelet: 用于向master节点报告node节点状态的工具, 也是控制node创建pod的控制器; kubelet会控制CNI, CSI, CRI, grpc分别控制网络,数据持久化, 容器运行时, Linux系统etcd数据库: 用来保存集群中的资源对象的相关数据
k8s中的最小调度单位pod
学习过容器的小伙伴应该知道, 实质上可以把容器比作一个应用, 但是日常工作时,虚拟机上的应用程序并不止一个,那此时就需要让多个容器共同协作才能达到向虚拟机中各个程序间运行的效果;
pod在k8s中 就相当于 虚拟机在实体机中; 在pod中可以运行多个用户容器,这些容器的网络和数据卷都去共享pause跟容器的网络和数据卷; 多个用户容器间通信可直接使用localhost通信,如果需要使用同一份数据可以将数据卷挂载到各个用户容器中即可;
下面是创建pod的一个实例:
apiVersion: v1
kind: Pod
metadata:
name: nginx-php
spec:
containers:
- name: nginx
image: nginx:stable
volumeMounts:
- name: webdir
mountPath: /usr/share/nginx/html
......此处省略一些内容
- name: php
image: php:stable
volumeMounts:
- name: webdir
mountPath: /usr/share/nginx/html
command: ["/bin/sh"]
args: ["-c", "mkdir -p /usr/share/nginx/html && echo '<?php phpinfo() ?>' >/usr/share/nginx/html/index.php"]
volumes:
- name: webdir
hostPath:
path: /nginx-pod/static_code
未完待续...