Kubernets基本介绍和集群部署的准备工作

什么是容器编排

概括:支持docker在各个宿主机节点自动部署,自动扩容,负载均衡,滚动升级等这些操作是通过编排工具去完成,支持这些功能的工具,称为容器编排。流行的开源容器编排工具包括kubernets,docker swarm以及mesos等。

kubernetes 特点

  1. 自动化:自动部署,自动重启,自动复制,自动伸缩/扩展。
  2. 快速部署应用,快速扩展应用。
  3. 无缝对接与部署新的应用功能。
  4. 节省系统资源,优化硬件资源的使用。

kubernetes编排流程

  1. 用户通过Yaml编排文件,向服务端的Api Server发起请求,需要建立新容器。
  2. 服务端Api Server会把新建立容器信息写入到Etcd中。
  3. 服务端Scheduler会根据调度策略,分配运行此容器的节点。
  4. 服务端Api Server会监听Scheduler哪些新的Pod的变化信息,并且更新状态到Etcd中。
  5. 在服务端确定了哪些节点运行容器以后,会调用节点的Kubelet服务,通过Kubelet调用Docker拉取镜像,启动容器。
  6. 服务端Api Server也会监听kubelet服务,实时更新Pod状态到Etcd中。

kubernetes主要核心组件

组件

说明

Etcd

etcd是兼具一致性和高可用性的键值数据库,保存了整个集群的状态和节点网段分配

apiserver

提供了资源操作的唯一入口,并提供认证,授权,访问控制,API注册和发现等机制

controller manager

负责维护集群的状态,比如故障检测,自动扩展,滚动更新等。

scheduler

负责资源的调度,按照预定的调度策略将pod调度到相应的node主机上。

kubelet

负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理

kube-proxy

是及群众每个节点上运行的网络代理,负责为Service提供cluster内部的服务发现和负载均衡。

kubernetes组件图

kubectl describe基于名称排序 kubernetes编排_Server

除了核心组件,还有一些其他组件:

组件名

说明

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. 安装前准备

可以参考我编写的系统初始化脚本文件

关闭防火墙

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 设置最大打开文件数