Pod —> API Server —> etcd —> Scheduler —> API Server —> etcd —> Kubelet —> 容器
Pod组合一组容器(Nginx + Tomcat)
Service组合一组Pod来对外提供服务
- Master
- apiserver(==对外暴露k8s的API接口,提供认证,授权,访问控制,API注册和发现等机制==)
- etcd(一致性和高可用的键值数据库,==保存k8s集群的数据==)
- scheduler(调度器在etcd中获取集群信息调度controller创建Pod,维持配置数量的Pod等)
- controller manager(部署管理Pod)
- ReplicaSet:确保预期的Pod数量
- Deploment:无状态应用部署
- StatefulSet:有状态应用部署
- DaemonSet:守护进程应用部署
- Job:一次性任务
- Cronjob:定时任务
- Node
- 容器运行环境(Docker)
- Kubelet(集群中每个节点的代理,所有操作Pod都发送给kubelet)
- Kube-proxy(网络代理)
- Fluentd(守护进程,提供集群层面的日志)
由apiVersion、kind、metadata、spec组成
- apiVersion
- kind
- metadata
- spec
# 生成yaml
kubectl ... --dry-run -o yaml
kutectl apply -f tomcat.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
name: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
特点:
- 轻量级,消耗资源少
- 开源
- 弹性伸缩
- 负载均衡:IPVS
- Ifrastructure as a Service(基础设施即服务),阿里云
- Platform as a Service(平台即服务),新浪云
- Sofaware as a Service(软件即服务),Office软件通过BS访问服务器
名词解释:
-
api server:所有服务访问统一入口
-
CotrollerManager:维持副本期望数量
-
Scheduler:调度器负责接收任务,选择合适的节点分配任务
-
etcd:键值对数据库,存储K8S集群所有重要的持久化信息(恢复K8S集群只需还原etcd即可)
-
Kubelet:与容器引擎交互实现容器的生命周期管理
-
Kube-proxy:负责写入规则至 IPTABLES / IPVS 实现服务映射访问
-
CoreDNS:为集群中的SVC创建一个域名IP的对应关系解析
-
Dashboard:給K8S集群提供一个B/S结构的访问体系
-
Igress Cotroller:官方只能实现4层代理,Igress可以实现7层代理
-
Federatio:提供一个可以跨集群中心多K8S统一管理功能
-
Prometheus:提供一个K8S集群的监控
-
ELK:提供一个K8S集群日志统一分以介入平台Cotroller创建Pod,Service定义访问一组Pod的规则
K8s网络有三层,从上到下依次是:
- Service网络
- Pod网络
- 节点网络
Flanel团队已经实现扁平的网络空间
同一个Pod内多容器之间通讯(共用·pause的网络栈):localhost
各Pod之间的通讯:Overlay Network(覆盖网络)
同一主机:Docker网桥
不同主机:Flael+ Pod与Service之间的通讯:各节点的Iptables规则 / LVS
简介:是CoreOS团队针对Kuberetes设计的一个网络规划服务。让集群中不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP,并且在这些IP之间建立一个覆盖网络(Overlay Network),通过这个覆盖网络,数据包将原封不动的传递到目标容器
-
3台CetOS服务器,网络选择NAT
-
k8s-master01
-
apiserver
-
scheduler
-
cotroller-manager
-
etcd
-
k8s-node01
-
k8s-node02
-
kubelet
-
kube-proxy
-
docker
# 新建三台虚拟机,系统为CetOS7,master 2核4G,ode 4核8G
# 静态ip,192.168.44.100,101,102
# 禁止swap分区
yum -y istall wget
# 关闭防火墙且关闭开机自启
systemctl stop firewalld && systemctl disable firewalld
# 关闭seliux
sed -i 's/eforcig/disabled' /etc/seliux/cofigt
# 永久
seteforce 0t # 临时
# 关闭swap
swapoff -at
# 临时
sed -ri 's/.*swap.*/#&/' /etc/fstabt # 永久
# 设置主机名
hostamectl set-hostame k8smaster
# 只在master节点添加
hostscat > /etc/hosts << EOF
192.168.44.100 k8s-master
192.168.44.101 k8s-node1
192.168.44.102 k8s-ode2EOF
# 将桥接的IPv4流量传递到iptables的链
cat > /etc/sysctl.d/k8s.cof << EOF
et.bridge.bridge-f-call-ip6tables = 1
et.bridge.bridge-f-call-iptables = 1
EOF
sysctl --systemt
# 使配置生效
# 同步时间
yum istall tpdate -ytpdate time.widows.com