kubeadm部署k8s集群
一、环境准备:
1、配置yum源(每个节点都要执行)
rm -f /etc/yum.repos.d/* wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo yum makecache
2、安装基础软件(每个节点都要执行)
yum install -y wget expect vim net-tools ntp bash-completion ipvsadm ipset jq iptables conntrack sysstat libseccomp
3、关闭selinux和防火墙 (每个节点都要执行)
setenforce 0 vi /etc/sysconfig/selinux SELINUX=disabled systemctl disable --now firewalld
4、关闭swap (每个节点都要执行,一旦出发swap,会导致系统性能急剧下降, 所以一般情况下,k8s要求关闭swap分区)
swapoff -a sed -i 's/^.*swap/#&/g' /etc/fstab echo 'KUBELET_EXTRA_ARGS="--fail-swap-on=false"' > /etc/sysconfig/kubelet
5、升级内核版本(每个节点都要执行) ---- 由于 Docker 运行需要较新的系统内核功能,例如 ipvs 等等,所以一般情况下,我们需要使用 4.0+ 以上版本的系统内核,如果是 CentOS 8 则不需要升级内核,我用的是5.4内核
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-5.4.87-1.el7.elrepo.x86_64.rpm wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-lt-devel-5.4.87-1.el7.elrepo.x86_64.rpm yum localinstall -y kernel-lt* grub2-set-default 0 && grub2-mkconfig -o /etc/grub2.cfg grubby --default-kernel reboot
注:默认情况下,Kube-proxy将在kubeadm部署的集群中以iptables模式运行
iptables 它纯粹是为防火墙而设计的,并且基于内核规则列表,集群数量越多性能越差
ipvs依赖iptables进行包过滤、SNAT、masquared(伪装)。 使用 ipset 来存储需要 DROP 或 masquared 的流量的源或目标地址,以确保 iptables 规则的数量是恒定的,这样我们就不需要关心我们有多少服务了
如果没有加载并启用ipvs模块,或者没有配置ipvs相关配置,则会被降级成iptables模式。
6、内核优化(每个节点都要执行)
cat << EOF | tee /etc/sysctl.d/k8s.conf net.ipv4.ip_forward = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 fs.may_detach_mounts = 1 vm.overcommit_memory=1 vm.panic_on_oom=0 fs.inotify.max_user_watches=89100 fs.file-max=52706963 fs.nr_open=52706963 net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp.keepaliv.probes = 3 net.ipv4.tcp_keepalive_intvl = 15 net.ipv4.tcp.max_tw_buckets = 36000 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp.max_orphans = 327680 net.ipv4.tcp_orphan_retries = 3 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.ip_conntrack_max = 65536 net.ipv4.tcp_max_syn_backlog = 16384 net.ipv4.top_timestamps = 0 net.core.somaxconn = 16384 EOF sysctl --system
7、同步集群时间并加入定时任务(每个节点都要执行)
在集群当中,时间是一个很重要的概念,一旦集群当中某台机器时间跟集群时间不一致,可能会导致集群面临很多问题。所以,在部署集群之前,需要同步集群当中的所有机器的时间。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #设定亚洲时区 echo 'Asia/Shanghai' > /etc/timezone yum install -y ntp ntpdate ntp1.aliyun.com echo '#Timing synchronization time' >>/var/spool/cron/root #给定时任务加上注释 echo '*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root #定时任务
8、添加本地hosts (每个节点都要执行)
cat >> /etc/hosts <<EOF 192.168.69.186 master 192.168.69.187 node01 192.168.69.188 node02 EOF
9、设置免密登录
ssh-keygen -t rsa for i in master node01 node02 ; do ssh-copy-id -i ~/.ssh/id_rsa.pub root@$i ; done
二、部署docker
1、下载docker依赖环境(每个节点都要执行)
yum install -y yum-utils device-mapper-persistent-data lvm2
2、指定docker镜像源(每个节点都要执行)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安装docker(每个节点都要执行)
yum install -y docker-ce mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://4vlknd55.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload && systemctl restart docker && systemctl enable docker.service sudo docker version
三、部署k8s
1、部署要求(每个节点都要执行)
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg EOF
2、下载kubelet 启动并加入开机自启(每个节点都要执行)
yum install -y kubectl-1.20.2 kubelet-1.20.2 kubeadm-1.20.2
systemctl enable kubelet && systemctl start kubelet
3、节点初始化(以下操作在master节点执行)
方法一:(推荐) kubeadm init \ --image-repository=registry.cn-hangzhou.aliyuncs.com/k8sos \ --kubernetes-version=v1.20.2 \ --service-cidr=10.96.0.0/12 \ --pod-network-cidr=10.244.0.0/16
方法二:自己写配置文件
4、配置kubernetes用户信息
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
5、添加命令提示
yum install -y bash-completion source /usr/share/bash-completion/bash_completion source <(kubectl completion bash) echo "source <(kubectl completion bash)" >> ~/.bashrc
6、安装集群网络插件(我选择的是calico)
wget https://docs.projectcalico.org/manifests/calico.yaml kubectl apply -f calico.yaml
7、node节点加入集群(在node节点执行)
# 创建 TOKEN(在master节点执行) kubeadm token create --print-join-command # node 节点加入集群(在node节点执行) 将在master节点得到的加入集群的命令在node节点上执行即可

浙公网安备 33010602011771号