云原生项目:多master和多node的k8s集群基础配置

环境:

6台centos7.9虚拟机,三台作为master节点,三台作为node节点。

安装20.10.24版本的docker,安装1.23版本的k8s。

一、初始化工作

1、准备全新一台centos7.9的虚拟机作为模板机,做好初始化工作。

(1)、更新和配置软件源

 cd /etc/yum.repos.d/
# 进入源仓库

 rm -rf  *
# 删除掉centos所有自带的不可用的源

 curl -O http://mirrors.aliyun.com/repo/Centos-7.repo
# 安装阿里云的源

 yum clean all && yum makecache fast
# 清理 YUM 的缓存和重新构建缓存,以确保 YUM 仓库的元数据是最新的,并且可以帮助解决一些由于缓存数据过时或损坏而导致的问题。

 yum install -y yum-utils 
#安装yum-utils 包,获得更多的yum功能

 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#添加阿里云的docker仓库

(2)、配置静态ip地址

yum install vim -y

vim /etc/sysconfig/network-scripts/ifcfg-ens33

BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.75.129 #你的主机ip地址
PREFIX=24
GATEWAY=192.168.75.2 #你的主机网关
DNS1=114.114.114.114

(3)、配置hosts文件

vim /etc/hosts

#添加以下,确保通过主机名能相互访问
192.168.75.129 k8s-master-1
192.168.75.130 k8s-master-2
192.168.75.131 k8s-master-3
192.168.75.132 k8s-node-1
192.168.75.133 k8s-node-2
192.168.75.134 k8s-n0de-3

(4)、设置机器主机名

按照hosts文件在不同虚拟机上设置不同的主机名

# 在master1上执行
hostnamectl set-hostname k8s-master-1 && bash
……
# 在node-1上执行
hostnamectl set-hostname k8s-node-1 && bash
# 在node-2上执行
hostnamectl set-hostname k8s-node-2 && bash
...

(5)、关闭selinux

# 临时关闭
setenforce 0

# 永久关闭
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# 修改selinux配置文件之后,重启机器,selinux配置才能永久生效
reboot

# 检查
getenforce
# 显示Disabled说明selinux已经关闭

#关闭防火墙
systemctl stop firewalld && systemctl disable firewalld

(6)、关闭交换分区

关闭交换分区,提高系统性能。

# 临时关闭
swapoff -a

# 永久关闭
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

(7)、调整内核参数

# 修改linux的内核参数,添加网桥过滤和地址转发功能,转发IPv4并让iptables看到桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 加载网桥过滤模块
modprobe overlay
modprobe br_netfilter
# 编辑/etc/sysctl.d/kubernetes.conf文件,主要是对容器虚拟网络的支持,添加如下配置:
cat << EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
# 应用sysctl参数而不重新启动
sysctl -p

# 查看br_netfilter和 overlay模块是否加载成功
lsmod | grep -e br_netfilter -e overlay
 br_netfilter           22256  0 
 bridge                151336  1 br_netfilter
 overlay                91659  0

(8)、配置ipvs功能

# 安装ipset和ipvsadm,主要是对ipvs进行传递参数的或者管理的
yum install ipset ipvsadm  -y

# 添加需要加载的模块写入脚本文件
#modprobo 作用是加载模块到内核里
cat <<EOF > /etc/sysconfig/modules/ipvs.modules
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF
# 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
# 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 重启
reboot

# 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
nf_conntrack_ipv4      15053  24 
nf_defrag_ipv4         12729  1 nf_conntrack_ipv4
ip_vs_sh               12688  0 
ip_vs_wrr              12697  0 
ip_vs_rr               12600  105 
ip_vs                 145497  111 ip_vs_rr,ip_vs_sh,ip_vs_wrr
nf_conntrack          139264  10 ip_vs,nf_nat,nf_nat_ipv4,nf_nat_ipv6,xt_conntrack,nf_nat_masquerade_ipv4,nf_nat_masquerade_ipv6,nf_conntrack_netlink,nf_conntrack_ipv4,nf_conntrack_ipv6
libcrc32c              12644  4 xfs,ip_vs,nf_nat,nf_conntrack

(9)、配置时间同步

systemctl restart chronyd && systemctl enable chronyd

2、配置docker环境

(1)、安装docker环境

# 查看所有版本
yum list docker-ce --showduplicates
#安装指定版本20.10.24的docker
yum install -y docker-ce-20.10.24-3.el7 docker-ce-cli-20.10.24-3.el7

(2)、配置docker的国内源

mkdir /etc/docker -p

vim /etc/docker/daemon.json
#输入以下内容

{
  "registry-mirrors": ["https://hub.docker-alhk.dkdun.com/"],
  "exec-opts": ["native.cgroupdriver=systemd"]
}

#重新加载docker的配置文件和重启docker服务
systemctl daemon-reload

systemctl restart docker

(3)、配置docker服务自启

# 启动docker并设置开机自启
systemctl enable --now docker
# 验证
systemctl status docker

3、配置k8s集群环境

(1)、配置k8s组件源

cat <<EOF | tee /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
# 更新索引缓冲
yum makecache

(2)安装

# 安装
yum install -y kubeadm-1.23.17-0 kubelet-1.23.17-0 kubectl-1.23.17-0 --disableexcludes=kubernetes

# 启动kubelet并设置开机自启
systemctl enable --now kubelet

二、集群的安装

1、集群初始化

# 仅在一台master机器上执行

kubeadm init \
    --kubernetes-version=v1.23.17 \
    --pod-network-cidr=10.224.0.0/16 \
    --service-cidr=10.96.0.0/12 \
    --apiserver-advertise-address=192.168.75.129 \ #主机ip地址
    --image-repository=registry.aliyuncs.com/google_containers

