教程参考:centos7安装k8s 1.28版本,基于科学-CSDN博客
环境准备:
准备三台机器,都做以下操作,或者只准备一个机器,最后再克隆两台。
yum:
换源,这是阿里云的源
bash
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
然后清缓存,建立元数据
yum clean all
yum makecache
yum更新
yum update -y
#这里要按下tab键补全
yum install -y bash-completio
#下载wget
yum install -y wget
#下载网络工具(不是很清楚这里下这个的目的,可能是为了后面k8s之间网络通信使用
yum install -y net-tools
#下载GCC
yum install -y gcc
虚拟机配置:
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
systemctl is-enabled firewalld
同步时间:(这里我报错了,但是在三个虚拟机设置的时候,特意调的一样的时间,所以这三个虚拟机时间是同步的)
sudo yum -y install ntpdate
sudo ntpdate ntp1.aliyun.com
sudo systemctl status ntpdate
sudo systemctl start ntpdate
sudo systemctl status ntpdate
sudo systemctl enable ntpdate
关闭swap:
free -h
sudo swapoff -a
sudo sed -i 's/.*swap.*/#&/' /etc/fstab
free -h
关闭selinux
getenforce
cat /etc/selinux/config
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
cat /etc/selinux/config
安装containerd和K8S
配置K8S环境
内核参数:
cat > /etc/sysctl.d/Kubernetes.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1 #当通过桥接网络接收到IPV6时,通过ip6tables的规则转发
net.bridge.bridge-nf-call-iptables = 1 #当通过桥接网络接收到IPV4时,通过iptables的规则转发
net.ipv4.ip_forward = 1#允许ipv4转发,即使目标机不是本机
vm.swappiness = 0#尽可能地少使用swap
EOF
使配置生效
sysctl --system
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git相关内核模块
cat > /etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF
启动服务
systemctl enable --now systemd-modules-load
ip_vs,ip_vs_rr,ip_vs_wrr,ip_vs_sh 是IPVS相关的内核模块。它们提供了不同的负载均衡算法(round-robin,加权轮询,最短任务优先)。
nf_conntrack 和 nf_conntrack_ipv4 是用于网络连接跟踪的内核模块,这在防火墙和NAT中非常重要。
linux kernel 4.19版本已经将nf_conntrack_ipv4 更新为 nf_conntrack
(看不是很懂,但是这里原帖子也有,希望别人能看懂)
安装containerd
这里开始使用科学上网,如果在下面的步骤你发现。
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
配置 containerd
cat >>/etc/modules-load.d/containerd.conf <<EOF
overlay
br_netfilter
EOF
立刻加载 overlay模块
modprobe overlay
立刻加载 br_netfilter模块
modprobe br_netfilter
安装containerd
yum install containerd.io -y
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml
使用systemd管理cgroups
sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml
启动containerd
systemctl enable containerd
systemctl start containerd
安装K8S
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/v1.28/rpm/repodata/repomd.xml.key
EOF
#查看一下有没有进去
cat /etc/yum.repos.d/kubernetes.repo
安装k8s并启动
yum list kubelet --showduplicates |grep 1.28
开始安装 这篇文档原作者写下时,最新版本为1.28.2 ,我也是安装的该版本
yum -y install kubectl-1.28.2 kubelet-1.28.2 kubeadm-1.28.2
启动
systemctl enable kubelet
systemctl start kubelet
#查看有没有启动
systemctl status kubelet
下面就是对于虚拟机的一些额外的配置:
修改名称:
查看主机名
hostnamectl
修改主机名
hostnamectl set-hostname xxxx 这里我有三台节点,一个master,两个worker,主机叫k8s-master,两个worker就叫worker1 worker2
给虚拟机固定了IP:
#找到ens33文件,做以下配置:
vi /etc/sysconfig/network-scripts/ifcfg-ens33
#静态IP
BOOTPROTO=static
#允许上网
ONBOOT=yes
#固定IP,一台机器一个IP,我一个是128,一个是129,一个是130
IPADDR=192.168.157.128
#DNS配置
DNS1=114.114.114.114
DNS2=8.8.8.8
#设置网关
GATEWAY=192.168.157.2
修改hosts文件:
#将ip和主机名称对应着写,加到hosts中,三台机器都加(这里IP改为自己的IP):
192.168.157.128 k8s-master
192.168.157.129 worker1
192.168.157.130 worker2
好了,到这里如果只有一台虚拟机的可以进行克隆了,在克隆出来以后,不要一起打开,一个个打开,分别修改一下ens33文件里的ip之后再一起打开,还要修改hostname为hosts文件里的名字。
开始部署master节点
#查看所需要的镜像
kubeadm config images list --kubernetes-version=v1.28.2
#提前下载镜像,不要在init初始化的时候等待太长时间:
kubeadm config images pull
初始化(IP改为自己的)
kubeadm init --kubernetes-version=1.28.2 \
--apiserver-advertise-address=192.168.157.128 \
--pod-network-cidr=10.244.0.0/16
这里会返回一个这样的信息
kubeadm join 192.168.157.128:6443 --token mu7mpy.8xxxxxxxxs --discovery-token-ca-cert-hash sha256:1d5b4b3b3493bxxxxxxxf2a1bb8d1250886xxxxxxxxb92
等初始化完了进行认证配置:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown (id -u):(id -g) $HOME/.kube/config
export KUBECONFIG=/etc/kubernetes/admin.conf
检查一下是否起来:
kubectl get node
kubectl get pods -A
kubectl get pods -n kube-system
当时在这里时,master是notready的状态,这是正常的,这里需要加入calico插件。
#先获取他的配置文件
wget https://docs.projectcalico.org/manifests/calico.yaml
#将其中的CALICO_IPV4POOL_CIDR修改,这里注意#
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
找到下面这个name,并在其下面加入网卡配置
- name: CLUSTER_TYPE
value: "k8s,bgp"
下面添加
- name: IP_AUTODETECTION_METHOD
value: "interface=ens33"
然后部署calico:
kubectl apply -f calico.yaml
检查
kubectl get pods -n kube-system
在worker配置
将刚刚获取到的
kubeadm join 192.168.157.128:6443 --token mu7mpy.8xxxxxxxxs --discovery-token-ca-cert-hash sha256:1d5b4b3b3493bxxxxxxxf2a1bb8d1250886xxxxxxxxb92
这种的数据在两台worker中使用
配置密钥:
mkdir ~/.kube cp /etc/kubernetes/kubelet.conf ~/.kube/config
#查看node
kubectl get nodes
这时候就会出现两个worker
部署一个nginxapiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # 告知 Deployment 运行 2 个与该模板匹配的 Pod
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.0
ports:
- containerPort: 80
#进行测试一下:
kubectl apply -f deployment.yaml
#查看一下:
kubectl get pod
遇到的问题:
签名认证的问题:
有一个在下载的时候说什么公钥签名有问题:
解决办法:
打开相对应的yum源,找到相对应的repo,比如你是在下载kube时出现问题的,就找到kubexxxx.repo,将里面的gpgcheck改为0,就不会出现这个错误。
SSL未连接问题:
解决办法:
科学上网
TCP connection reset by peer
gitclone时出现这个问题就:git clone错误: TCP connection reset by peer_git clone tcp connection reset by peer-CSDN博客
如果是yum install时:
其他的都可以yum install,就某个不可以时:科学上网,
如果都不可以,请更换yum源。
部署CALICO时,报错error:calico_node is not empty
calico.yaml文件里的
- name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16"
这里格式要正确,缩进要和其他的保持一致,而且这个CALICO_IPV4POOL_CIDR一开始是注掉的,要将#删掉
POD一直Peding状态:
#查看日志:#(这里xxxx是名称,可以通过 kubectl get pod -n kube-system 查看
kubectl logs -n kube-system xxxxx
#如果这个命令没有出现任何返回也没有报错,那就使用:
journalctl -xefu kubelet
查看日志,我这里报错一直是cni plugin 出现问题,这里就是calico安装部署有问题,需要重新部署一下:
kubectl delete -f calico.yaml
按照上面的教程部署好以后再重新部署。
lookup localhost on 114.114.114.114:53: no such host
出现这个lookup localhost on 114.114.114.114:53: no such host或者是8.8.8.8有问题。
解决办法:
查看hosts文件,缺少下面的装上,然后重启电脑
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6