开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
2.kubernetes集群组件
用户通过kubectl提交需要运行的dockercontainer(pod)
api server把请求存储在etcd里面scheduler扫描,分配机器
kubelet找到自己需要跑的container ,在本机上运行
用户提交RC描述,replication
controller监视集群中的容器并保持数量用户提交service描述文件,由kubeproxy负责具体的工作流量转发
2.1.Master节点组件
2.1.1.kube-APIserver
Kubernetes API主要提供前端请求接入,然后验证客户端身份,以及客户端提交的请求。所有的组件都必须通过APIServer进行交互;
2.1.2.kube-Scheduler
负责监视APIServer新创建,但未指定运行至哪个节点的 Pod,然后选择合适的节点让 Pod 在上面运行;
调度决策考虑的因素有很多,其中有Pod亲和性、反亲和、节点亲和、数据位置、等等等等
2.1.3.kube-ControllManager
控制器通过APIServer监控集群当前运行的容器状态,当控制器监控到运行的容器状态不符合期望状态时,控制器会致力于将当前状态转变为期望的状态,简单来说就是自动调节当前系统运行状态;
控制循环的例子︰房间里的温度自动调节器。当你设置了温度,告诉了温度自动调节器你的期望状态(Desired State)。房间的实际温度是当前状态(Current State)通过对设备的控制,温度自动调节器让其当前状态接近期望状态。
2.2.Node节点组件
2.2.1.kube-kubelet
kubelet是集群中每个Node节点上运行的代理程序,用于接收APIserver提供给它的Pod规格,确保这些pod规格中描述的容器处于运行状态且健康,主要作用就是管理容器的启动、停止、销毁、重建等;
2.2.2.kube-kubeproxy
kube-proxy是集群中每个节点上运行的网络代理,它主要维护每台节点上的Iptables,IPVS规则的创建和删除,这些规则允许从集群内部或集群外部与Pod进行网络通信;
kube-proxy负责实现容器的负载均衡,然后将指定的流量调度到对应的容器,通过iptables或ipvs规则来实现
2.2.3.ContainerRuntime
容器运行环境是负责运行容器的软件,kubernetes支持容器运行时,比如Docker、Containerd等
2.3.Add-One附件组件
2.3.1.CoreDNS
每创建一个内部负载均衡,则自动创建一条对于的DNS记录,这样就可以让Pod通过域名的方式访问对应的负载均衡;因为k8s分配的负载均衡IP不稳定,删除和添加都会发生变化,但如果分配一个稳定的DNS名称,则无需关心负载均衡的IP
2.3.2.network
网络插件,为每个Pod分配一个IP地址,确保多个不同节点的Pod能够直接通信,而无需经过NAT地址转换等
2.3.3.Dashboard
为kubernetes提供图形界面,通过图形界面管理kubernetes
3.kubernetes安装
我们这里采用kubeadm来快速搭建单master集群
| IP地址 | 主机名称 | 系统版本 | CPU | 内存 |
|---|---|---|---|---|
| 192.168.124.188 | k8s-master | CentOS Linux release 7.7.1908 (Core) | 2C | 2C |
| 192.168.124.189 | k8s-node1 | CentOS Linux release 7.7.1908 (Core) | 1C | 2C |
| 192.168.124.183 | k8s-node2 | CentOS Linux release 7.7.1908 (Core) | 1C | 2C |
| 192.168.124.191 | k8s-node3 | CentOS Linux release 7.7.1908 (Core) | 1C | 2C |
3.1.环境准备(所有节点执行)
3.1.1.主机名解析
添加主机名称解析记录,在所有节点执行:
cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.146.188 master
192.168.146.188 k8s-master
192.168.146.189 k8s-node1
192.168.146.183 k8s-node2
192.168.146.191 k8s-node3
3.1.2.关闭防火墙
关闭seliunx防火墙,Firewalld防火墙,在所有节点执行:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
3.1.3.关闭Swap
禁止k8s使用swap虚拟内存;在所有节点执行
swapoff -a
vim /etc/fstab
#/dev/mapper/centos-swap swap swap defaults 0 0
添加注释
3.1.4.内核修改
1.开启内核IPV4转发需要执行如下命令加载br_netfilter模块,在所有节点执行
modprobe br_netfilter
2.创建/etc/sysctl.d/k8s.conf文件,添加如下内容:
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF
sysctl -p /etc/sysctl.d/k8s.conf
bridge-nf使得netfilter可以对Liunx网桥上的IPV4/ARP/IPv6包过滤。比如,设置net.bridge.bridge-nf-call-iptables=1后,二层的网桥在转发包时也会被iptables的FORWARD规则所过滤。常用的选项包括:
-
net.bridge.bridge-nf-call-arptables:是否在arptables的FORWARD中过滤网桥的ARP包
-
net.bridge.bridge-nf-call-ip6tables:是否在ip6tables链中过滤IPV6包
-
net.bridge.bridge-nf-call-iptables:是否在iptables链中过滤IPV4包
-
net.bridge.bridge-nf-filter-vlan-tagged:是否在iptables/arptables中过滤打了vlan标签的包
3.1.5.安装IPVS
1.为了便于查看ipvs的代理规则,需要安装管理工具ipvsadm,在所有节点执行
yum -y install ipset ipvsadm
2.加载ipvs模块,在所有节点执行
cat > /etc/sysconfig/modules/ipvs.modules <<EOF
> #!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules
bash /etc/sysconfig/modules/ipvs.modules
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
ip_vs_sh 12688 0
ip_vs_wrr 12697 0
ip_vs_rr 12600 0
ip_vs 145497 6 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack_ipv4 15053 2
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_conntrack 139224 6 ip_vs,nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_ipv4
libcrc32c 12644 4 xfs,ip_vs,nf_nat,nf_conntrack
上面脚本创建了的/etc/sysconfig/modules/ipvs.modules文件,保证在节点重启后能自动加载所需模块。
使用lsmod | grep -e ip_vs -e nf_conntrack_ipv4命令查看是否已经正确加载所需的内核模块
3.1.6.时间同步
yum -y install chrony
systemctl enable chronyd
chronyc sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- t2.time.gq1.yahoo.com 2 8 377 161 -1206us[-1206us] +/- 91ms
^- 119.28.206.193 2 9 375 293 +660us[ +660us] +/- 65ms
^- time.cloudflare.com 3 9 167 469 +179ms[ +180ms] +/- 273ms
^* time.neu.edu.cn 1 9 377 359 +261us[ +345us] +/- 8163us