2、master节点加入集群

(1)、拷贝证书

[root@k8s-master-2 ~]# cd /root && mkdir -p /etc/kubernetes/pki/etcd &&mkdir -p ~/.kube/

#把k8s-master-1节点的证书拷贝到k8s-master-2上:

scp /etc/kubernetes/pki/ca.crt k8s-master-2:/etc/kubernetes/pki/  
scp /etc/kubernetes/pki/ca.key k8s-master-2:/etc/kubernetes/pki/  
scp /etc/kubernetes/pki/sa.key k8s-master-2:/etc/kubernetes/pki/  
scp /etc/kubernetes/pki/sa.pub k8s-master-2:/etc/kubernetes/pki/  
scp /etc/kubernetes/pki/front-proxy-ca.crt k8s-master-2:/etc/kubernetes/pki/  
scp /etc/kubernetes/pki/front-proxy-ca.key k8s-master-2:/etc/kubernetes/pki/  
scp /etc/kubernetes/pki/etcd/ca.crt k8s-master-2:/etc/kubernetes/pki/etcd/  
scp /etc/kubernetes/pki/etcd/ca.key k8s-master-2:/etc/kubernetes/pki/etcd/

(2)、检查 kubeadm-config ConfigMap 是否正确配置了 controlPlaneEndpoint。

[root@k8s-master-1 ~]# kubectl -n kube-system edit cm kubeadm-config -o yaml

添加如下字段:

controlPlaneEndpoint: "192.168.75.129:6443"

#重启一下 
systemctl restart kubelet

(3)、加入master节点

 kubeadm token create --print-join-command
# 得到命令

kubeadm join 192.168.40.180:6443 --token zwzcks.u4jd8lj56wpckcwv \
  --discovery-token-ca-cert-hash sha256:1ba1b274090feecfef58eddc2a6f45590299c1d0624618f1f429b18a064cb728 \
  --control-plane --ignore-preflight-errors=SystemVerification

#运行对应得到的命令 +一行 “--control-plane --ignore-preflight-errors=SystemVerification”

(4)、执行node上的同样命令

[root@k8s-master-2 ~]# mkdir -p $HOME/.kube

[root@k8s-master-2 ~]# sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

[root@k8s-master-2 ~]# sudo chown $(id -u):$(id -g) $HOME/.kube/config


3、node节点加入集群

(1)、加入node节点

kubeadm token create --print-join-command 
#得到命令

kubeadm join 192.168.75.129:6443 --token yvq3xz.x0xfu68vz4rqldvw --discovery-token-ca-cert-hash sha256:1afc3cdd9442dfb8e1d6420c2cdb551a994e3972dbad5468193735b9ea18c086 
#运行以上得到的命令

(2)、分配worker role

# 在master上执行
kubectl label node k8s-node-1 node-role.kubernetes.io/worker=worker
kubectl label node k8s-node-2 node-role.kubernetes.io/worker=worker
kubectl label node k8s-node-3 node-role.kubernetes.io/worker=worker

(3)、检查node集群节点状态

[root@k8s-master-2 .kube]# kubectl get nodes
NAME           STATUS     ROLES                  AGE     VERSION
k8s-master-1   Ready      control-plane,master   3h57m   v1.23.17
k8s-master-2   Ready      control-plane,master   58m     v1.23.17
k8s-master-3   Ready      control-plane,master   94m     v1.23.17
k8s-node-1     NotReady   worker                 3h44m   v1.23.17
k8s-node-2     NotReady   worker                 3h42m   v1.23.17
k8s-node-3     NotReady   worker                 3h41m   v1.23.17

#能看到类似的就可以,暂时不用考虑状态。

(4)、在node节点上也可以执行kubectl命令

[root@k8s-node-1 ~]# mkdir -p $HOME/.kube
[root@k8s-node-1 ~]# scp  k8s-master-1:/etc/kubernetes/admin.conf /root/.kube/config   
[root@k8s-node-1 ~]# chown $(id -u):$(id -g) $HOME/.kube/config
[root@k8s-node-1 ~]# kubectl get node
NAME           STATUS   ROLES                  AGE   VERSION
k8s-master-1   Ready    control-plane,master   75m   v1.23.17
k8s-node-1     Ready    worker                 63m   v1.23.17
k8s-node-2     Ready    worker                 63m   v1.23.17
[root@k8s-node-1 ~]#  

4、安装calico网络插件

#calico是k8s集群里网络通信的一个组件(软件),实现集群内部不同的机器之间的容器的通信(大的网络规模)。k8s集群节点可以到5000节点,1亿个容器
#flannel 也是一个网络插件(适合小规模的集群,节点服务器的数量比较小,例如:10台左右)
# terway 是阿里云自己研发的一个网络插件
#等待时间长是正常的!!!

# master执行  
kubectl apply -f https://docs.projectcalico.org/archive/v3.25/manifests/calico.yaml  # k8s 1.23适用此版本
# 验证 节点状态 NotReady => Ready
[root@k8s-master-2 .kube]# kubectl get nodes
NAME           STATUS     ROLES                  AGE     VERSION
k8s-master-1   Ready      control-plane,master   3h57m   v1.23.17
k8s-master-2   Ready      control-plane,master   58m     v1.23.17
k8s-master-3   Ready      control-plane,master   94m     v1.23.17
k8s-node-1     Ready      worker                 3h44m   v1.23.17
k8s-node-2     Ready      worker                 3h42m   v1.23.17
k8s-node-3     Ready      worker                 3h41m   v1.23.1

5、k8s配置ipvs

kubectl edit configmap kube-proxy -n kube-system
# 修改配置
mode: "ipvs"

# 删除所有kube-proxy pod使之重启
kubectl delete pods -n kube-system -l k8s-app=kube-proxy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值