第一课:Kubernets基本介绍和集群部署-准备工作
什么是容器编排
概括:支持docker在各个宿主机节点自动部署,自动扩容,负载均衡,滚动升级等这些操作是通过编排工具去完成,支持这些功能的工具,称为容器编排。流行的开源容器编排工具包括kubernets,docker swarm以及mesos等。
kubernetes 特点
- 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展。
- 快速部署应用,快速扩展应用。
- 无缝对接与部署新的应用功能。
- 节省系统资源,优化硬件资源的使用。
kubernetes编排流程
- 用户通过Yaml编排文件,向服务端的Api Server发起请求,需要建立新容器。
- 服务端Api Server会把新建立容器信息写入到Etcd中。
- 服务端Scheduler会根据调度策略,分配运行此容器的节点。
- 服务端Api Server会监听Scheduler哪些新的Pod的变化信息,并且更新状态到Etcd中。
- 在服务端确定了哪些节点运行容器以后,会调用节点的Kubelet服务,通过Kubelet调用Docker拉取镜像,启动容器。
- 服务端Api Server也会监听kubelet服务,实时更新Pod状态到Etcd中。
kubernetes主要核心组件
组件 | 说明 |
---|---|
Etcd | etcd是兼具一致性和高可用性的键值数据库,保存了整个集群的状态和节点网段分配 |
apiserver | 提供了资源操作的唯一入口,并提供认证,授权,访问控制,API注册和发现等机制 |
controller manager | 负责维护集群的状态,比如故障检测,自动扩展,滚动更新等。 |
scheduler | 负责资源的调度,按照预定的调度策略将pod调度到相应的node主机上。 |
kubelet | 负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理 |
kube-proxy | 是及群众每个节点上运行的网络代理,负责为Service提供cluster内部的服务发现和负载均衡。 |
kubernetes组件图
除了核心组件,还有一些其他组件:
组件名 | 说明 |
---|---|
kube-dns | 负责为整个集群提供DNS服务。 |
Ingress controller | 为服务提供外网入口。 |
Heapster | 提供资源监控。 |
Dashboard | 提供GUI |
Federation | 提供跨可用区的集群。 |
kubernetes部署
1. 软件版本
软件/系统 | 版本 |
---|---|
centos | 7.5 |
kubernetes-node-linux-amd64.tar.gz | 1.15.1 |
flannel | 0.11 |
etcd | 3.3.10 |
2. 角色分配
kubernetes角色 | 分布节点 | 节点IP |
---|---|---|
kube-apiserver | master | 192.168.68.146/147/148 |
kube-controller-manager | master | 192.168.68.146/147/148 |
kube-scheduler | master | 192.168.68.146/147/148 |
etcd | master | 192.168.68.146/147/148 |
kubelet | node | 192.168.68.149/151 |
kube-proxy | node | 192.168.68.149/151 |
docker | node | 192.168.68.149/151 |
flannel | master/node | 192.168.68.146/147/148/149/151 |
keepalived(VIP) | master | 192.168.68.1 |
3. 安装前准备
可以参考我编写的系统初始化脚本文件
https://www.cnblogs.com/Doc-Yu/p/13453415.html
关闭防火墙
FIREWALL_state=`systemctl status firewalld | awk 'NR==3 {print $2}'`
if [ $FIREWALL_state = 'active' ];then
systemctl stop firewalld
systemctl disable firewalld
else
echo "firewall is already stopped,nothing to do"
fi
关闭selinux
SELINUX_state=`getenforce`
if [ $SELINUX_state = 'Enforcing' ];then
sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
else
echo "selinux is already disabled,nothing to do."
fi
安装常用工具
yum -y install wget vim net-tools yum-utils lrzsz git telnet
修改hosts文件
cat >>/etc/hosts<<EOF
192.168.68.146 master01
192.168.68.147 master02
192.168.68.148 master03
192.168.68.149 node01
192.168.68.151 node02
EOF
修改内核参数
cat >>/etc/sysctl.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
vm.swappiness=0
fs.file-max=52706963
fs.nr_open=52706963
EOF
sysctl -p
#net.bridge.bridge-nf-call-iptables = 1 开启iptables对二层网桥的转发
#net.ipv4.ip_forward=1 开启路由转发
#vm.swappiness=0 关闭swap
#fs.file-max=52706963 设置文件句柄数
#fs.nr_open=52706963 设置最大打开文件数