使用kubeadm部署kubernetes1.27.1版本教程
作者:珂玥c
一、搭建前的准备
1. 搭建k8s的平台规划
单master集群:只有一个master,管理多个node节点。
多master集群:拥有多个master,管理多个node节点。高可用模式。比单master集群多一个负载均衡的步骤。
test环境搭建,因此采用单master集群,如后续有需要可再增加master。
2. 服务器硬件配置要求
- master节点:
测试环境 | 生产环境 | |
CPU | 2 | 8 |
内存 | 4G | 16G |
硬盘 | 20G | 100G |
- node节点:
测试环境 | 生产环境 | |
CPU | 4 | 16 |
内存 | 8G | 64G |
硬盘 | 40G | 500G |
3. 搭建部署的方式
目前常见的有两种方式:
1)kubeadm方式
- kubeadm是k8s的一个部署工具,部署方式比较简单。只需要用到两个命令,kubeadm init(初始化)和 kubeadm join(将node节点加入到master中)。可以快速部署k8s集群。
- 优点是快速,无需额外自己处理。比较常见且节约时间
官方链接:https://kubernetes.io/docs/reference/setup-tools/kubeadm/
2)二进制方式
- 从 github 下载二进制包,手动部署每个组件,过程比较麻烦。
- 优点是,遇到问题后可以精准定位,有利于后续维护。毕竟是自己一步一步操作的,更清楚里面的弯弯绕绕~
二、搭建流程
1. kubeadm搭建方式
大致流程:
1)创建一个master节点 kubeadm init
2)将node节点加入到当前集群中 kubeadm join <master节点的ip和端口>
3)配置网络插件和测试k8s集群
机器配置:
- -- 准备了一台master,一台node。硬件配置CPU 2核,内存251G,硬盘500G
- -- 机器之间可以互相ping通,操作系统为CentOS7
- -- 禁止swap分区
- -- 可以拉取镜像
master: 192.10.18.102 node: 192.10.18.103
a. 准备工作,系统初始化
由于自己用的是之前配置好的旧物理机,所以跳过此流程。如果需要用虚拟机的话。要进行安装3台Centos7.x的操作系统,之后进行如下初始化:
- 1)关闭防火墙
systemctl stop firewalld systemctl disable firewalld
- 2)关闭selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config #永久关闭 setenforce 0 #临时关闭
- 3)关闭swap
swapoff -a #临时关闭 sed -ri 's/."swap."/#&/' /etc/fstab #永久关闭
- 4)设置主机名
hostnamectl set-hostname <hostname>
- 5)只在master添加hosts
cat >> /etc/hosts << EOF ip master ip node1 ip node2 EOF
- 6)将桥接的ipv4流量传递到iptables的链,配置内核参数和优化
cat > /etc/sysctl.d/k8s.conf <<EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system #生效命令
- 7)时间同步
yum install ntpdate -y ntpdate time.windows.com
- 8)安装ipset、ipvsadm
yum -y install conntrack ipvsadm ipset jq iptables curl sysstat libseccomp wget vim net-tools git cat > /etc/modules-load.d/ipvs.conf <<EOF # Load IPVS at boot ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack nf_conntrack_ipv4 EOF systemctl enable --now systemd-modules-load.service ###注!!!若此处失败,可能是因为内核版本低导致的,可升级内核后,再执行此命令##### #确认内核模块加载成功 lsmod |egrep "ip_vs|nf_conntrack_ipv4"
b. 升级内核(根据自己情况进行选择,满足时可不升级)
- 1)查看系统版本
cat /etc/redhat-release
- 2)查看当前内核版本
uname -r
- 3)检查是否安装ELRepo
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
看到error说明没有安装ELRepo
- 4)升级安装ELRepo
安装
yum install -y https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
或升级
rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
- 5)查看可用安装包, 长期维护版本为lt,最新主线稳定版为ml
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
- 6)安装最新的内核
yum --enablerepo=elrepo-kernel install -y kernel-lt
- 7)查看可用内核版本及启动顺序
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /boot/grub2/grub.cfg
- 8)安装辅助工具(非必须,有些系统自带该工具):grub2-pc
yum install -y grub2-pc
- 9)设置内核默认启动顺序
grub2-set-default 0
vim /etc/default/grub GRUB_DEFAULT=0 #这里从原来的saved改为0
- 10)生成grub配置文件
# 运行grub2-mkconfig命令来重新创建内核配置
grub2-mkconfig -o /boot/grub2/grub.cfg
- 11)重启机器
reboot
- 12)查看内核版本是否正确
uname -r
- 13)安装 yum-utils 工具
当系统安装的内核大于3个时,会自动删除旧的内核版本或自己查看已经安装的内核后手动yum remove -y 进行删除旧版本
yum install -y yum-utils
- 14)删除旧的工具包
yum remove kernel-tools-libs.x86_64 kernel-tools.x86_64
- 15)安装新版本的工具包
yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-lt-tools.x86_64
- 16)查看已安装内核
rpm -qa | grep kernel
c. 设置一下ipv4,否则会失败(此处为坑,不设置无法初始化成功)
vim /etc/sysconfig/modules/ipvs.modules cat /etc/sysconfig/modules/ipvs.modules nf_conntrack systemctl enable --now systemd-modules-load.service lsmod |egrep "ip_vs|nf_conntrack_ipv4" lsmod |egrep "ip_vs|nf_conntrack_ipv"
d. 安装containerd
1)安装依赖软件包
yum -y install yum-utils device-mapper-persistent-data lvm2
2)添加阿里Docker源
[root@k8s-master ~]
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3)添加overlay和netfilter模块
cat >>/etc/modules-load.d/containerd.conf <<EOF overlay br_netfilter EOF
modprobe overlay modprobe br_netfilter
4)安装Containerd,这里安装最新版本(1.5版本及以下不可使用)
yum -y install containerd.io
5)创建Containerd的配置文件
mkdir -p /etc/containerd containerd config default > /etc/containerd/config.toml sed -i '/SystemdCgroup/s/false/true/g' /etc/containerd/config.toml sed -i '/sandbox_image/s/registry.k8s.io/registry.aliyuncs.com\/google_containers/g' /etc/containerd/config.toml
6)启动containerd
systemctl enable containerd systemctl start containerd
e.安装kubectl、kubelet、kubeadm
1)添加阿里kubernetes源
vim /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
2)安装kubectl、kubelet、kubeadm
查看所有的可用版本
yum list kubelet --showduplicates |grep 1.27
这里安装当前最新版本1.27.1
yum -y install kubectl-1.27.1 kubelet-1.27.1 kubeadm-1.27.1
设置开机自启kubelet(此时并没有kubelet配置文件无法启动,正常状况)
systemctl enable kubelet systemctl start kubelet
f. master节点进行初始化操作
1)查看k8s v1.27.1初始化所需要的镜像
kubeadm config images list --kubernetes-version=v1.27.1
2)初始化命令
kubeadm init --kubernetes-version=1.27.1 --apiserver-advertise-address=10.142.50.190 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16
注:pod的网段为: 10.244.0.0/16,api server地址为Master本机IP,网段可以自定义,不冲突即可。
参数详解:
指定版本。(可按需修改版本)
- -- 设置了apiserver,即当前节点的ip。
- -- 指定镜像仓库地址,拉取镜像。
- -- service-cidr是svc网络 kubectl get svc #查看svc信息
默认使用10.96.0.0/12
- -- pod-network-cidr 是pod网络 kubectl get pods -o wide #查看pod网络信息
- -- k8s内部的pod节点之间网络可以使用的IP段,不能和service-cidr写一样,默认使用10.244.0.0/16
此操作,等待时间较长
3)成功返回信息,执行返回内容即可
Your Kubernetes control-plane has initialized successfully! To start using your cluster, you need to run the following as a regular user: mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config Alternatively, if you are the root user, you can run: export KUBECONFIG=/etc/kubernetes/admin.conf You should now deploy a pod network to the cluster. Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at: https://kubernetes.io/docs/concepts/cluster-administration/addons/ Then you can join any number of worker nodes by running the following on each as root: kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
master节点执行
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
node节点执行
kubeadm join IP:6443 --token maod8l.w4g2cu2tl4er9gil \ --discovery-token-ca-cert-hash sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2. 二进制搭建流程
- a. 创建多台虚拟机,安装linux操作系统
- b. 操作系统初始化(各种关关关)
- c. 为etcd和apiserver自签证书(相当于门禁卡,保证互通)
- d. 部署etcd集群
- e. 部署master组件
kube-apiserver kube-controller-manager kube-scheduler etcd
- f. 部署node组件
kubelet kube-proxy docker etcd
- g. 部署集群网络
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。