集群规划
Master | 192.168.17.51 |
---|
node1 | 192.168.17.52 | node2 | 192.168.17.53 | 系统版本 | 7.3(原文用的7.8,7.8可以更省事) | 内存 | 2GB(原文4GB我电脑配置低用的2GB) | CPU | 2个 |
安装所需文件
提取码:1021
环境初始化
- 修改主机名
master
hostnamectl set-hostname master && bash
node1
hostnamectl set-hostname node1 && bash
node2
hostnamectl set-hostname node2 && bash
- 配置hosts文件 三台机器操作
cat >> /etc/hosts << EOF
192.168.17.51 master
192.168.17.52 node1
192.168.17.53 node2
EOF
- 修改内核参数
modprobe br_netfilter
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
> vm.swappiness=0
> EOF
sysctl -p /etc/sysctl.d/k8s.conf
- 配置ipvs
cat > /etc/sysconfig/modules/ipvs.modules << EOF
#!/bin/bash
ipvs_modules="ip_vs ip_vs_lc ip_vs_wlc ip_vs_rr ip_vs_wrr ip_vs_lblc ip_vs_lblcr ip_vs_dh ip_vs_sh ip_vs_nq ip_vs_sed ip_vs_ftp nf_conntrack"
for kernel_module in ${ipvs_modules}; do
/sbin/modinfo -F filename ${kernel_module} > /dev/null 2>&1
if [ 0 -eq 0 ]; then
/sbin/modprobe ${kernel_module}
fi
done
EOF
chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep ip_vs
注:这一块master和node节点是不一样的,没影响。
- 安装基础软件包
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
- 配置阿里云
cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
- 时间同步、关闭防火墙、selinux以及交换分区
systemctl stop firewalld ; systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
swapoff -a
crontab -e
* */1 * * * /usr/sbin/ntpdate cn.pool.ntp.org
- 安装docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
systemctl start docker
systemctl enable docker
- 安装K8S软件包
yum install -y kubelet-1.20.6 kubeadm-1.20.6 kubectl-1.20.6
systemctl enable kubelet && systemctl start kubelet
systemctl status kubelet -l
上面可以看到 kubelet 状态不是 running 状态,这个是正常的,不用管,等 k8s 组件起来这个kubelet 就正常了(下阶段操作完成之后)
Kubeadm更新
三台机器操作
- 把初始化 k8s 集群需要的离线镜像包上传到master、node1、node2上
docker load -i k8simage-1-20-6.tar.gz
Master操作
- 使用 kubeadm 初始化 k8s 集群
kubeadm init --kubernetes-version=1.20.6 --apiserver-advertise-address=192.168.17.51 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification
初始化报错
解决方法,修复这个问题,你需要通过 centos 更新 systemd:
yum -y upgrade systemd
kubeadm reset
kubeadm init --kubernetes-version=1.20.6 --apiserver-advertise-address=192.168.17.51 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --ignore-preflight-errors=SystemVerification
显示如下,说明安装完成: 注:下面红框的内容要复制出来 第四步会用到
- 配置Kubectl的配置文件config
相当于对 kubectl 进行授权,这样 kubectl 命令可以使用这个证书对 k8s 集群进行管理
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
此时集群状态还是 NotReady 状态,因为没有安装网络插件。
- node加入集群(下面命令就是第二步需要复制的内容)
node1上操作
yum -y upgrade systemd
kubeadm join 192.168.17.51:6443 --token pk2y5b.pko35qu81s1suqvz \
--discovery-token-ca-cert-hash sha256:fb1dcd02aae4cda2ac0f2efeee3a6801d555705458f5d4c09160db27362ee5ba
node2上操作
yum -y upgrade systemd
kubeadm join 192.168.17.51:6443 --token pk2y5b.pko35qu81s1suqvz \
--discovery-token-ca-cert-hash sha256:fb1dcd02aae4cda2ac0f2efeee3a6801d555705458f5d4c09160db27362ee5ba
显示如下,说明安装完成:
master上操作
- 添加角色
kubectl get nodes
可以看到node1、node2 的 ROLES 角色为空,就表示这个节点是工作节点。
可以把node1、node2 的 ROLES 变成 work,按照如下方法:
kubectl label node node1 node-role.kubernetes.io/worker=worker
kubectl label node node2 node-role.kubernetes.io/worker=worker
- 安装网络插件
上传calico.yaml到master1(百度网盘下载的内容之一)
kubectl apply -f calico.yaml
kubectl get nodes
|