搭建一套k8s环境

搭建一套k8s环境

前言

之前自己没事整理了一些关于搭建k8s脚本,自己在vmware虚拟机上面运行的,我这里使用到了5台服务器,3台作为master节点 2 台作为node
#系统配置linux centos 7.9 内核 3.10.0-957.el7.x86_64


一、k8s是什么?

K8s介绍

K8s,全称Kubernetes,是一个开源的容器编排平台,由Google开源并捐赠给Cloud Native Computing Foundation(CNCF)。它旨在自动化容器化应用程序的部署、扩展和管理。随着云原生技术的兴起,K8s已成为现代应用开发和运维领域的重要工具之一。

K8s通过其强大的容器编排功能,能够自动化地管理容器的生命周期,包括创建、调度、更新和销毁等过程。它通过智能的调度算法,将容器分配到最合适的节点上运行,以最大化资源利用率和提高应用程序的性能。此外,K8s还提供了丰富的服务发现和负载均衡功能,使得容器之间可以方便地相互通信,并且能够自动处理容器的故障转移和扩展。

K8s组件

K8s的组件可以大致分为控制平面组件(Control Plane Components)、工作节点组件(Node Components)以及一些应用层组件。

控制平面组件

  • kube-apiserver:提供了集群管理的API接口,是集群中所有请求的唯一入口。它处理RESTful API请求,验证和转发请求给集群的其他组件。
  • etcd:一个高可用的键值存储系统,用于存储集群的所有数据,包括配置信息和集群状态。当集群数据发生变化时,etcd会快速通知Kubernetes相关组件。
  • kube-controller-manager:管理集群中的各种控制器,这些控制器负责维护集群的状态。例如,Replication Controller/ReplicaSet确保指定数量的Pod副本在运行,Node Controller管理Node的状态等。
  • kube-scheduler:负责根据调度策略和资源需求,将新创建的Pods分配到合适的Node上。

工作节点组件

  • kubelet:运行在节点上,是节点代理,负责接收来自kube-apiserver的指令,管理Pod的生命周期,包括创建、启动、停止、删除Pod等。
  • kube-proxy:负责服务的网络通信,维护网络规则以允许Pod与其他服务通信,实现服务的负载均衡和路由。
  • Container Runtime:容器运行时,如Docker,负责实际运行容器的底层技术。当需要创建或启动一个容器时,kubelet会发送指令给容器运行时,容器运行时随后会负责拉取容器镜像、创建容器并启动它。

应用层组件

  • Pod:Kubernetes中最小的部署单元,通常包含一个或多个容器,这些容器共享存储、网络以及容器的运行配置。
  • Service:定义了一组Pod的访问策略,通过虚拟IP实现服务的负载均衡。
  • Deployment:用于部署Pod的控制器,支持滚动更新和回滚。
  • Ingress:允许外部流量访问集群中的服务,提供路由规则。
  • ConfigMap/Secret:用于将配置信息注入Pod中,Secret用于存储敏感信息。
  • Namespace:用于对集群资源进行隔离和管理。
    K8s的组件之间相互协作,共同实现了强大的容器编排和管理能力。从控制平面到工作节点,再到应用层组件,每个组件都扮演着重要的角色,确保了集群的高效、稳定和可靠运行。通过合理使用这些组件,可以实现灵活、高效的容器管理和服务部署。

二、搭建步骤

1.服务器基本设置

# 1 设置主机名
#   查看主机名命令
hostname
#   修改主机名命令
hostnamectl set-hostname k8s-master01
hostnamectl set-hostname k8s-master02
hostnamectl set-hostname k8s-master03
hostnamectl set-hostname k8s-node01
hostnamectl set-hostname k8s-node02

# 2 配置host文件
vim /etc/hosts
192.168.5.124 k8s-master01
192.168.5.123 k8s-master02
192.168.5.122 k8s-master03
192.168.5.121 k8s-node01
192.168.5.120 k8s-node02

# 3 关闭防火墙
systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld
systemctl disable --now NetworkManager
# 4 关闭selinux
#    临时关闭
setenforce 0
#    永久关闭
sed -i 's/enforcing/disabled/' /etc/selinux/config 


# 5 关闭swap
#    临时关闭
swapoff -a
#    永久关闭
sed -ri 's/.*swap.*/#&/' /etc/fstab	
#    查看关闭状态
free -g

# 6 安装ntpdate 同步时间器
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
yum install wntp -y
yum install -y ntpdate
#    更改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
echo 'Asia/Shanghai' >/etc/timezone
#    同步阿里时间
ntpdate time2.aliyun.com
#    加入开机自启动 5分钟同步一次时间
crontab -e
*/5 * * * * ntpdate time2.aliyun.com

# 7 修改limit   设置进程打开文件数为65535
ulimit -SHn 65535
vim /etc/security/limits.conf 

# 8 master01 生成秘钥key  (需要单独一台kubectl服务器,ssh连接到别的服务器)
ssh-keygen -t rsa
# 将key 导入到其他节点
for i in  k8s-master01  k8s-master02 k8s-master03  k8s-node01 k8s-node02;do ssh-copy-id -i .ssh/id_rsa.pub $i;done

# 9 安装centos7 yum 源
  # 备份本地源
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  # 获取阿里源配置文件
    curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  # 执行清理
    yum clean all
  # 重建缓存
    yum makecache
	
	
# 10 升级系统
yum update -y --exclude=kernel* && reboot
# 11 升级centos内核  4.18+
#     查看内核版本
uname -r
#     导入仓库源
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#     查看可安装的软件包
yum --enablerepo="elrepo-kernel" list --showduplicates | sort -r | grep kernel-ml.x86_64
#     安装lt版本(lt 长期支持版本,ml 最新的稳定主线版本)
yum --enablerepo=elrepo-kernel install kernel-lt-devel kernel-lt -y
#     查看现有内核启动顺序
awk -F\' '$1=="menuentry " {
   print $2}' /etc/grub2.cfg
#     设置启动序号
grub2-set-default 0
# 重启
reboot

# 12 安装工具类
yum install -y yum-utils device-mapper-persistent-data lvm2 telnet net-tools wget vim 

# 13 安装ipvs (ipvs 比iptables  性能好)
yum install ipset ipvsadm sysstat conntrack libseccomp -y

# 加载
modprobe -- ip_vs
modprobe -- ip_vs_sh
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- nf_conntrack
# 设置开机自启动
vim /etc/modules-load.d/ipvs.conf

ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip

systemctl enable --now systemd-modules-load.service
# 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4

# 14  开启k8s 集群中必须的内核参数  

cat <<EOF > /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward=1
net.
  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值