本次环境搭建需要安装三台Centos服务器(一主二从),k8s采用1.24.3版本。
环境初始化
1)检查操作系统的版本
cat /etc/redhat-release
2) 主机名解析
# 主机名成解析 编辑三台服务器的/etc/hosts文件,添加下面内容
192.168.121.153 master
192.168.121.152 node1
192.168.121.151 node2
3) 时间同步
# 安装chrony
yum install chrony
vim /etc/chrony.conf
server ntp1.aliyun.com iburst ##修改
# 启动chronyd服务
systemctl start chronyd
# 设置chronyd服务开机自启
systemctl enable chronyd
4) 禁用iptables和firewalld服务
# 1 关闭firewalld服务
systemctl stop firewalld
systemctl disable firewall
# 2 关闭iptables服务
systemctl stop iptables
systemctl disable iptables
5) 禁用selinux
vim /etc/selinux/conf
SELINUX=disabled
6) 禁用swap分区
vim /etc/fstab
注释最后一行
7)升级操作系统内核
# 导入elrepo gpg key
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
安装elrepo YUM源仓库
yum -y install https://www.elrepo.org/elrepo-release-7.0-4.el7.elrepo.noarch.rpm
# 安装kernel-ml版本,ml为长期稳定版本,lt为长期维护版本
yum --enablerepo="elrepo-kernel" -y install kernel-ml.x86_64
# 设置grub2默认引导为0
grub2-set-default 0
重新生成grub2引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
# 更新后,需要重启,使用升级的内核生效
reboot
8)修改linux的内核参数
#编辑/etc/sysctl.d/kubernetes.conf文件,添加如下配置:
vim /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
# # 重新加载配置
sysctl -p /etc/sysctl.d/kubernetes.conf
# 加载网桥过滤模块
modprobe br_netfilter
# 查看网桥过滤模块是否加载成功
lsmod | grep br_netfilter
9)配置ipvs功能
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
两者比较的话,ipvs的性能明显要高一些
# 1 安装ipset和ipvsadm
yum install ipset ipvsadm -y
# 2 添加需要加载的模块写入脚本文件
cat < /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
EOF
# 3 为脚本文件添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
# 4 执行脚本文件
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 5 查看对应的模块是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
kubernetes的镜像源在国外,速度比较慢,这里切换成国内的镜像源,本文使用阿里云YUM源
cat < /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=http://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=http://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg
http://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
yum clean all && yum makecache
# 集群软件安装
安装kubeadm、kubelet和kubectl
yum install kubeadm kubelet kubectl -y
# 查看所有的可用版本
yum list kubeadm kubelet kubectl --showduplicates | sort -r
# 默认安装的版本就是最新版1.24.X,当然也可以指定版本安装 ,如 yum install kubelet-1.16.2 kubeadm-1.16.2 kubectl-1.16.2
yum install kubeadm kubelet kubectl
#安装后查看版本
kubeadm version
kubeadm version: &version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.2", GitCommit:"f66044f4361b9f1f96f0053dd46cb7dce5e990a8", GitTreeState:"clean", BuildDate:"2022-06-15T14:20:54Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"}
# 配置kubelet的cgroup
# 为了实现docker使用的cgroupdriver与kubelet使用的cgroup的一致性,建议修改如下文件内容。 $ cat < /etc/sysconfig/kubelet KUBELET_EXTRA_ARGS="--cgroup-driver=systemd" KUBE_PROXY_MODE="ipvs" EOF
# 设置kubelet开机自启
systemctl enable kubelet
做完基础环境,建议创建快照,后续会分别使用三种不同方式创建集群。
直接安装docker-ce源
# step 1: 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker- ce/linux/centos/docker-ce.repo
# Step 3
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4:查询软件包
yum list | grep containerd
# Step 5:安装软件包
yum install containerd -y
# Step 6:初始化默认配置
containerd config default | tee /etc/containerd/config.toml
# Step 7:修改containerd配置更改
cgroup sed -i "s#SystemdCgroup\ \=\ false#SystemdCgroup\ \=\ true#g" /etc/containerd/config.toml
# Step 8:修改镜像源
sed -i "s#k8s.gcr.io#registry.aliyuncs.com/google_containers#g" /etc/containerd/config.toml
# Step 9:配置crictl
cat <
通过配置文件初始化
1)生成并修改配置文件
# 生成配置文件
kubeadm config print init-defaults > kubeadm.yml
修改如下配置:
advertiseAddress:为控制切面地址,( Master 主机 IP )
criSocket:为 containerd 的 socket 文件地址
imageRepository:阿里云镜像代理地址,否则拉取镜像会失败
kubernetesVersion:为 k8s 版本
注意:一定要配置镜像代理,否则会由于防火墙问题导致集群安装失败
2)初始化 K8S 集群
# 查看所需镜像列表
kubeadm config images list --config kubeadm.yml
# 拉取镜像
kubeadm config images pull --config kubeadm.yml
# 根据配置文件启动 kubeadm 初始化 k8s
kubeadm init --config=kubeadm.yml --upload-certs --v=6
如果初始化失败:
#iptables里面没有写入东西
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
两个节点都需要添加!
#iptables里面没有写入东西
modprobe br_netfilter
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/ipv4/ip_forward
kubeadm join 192.168.121.153:6443 --token
abcdef.0123456789abcdef \
--discovery-token-ca-cert-hash sha256:acad442584595756a6e7f57ca2886ab3819b3154cd0bd26943032fae3b44aa5a
没有安装之前查看集群节点
kubectl get nodes
NAME STATUS ROLES AGE VERSION
master NotReady control-plane 10m v1.24.3
node2 NotReady 7m36s v1.24.3
node3 NotReady 5m23s v1.24.3
kubectl get nodes
下载,这里我们安装 flannel
wget http://down.i4t.com/k8s1.24/kube-flannel.yml
# 根据需求修改网卡配置,这里以eth0为主
containers:
- name: kube-flannel
image: rancher/mirrored-flannelcni-flannel:v0.17.0
command:
- /opt/bin/flanneld
- args:
- - --ip-masq
- - --kube-subnet-mgr
- - --iface=eth0 # 如果是多网卡的话,指定内网网卡的名称
执行:
kubectl apply -f kube-flannel.yml
kubectl命令出现错误“The connection to the server localhost:8080 was refused”
解决方法:
1.将主节点(master)中的“/etc/kubernetes/admin.conf”文件拷贝到从节点相同目录下
2.配置环境变量
echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile
3.立即生效
source ~/.bash_profile
# 部署nginx
kubectl create deployment nginx --image=nginx:1.14-alpine
# 暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
# 查看服务状态
kubectl get pods,service