江小南

V1

2022/06/12阅读:19主题:默认主题

kubernetes集群搭建

前提条件

k8s需要容器化的运行环境,所以我们首先需要安装Docker,具体可以参考之前的文章。

Docker安装,环境配置说明

kubeadm方式搭建集群

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具,这个工具能通过两条指令完成一个kubernetes集群的部署。

  • 第一、创建一个Master节点
kubeadm init
  • 第二、将Node节点加入到当前集群中
kubeadm join <Master节点的IP和端口>

1. 初始化工作

这里准备了两台虚拟机做演示。

节点属性 ip
master 192.168.237.149
node1 192.168.237.150
  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 各个机器设置自己的域名
hostnamectl set-hostname xxxx
  • 将 SELinux 设置为 permissive 模式(相当于将其禁用)
sudo setenforce 0  # 临时
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config  # 永久
  • 关闭swap
swapoff -a   # 临时
sed -ri 's/.*swap.*/#&/' /etc/fstab  # 永久
  • 允许 iptables 检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
  • 使配置生效
sudo sysctl --system

以上这些命令在每台机器上都需要执行。

2. 安装kubelet、kubeadm、kubectl

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
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
EOF
yum install -y kubelet-1.20.9 kubeadm-1.20.9 kubectl-1.20.9  # 指定版本,根据需要选择
systemctl enable kubelet   # 设置开机启动
systemctl enable kubelet --now kubelet # 立即启动

以上这些命令在每台机器上都需要执行。

通过systemctl status kubelet可以看到kubelet 现在每隔几秒就会重启,因为它陷入了一个等待 kubeadm 指令的死循环。(正常情况,因为在等待指令)

3. 使用kubeadm引导集群安装

  • 下载各个机器需要的镜像
sudo tee ./images.sh <<-'EOF'
#!/bin/bash
images=(
kube-apiserver:v1.20.9
kube-proxy:v1.20.9
kube-controller-manager:v1.20.9
kube-scheduler:v1.20.9
coredns:1.7.0
etcd:3.4.13-0
pause:3.2
)
for imageName in ${images[@]} ; do
docker pull registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/$imageName
done
EOF

生成images.sh文件,里面包含我们需要的镜像。

chmod +x ./images.sh && ./images.sh # 赋予权限并执行。

以上这些命令在每台机器上都需要执行。

可以看到我们需要的镜像已经下载完毕。

[root@master ~]# docker images
REPOSITORY                                                                 TAG        IMAGE ID       CREATED         SIZE
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-proxy                v1.20.9    8dbf9a6aa186   10 months ago   99.7MB
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-apiserver            v1.20.9    0d0d57e4f64c   10 months ago   122MB
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-controller-manager   v1.20.9    eb07fd4ad3b4   10 months ago   116MB
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/kube-scheduler            v1.20.9    295014c114b3   10 months ago   47.3MB
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/etcd                      3.4.13-0   0369cf4303ff   20 months ago   253MB
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/coredns                   1.7.0      bfe3a36ebd25   23 months ago   45.2MB
registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/pause                     3.2        80d28bedfe5d   2 years ago     683kB
[root@master ~]# 

4. 初始化主节点

  • 所有机器添加master域名映射,以下需要修改为自己的
echo "192.168.237.149 cluster-endpoint" >> /etc/hosts

这就相当于告诉每个节点哪一个才是主节点(每个节点都需要执行)。

做完这一步我们发现通过域名在node节点是可以ping通master节点的。

[root@node1 ~]# ping cluster-endpoint
PING cluster-endpoint (192.168.237.149) 56(84) bytes of data.
64 bytes from cluster-endpoint (192.168.237.149): icmp_seq=1 ttl=64 time=0.435 ms
64 bytes from cluster-endpoint (192.168.237.149): icmp_seq=2 ttl=64 time=0.449 ms
^C
--- cluster-endpoint ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.373/0.419/0.449/0.033 ms
[root@node1 ~]# 
  • 主节点初始化
kubeadm init \
--apiserver-advertise-address=192.168.237.149 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16


kubeadm init \
--apiserver-advertise-address=192.168.237.149 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images \
--kubernetes-version v1.20.9 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=192.168.0.0/16

这个命令只在主节点执行。

192.168.237.149修改为主节点ip。10.96.0.0/12是server ip段,10.244.0.0/16是pod ip段。需要注意的是server和pod的ip段不能重叠,同时不能和机器的ip段重叠(所有网络范围不重叠)。

分类:

后端

标签:

云计算

作者介绍

江小南
V1