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节点上执行即可

 

posted @ 2021-11-03 14:53  岁月静好·  阅读(104)  评论(0)    收藏  举报