【Kubeadm】环境搭建、配置、安装

架构:服务器采用Master-nodes(1台)+ Worker-nodes(2台)

版本选择:
centos 7.9
kubelet-1.20.6
kubeadm-1.20.6
kubectl-1.20.6

升级centos7.9版本:

# 更换源
yum install wget -y
mv /etc/yum.repos.d/CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 清理缓存
yum makecache
# 安装内核
wget -O /etc/yum.repos.d/epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install epel-release

# 升级并重启
yum update -y;
reboot;

一,环境准备

所有机器节点,进行初始配置。

1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld

【备注】:如果开启firewalld防火墙,需要把对应端口放行:

kube-apiserver端口是6443,etcd端口是2379、2380,kube-controller-manager端口是10257, kube-scheduler端口是10259,kubelet端口10250,Kube-proxy:默认使用动态分配的端口(TCP/UDP),通常在 1024 到 65535 之间。calico端口TCP 179,UDP4789,TCP5743,UDP4789,443

# 放开 kube-apiserver 端口 6443
sudo firewall-cmd --zone=public --add-port=6443/tcp --permanent

# 放开 etcd 端口 2379 和 2380
sudo firewall-cmd --zone=public --add-port=2379/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2380/tcp --permanent

# 放开 kube-controller-manager 端口 10257
sudo firewall-cmd --zone=public --add-port=10257/tcp --permanent

# 放开 kube-scheduler 端口 10259
sudo firewall-cmd --zone=public --add-port=10259/tcp --permanent

# 放开 kubelet 端口 10250
sudo firewall-cmd --zone=public --add-port=10250/tcp --permanent

# 放开 Kube-proxy 的动态分配端口范围(TCP)
# 注意:这里假设动态端口范围为 1024 到 65535
sudo firewall-cmd --zone=public --add-port=1024-65535/tcp --permanent

# 放开 Calico 的端口
sudo firewall-cmd --zone=public --add-port=179/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4789/udp --permanent
sudo firewall-cmd --zone=public --add-port=5743/tcp --permanent
sudo firewall-cmd --zone=public --add-port=443/udp --permanent

# 重新加载防火墙规则
sudo firewall-cmd --reload
2. 关闭selinux
# 以root用户编辑SELinux配置文件
sudo vi /etc/selinux/config
 
将
SELINUX=enforcing
改为
SELINUX=disabled
# 保存并退出编辑器
 
# 查看关闭状态
getenforce
3. 关闭swap,其影响docker性能,一定重启虚拟机
swapoff -a # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
4. 重新设置 每台主机名, 并彼此绑定
# 先设置每台主机的主机名
hostnamectl set-hostname <新主机名>

# 每一台主机名绑定,修改hosts
cat >> /etc/hosts << EOF
192.168.159.135 k8s-master
192.168.159.136 k8s-node01
192.168.159.137 k8s-node02
EOF

或者

vi  /etc/hosts

192.168.159.128 k8s-master
192.168.159.129 k8s-node01
192.168.159.130 k8s-node02

注意:主机名 尽量不要用 “_” 或者 “-”

5. 升级每台机器操作系统

重要:
添加/etc/yum.repos.d/CentOS-Base.repo为阿里云镜像源,后续的步骤安装 都需要用到!

yum update -y
6.修改机器内核参数
# 首先加载相关模块
modprobe br_netfilter
modprobe ip_tables

# 配置文件更改
cat >> /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF

# 查看配置生效
sysctl -p /etc/sysctl.d/k8s.conf 
7. 更改安装阿里云的docke源
# step01
yum install -y yum-utils 

# step02
yum-config-manager --add-repo   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# step03
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+'  /etc/yum.repos.d/docker-ce.repo

# step04 清理缓存
yum makecache fast
8. 安装基础包软件
yum install -y yum-utils device-mapper-persistent-data lvm2 wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel  python-devel epel-release openssh-server socat  ipvsadm conntrack ntpdate telnet ipvsadm
9.时间同步

【如果操作系统是centos7系统】:——使用ntpdate

# 安装时间工具
yum install ntpdate -y

# 时间同步(或者使用:ntpdate time.windows.com 方式)
ntpdate cn.pool.ntp.org

# 定时检查同步时间
crontab -e
* */1 * * * /usr/sbin/ntpdate   cn.pool.ntp.org

#重启crond服务
service crond restart

【如果操作系统是rockylinux8.9系统】:—— 使用chrony

# 如果没有该服务安装一下
yum -y install chrony 

# 设置chronyd开机启动并立即启动chronyd服务同步网络时间
systemctl enable chronyd --now  

# 编辑 chronyd 配置文件,使用中国的时间服务器同步时间,速度更快
 vim /etc/chrony.conf  
#文件最后增加如下内容
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp1.tencent.com iburst
server ntp2.tencent.com iburst

# 写个计划任务,定时同步时间:
crontab -e
* * * * * /usr/bin/systemctl restart chronyd

# 重启
systemctl restart chronyd

#查看当前时间
date  
10. 免密登录(可选)

为了每台机器可以更快互传资料,在每一台机器上,设置免密登录,可选做。

# 生成公钥私钥,一直回车即可
ssh-keygen -t rsa

在每一台机器上分别执行相同命令:

# 执行过程中,输入对应机器的登录密码即可
ssh-copy-id  k8s-master
ssh-copy-id  k8s-node01
ssh-copy-id  k8s-node02

二,安装软件

在所有机器节点,安装基础软件

1,安装docker(CentOS 7上安装)

卸载旧版本的Docker(如果有):
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
安装Docker Engine:
# 查看docker版本
yum search docker-ce --showduplicates

# 开始安装
yum install docker-ce-20.10.6 -y

# 启动Docker,并且设置开机自启
systemctl start docker && systemctl enable docker
# 或者
systemctl enable docker --now
配置docker镜像加速器和驱动
vi /etc/docker/daemon.json

{
 "registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker-cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub-mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com", "https://rncxm540.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"]
} 

重新加载:

# 重新加载,开启
systemctl daemon-reload  && systemctl restart docker

# 查看docker状态
systemctl status docker

2,安装K8S

k8s安装所需组件kubeadm、kubelet、kubectl,所有节点都安装

添加K8S的阿里云yum源
# 创建kubernetes的yum仓库文件
vi /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
  • 清除yum缓存并生成新的仓库缓存
sudo yum clean all
sudo yum makecache
安装kubeadm、kubelet、kubectl
yum search kubectl --showduplicates

# 安装如下插件
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6

# 开机启动
systemctl enable kubelet

【注意】因为k8s未初始化,所以此时查看kubelet 状态(下图),属于正常状态
在这里插入图片描述

部署kubernetes

仅仅在Master节点初始化,安装如下命令

# 初始化命令
kubeadm init \
--apiserver-advertise-address=192.168.159.138 \
--image-repository=registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.6  \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=10.244.0.0/16

显示如下:
在这里插入图片描述
接下来根据提示,执行给出的三条命令(见上图):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 验证并查看集群相关信息
kubectl cluster-info
# 显示如下
kubectl cluster-info
Kubernetes control plane is running at https://192.168.159.138:6443
CoreDNS is running at https://192.168.159.138:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

至此,kubectl 安装成功!!

3,部署kubernetes (node节点)

  • 执行如下命令,提取加入集群命令:
kubeadm token create --print-join-command

在这里插入图片描述

  • 加入节点Node最总执行命令:
kubeadm join 192.168.159.138:6443 --token 5zmmow.dfez67syqzxjhsie --discovery-token-ca-cert-hash sha256:74d6a0079df24966e0e3c4adc678535167f853ed09af2d15f7732c8ce9c2bb7a  --ignore-preflight-errors=SystemVerification

注意:最后需要拼接参数--ignore-preflight-errors=SystemVerification

4,部署CNI网络插件 (calico)

问题:节点加入后,节点状态处于NotReady 未准备好的状态,所以排查?
在这里插入图片描述
第1步,查看组件状态

kubectl get componentstatus
kubectl get cs  # 缩写

在这里插入图片描述
第2步:因为目前没有创建pod。所以查看pod时,查看其他命名空间里(kube-system)的状态:

kubectl get pods -n kube-system

在这里插入图片描述
第3步,分析出主要原因是因为网络造成。所以需要部署CNI网络插件 calico

【解决安装】
下载calico.yaml配置文件

# 新建/进入新目录下载
cd /opt/k8s/

# 下载文件(下载不下的话,可用我上传的文件)
wget --no-check-certificate https://projectcalico.docs.tigera.io/archive/v3.25/manifests/calico.yaml

# calico v3.20版本
https://docs.projectcalico.org/v3.25/manifests/calico.yaml

kubelet为1.23.6 那么calico版本必须再3.23+或更高

再次,更改此文件中的下载镜像地址:

# 查看哪些镜像需要更改。
grep image calico.yaml

# 将地址更改未阿里云镜像地址。
sed -i 's#docker.io/##g' calico.yaml

在这里插入图片描述

最后执行命令:

kubectl apply -f calico.yaml

如果执行失败,怎么办???

修改 calico.yaml 文件

第一处:文件中的 CALICO_IPV4POOL_CIDR配置

与上面初始化的--pod-network-cidr=10.244.0.0/16的IP一致。

在这里插入图片描述

第二处:文件中name:CLUSTER_TYPE,下方加入

网卡名称通过ifconfig 查看 ,本例为ens33

- name: IP_AUTODETECTION_METHOD
  value: "interface=网卡名称"

在这里插入图片描述

还是不成功,那么升高/降低calico插件版本!!!

kubectl apply -f calico.yaml

执行成功,显示如下:

[root@Main k8s]# kubectl apply -f calico.yaml
poddisruptionbudget.policy/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
serviceaccount/calico-node created
configmap/calico-config created
customresourcedefinition.apiextensions.k8s.io/bgpconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/bgppeers.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/blockaffinities.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/caliconodestatuses.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/clusterinformations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/felixconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/globalnetworksets.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/hostendpoints.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamblocks.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamconfigs.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipamhandles.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ippools.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/ipreservations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/kubecontrollersconfigurations.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networkpolicies.crd.projectcalico.org created
customresourcedefinition.apiextensions.k8s.io/networksets.crd.projectcalico.org created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created
daemonset.apps/calico-node created
deployment.apps/calico-kube-controllers created
[root@Main k8s]# 

恭喜你,安装成功!!!

测试DNS是否可用:

在这里插入图片描述
如果可用,说明整个网络可用!部署成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值