环境

软硬件说明
宿主机win11
vmware17
centos(使用 cat /etc/redhat-release 查看)centos Linux Release 7.9.2009(core)
linux内核(使用uname -r查看)3.10.0-1160.e17.x86_64
虚拟机说明
192.168.134.130k8s-master
192.168.134.131k8s-node1

搭建k8s每台虚拟机需要至少配置2个cpu和2g内存,本实验搭建了一台master节点,一台node节点,若需增设node,操作同理。

1.前期准备(所有设备)

1.1 添加主机名与对应角色

在/etc/hosts文件内增加master和node1的相关信息

vi /etc/hosts

在这里插入图片描述

1.2 更改设备主机名

分别修改master和node1的主机名

hostnamectl set-hostname k8s-master-130

hostnamectl set-hostname k8s-node1-131

1.3 关闭防火墙

systemctl stop firewalld #关闭防火墙

systemctl disable firewalld #开机禁用防火墙

在这里插入图片描述

1.4 关闭SELinux

安全增强型Linux(SELinux)是一个Linux内核的功能,它提供支持访问控制的安全政策保护机制。记录操作如何关闭SELinux,并且避免系统无法启动的问题。


#临时关闭selinux
**setenforce 0 

#修改配置文件,永久关闭selinux
sed -i 's/SELINUX=permissive/SELINUX=disabled/' /etc/sysconfig/selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

在这里插入图片描述

1.5 禁用交换分区

#临时禁用
swapoff -a
#永久禁用,注释掉/etc/fstab最后一行
sed -i 's/.*swap.*/#&/' /etc/fstab 

在这里插入图片描述

1.6 将桥接的IPv4流量传递到iptables的链

cat <<EOF >  /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness = 0
EOF

最后使上述配置生效

sysctl --system

在这里插入图片描述

1.7 开启ipvs

● 在kubernetes中service有两种代理模型,一种是基于iptables,另一种是基于ipvs的。ipvs的性能要高于iptables的,但是如果要使用它,需要手动载入ipvs模块。
● 在每个节点安装ipset和ipvsadm:

yum -y install ipset ipvsadm

在所有节点执行如下脚本:

cat > /etc/sysconfig/modules/ipvs.modules <<EOF
#!/bin/bash
modprobe -- ip_vs
modprobe -- ip_vs_rr
modprobe -- ip_vs_wrr
modprobe -- ip_vs_sh
modprobe -- nf_conntrack_ipv4
EOF

授权、运行、检查是否加载:

chmod 755 /etc/sysconfig/modules/ipvs.modules && bash /etc/sysconfig/modules/ipvs.modules && lsmod | grep -e ip_vs -e nf_conntrack_ipv4

检查是否加载:

lsmod | grep -e ipvs -e nf_conntrack_ipv4

1.8 设备重启

2.安装docker(所有设备)

Docker是开发人员和系统管理员使用容器开发、部署和运行应用程序的平台。

Docker将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。

有了Docker,就不用担心环境问题。Docker的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。

docker安装:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce-18.06.3.ce-3.el7

启动docker

systemctl enable docker && systemctl start docker
docker version

在这里插入图片描述

设置Docker镜像加速器:

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "exec-opts": ["native.cgroupdriver=systemd"],	
  "registry-mirrors": ["https://du3ia00u.mirror.aliyuncs.com"],	
  "live-restore": true,
  "log-driver":"json-file",
  "log-opts": {"max-size":"500m", "max-file":"3"},
  "storage-driver": "overlay2"
}
EOF

在这里插入图片描述

sudo systemctl daemon-reload
sudo systemctl restart docker

3.安装kubeadm,kubelet 和 kubectl(所有设备)

添加k8s的阿里云YUM源

# 执行配置k8s阿里云源
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

在这里插入图片描述

安装kubeadm、kubectl、kubelet

# 安装kubeadm、kubectl、kubelet
yum install -y kubelet-1.18.0 kubeadm-1.18.0 kubectl-1.18.0
# 启动kubelet服务
systemctl enable kubelet && systemctl start kubelet

为了实现Docker使用的cgroup drvier和kubelet使用的cgroup drver一致,建议修改"/etc/sysconfig/kubelet"文件的内容:

vim /etc/sysconfig/kubelet
# 修改
KUBELET_EXTRA_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"

设置为开机自启动即可,由于没有生成配置文件,集群初始化后自动启动:

systemctl enable kubelet

4.master节点初始化

查看k8s需要的镜像

kubeadm config images list

在这里插入图片描述

master节点初始化,生成节点加入口令

# 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里需要指定阿里云镜像仓库地址
kubeadm init \
  --apiserver-advertise-address=192.168.18.100 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.18.0 \
  --service-cidr=10.96.0.0/12 \
  --pod-network-cidr=10.244.0.0/16

–apiserver-advertise-address 集群通告地址
–image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址
–kubernetes-version K8s版本,与上面安装的一致
–service-cidr 集群内部虚拟网络,Pod统一访问入口
–pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致
在这里插入图片描述

上面操作完成之后,会提示完成以下操作

# 上面安装完成后,k8s会提示你输入如下命令,执行
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 token create --print-join-command

此时,master节点操作结束,可使用如下命令查看节点信息:

kubectl get nodes

5.node加入集群

根据在master节点得到的集群加入命令,复制命令在node1上执行,加入集群

kubeadm join 192.168.134.130:6443 --token 6rrpc8.aupp8v1bg0j0rww3 \
    --discovery-token-ca-cert-hash sha256:398a246d29e3564e1737937498050719bfce04ebffc6f2273bf00e2420d30629

在这里插入图片描述

在master查看节点信息kubectl get nodes

在这里插入图片描述

部署容器网络

加入集群后,各类节点还是处于NotReady的状态,kubernetes支持多种网络插件,比如flannel、calico、canal等,任选一种即可,
在Master节点上获取flannel配置文件(可能会失败,如果失败,请下载到本地,然后安装):

kubectl apply -f calico.yaml

在这里插入图片描述

查看部署CNI网络插件进度:

kubectl get pods -n kube-system

在这里插入图片描述

查看集群健康状况:

kubectl get cs
kubectl cluster-info

在这里插入图片描述

稍等即发现节点均ready
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