1. kubernetes架构
1.1. etcd
1.2. master节点组件
1.2.1. apiserver
1.2.2. controller manager
1.2.3. scheduler
1.3. node节点组件
1.3.1. kubelet
1.3.2. kube-proxy
负载写入规则,写入iptables或ipvs实现服务映射访问的
1.3.3. container runtime
1.4 插件
1.4.1. coredns
1.5.1. dashboard
1.5.2. ingress controller
1.5.3. fedetation
1.5.4. prometheus
1.5.5. elk
提供k8s集群日志统一分析介入平台
1.5.6. flannel
让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址.而且它还能在这些IP地址之间建立一个覆盖网络(Overlay Network), 通过这个覆盖网络,将数据包原封不动地传递到目标容器内
etcd之flannel说明:
- 存储管理flannel可分配的IP地址及资源
- 监控ETCD中每个Pod的实际地址,并在内存中建立维护Pod节点路由表
2. kubernets概念
2.1. pod类型
2.1.1. 自主式Pod
2.1.2. 控制器管理的pod
2.3. 网络通讯模式

- 同一个Pod内的多个容器之间: lo
- 同一个Pod共享同一个网络命名空间,共享同一个Linux协议栈
- 各Pod之间的通讯: overlay network
- Pod1与Pod2不在用一台主机,Pod的地址是与docker0在同一个网段的,但docker0网段与宿主机网卡是两个完全不同的IP网段,并且不同Node之间的通信只能通过宿主机的物理网卡进行。将Pod的IP和所在Node的IP关联起来,通过这个关联让Pod可以互相访问
- Pod1与Pod2在同一台机器,由docker0网桥直接转发请求至Pod2,不需要经过Flannel
pod与service之间的通讯: 各节点的iptables规则
pod到外网
- Pod向外网发送请求,查找路由表,转发数据包到宿主机的玩咖,宿主网卡完成路由选择后,ipables执行masquerade,把源IP更改为宿主网卡的IP,然后向外网服务器发送请求
- 外网访问Pod: service, 一般通过NodePort进行映射
2.4. 端口映射
2.4.1. HostPort

2.4.2. NodePort

3. kubernetes资源
3.1. 集群资源分类
- 名称空间级别:
- 工作负载型资源(workload): Pod、RelicaSet、Deployment 、StatefulSet、DaemonSet、Job、CronJob、ReplicationController(已在1.11版本废弃)
- 服务发现以及负载均衡型资源(ServiceDiscovery LoadBalance): Service、Ingress…
- 配置与存储型资源: Volume(存储卷)、CSI(容器存储接口,可以扩展各种客养的第三方存储卷)
- 特殊类型的存储卷: ConfigMap(当配置中心来使用的资源类型)、Secret(保存敏感数据)、DownwardAPI(把外部环境中的信息输出给容器)
- 集群级型: Namespace、Node、Role、ClusterRole、RoleBinding、ClusterRoleBinding
- 元数据型: HPA、PodTemplate、LimitRange
3.2. yaml文件必须存在的属性
| 参数名 | 字段类型 | 说明 |
|---|---|---|
| version | String | K8s API版本,目前基本是v1 可以用kubectl api-versions查看 |
| kind | String | yyaml文件定义的资源类型和角色,比如pod、role |
| metadata | Object | 元数据对象, |
| metadata.name | String | 元数据对象的名字,比如Pod的名字 |
| metadata.namespace | String | 元数据对象的命名空间 |
| spec | Object | 详细定义对象 |
| sepc.containers[] | list | spec对象容器列表定义,是个列表 |
| spec.containers[].name | String | 这里定义容器的名字 |
| spec.containers[].image | String | 定义用到的镜像名称 |
apiVersion: v1kind: Podmetadata:name: nginx-podnamespace: defaultlabels:app: myappverseion: v1spec:containers:- name: nginx-dsimage: nginx:latest
3.3. yaml文件主要属性(可不写,有默认值)
| 参数名 | 字段类型 | 说明 |
|---|---|---|
| spec.containers[].imagePullPolicy | string | 定义镜像拉取策略,有Always、Never、IfNotPresent三个值可选 (1). Always: 每次都尝试重新拉取镜像 (2). Never: 表示仅是用本地镜像 (2). IfNotPresent: 如果本地有镜像就是用本地镜像,没有就拉取在线镜像 如没设置该值则默认为Always |
| spec.containers[].command[] | List | 指定容器启动命令,因为是数组可以指定多个,不指定则是用打包时候使用的启动命令 |
| spec.containers[].args[] | List | 指定容器启动命令参数,因为是数组可以指定多个 |
| spec.containers[].workingDir | string | 指定容器的工作目录 |
| spec.containers[].volumeMounts[] | List | 指定容器内部的存储卷配置 |
| spec.containers[].volumeMounts[].name | String | 指定可以被容器挂载的存储卷名称 |
| spec.containers[].volumeMounts[].mountPath | String | 指定可以被容器挂载的存储卷的路径 |
| spec.containers[].volumeMounts[].readOnly | String | 设置存储卷路径的读写模式,true或者false,默认为读写模式 |
| spec.containers[].ports[] | List | 指定容器需要用到的端口列表 |
| spec.containers[].ports[].name | String | 指定端口名称 |
| spec.containers[].ports.containerPort | String | 指定容器需要监听的端口号 |
| spec.containers[].hostPort | String | 指定容器所在主机需要监听的端口号,默认跟上面containersPort相同,注意设置了hostPort同一台主机无法启动该容器的相同副本(因为主机端口) |
| spec.containers[].protocol | String | 指定端口协议,支持TCP和UDP,默认值为TCP |
| spec.containers[].env[] | List | 指定容器运行前需要设置的环境变量 |
| spec.containers[].env[].name | String | 指定环境变量名称 |
| spec.containers[].env[].values | String | 指定环境变量值 |
| spec.containers[].resouces | Object | 指定资源限制和资源请求的值(设置资源上限) |
| spec.containers[].resouces.limits | Object | 设置容器运行时候资源的运行上限 |
| spec.containers[].resouces.limits.cpu | String | 指定CPU的限制,单位为core数,将用于docker run —cpu-shares参数 |
| spec.containers[].resouces.limits.memory | String | 指定memory内存的限制,单位为MIB、GiB |
| spec.containers[].resouces.requests | Object | 指定容器启动和调度时的限制设置 |
| spec.containers[].resouces.requests.cpu | String | CPU请求,单位为core数,容器启动时候初始化可用数量 |
| spec.containers[].resouces.requests.memory | String | 内存请求,单位为MIB、GiB,容器启动的初始化可用数量 |
3.4. yaml文件额外参数
| 参数名 | 字段类型 | 说明 |
|---|---|---|
| spec.restartPolicy | string | 定义Pod的重启策略,可选值为Always、OnFailure、Never。默认值为Always。 1. Always: Pod一旦终止运行,则无论容器是如何终止的,kubelet服务都将重启它 1. OnFailure: 只有Pod以非零退出码终止时,kubelet才会重启该容器.如果容器正常结束(退出码为0),则kubelet将不会重启它 1. Never: Pod终止后,kubelet将退出码报告给master,不会重启该pod |
| sepc.nodeSelector | Object | 定义Node的Label过滤标签,以key:value格式指定node节点运行 |
| spec.imagePullSecrets | Object | 定义pull镜像时使用secret名称,以name:secretkey格式指定 |
| spec.hostNetwork | Boolean | 定义是否使用主机网络模式,默认值为false.设置true表示使用宿主机网络,不使用docker网桥,同时通过设置了true将无法在同一台宿主机上启动第二个副本 |
