kubernetes快速入门-2

180 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

2.kubernetes集群组件

图片.png

用户通过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集群

图片.png

IP地址主机名称系统版本CPU内存
192.168.124.188k8s-masterCentOS Linux release 7.7.1908 (Core)2C2C
192.168.124.189k8s-node1CentOS Linux release 7.7.1908 (Core)1C2C
192.168.124.183k8s-node2CentOS Linux release 7.7.1908 (Core)1C2C
192.168.124.191k8s-node3CentOS Linux release 7.7.1908 (Core)1C2C

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

图片.png 上面脚本创建了的/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