结合网上资料,借助k8s最后直接支持docker的版本1.23.17搭建,并本地验证完成。
1虚拟机打算1.1规划系统角色/hostnameIP地址配置
CentOS7.9(须要7.5+)
master
192.168.68.100
2Core、4G显存、40GBc盘
CentOS7.9(须要7.5+)
node1
192.168.68.101
2Core、4G显存、40GBc盘
CentOS7.9(须要7.5+)
node2
192.168.68.102
2Core、4G显存、40GBc盘
1.2虚拟机安装
使用VMWareWorkstation17
1.1.1新建虚拟机
选择自定义,稍后安装系统
1.1.2配置虚拟机
开启虚拟机,选择直接安装,软件选择时,选择基础设施服务器,安装位置默认即可
接出来是网路设置,设置固定IP,DNS使用阿里云的公共DNS:223.5.5.5,保存后利用虚拟机安装linux,同时修改左下角主机名为对应名称即可,对应:master、node1、node2
配置完成,即可开始安装,并设置系统密码
2环境初始化
所有服务器节点都须要执行,使用xshell时查看linux是什么系统,可以:工具-->发送键输入到所有会话,这样就是同时操作多个服务器
2.1查看版本
确保版本>=7.5,本次使用的是7.9
cat /etc/redhat-release
2.2配置主机名解析
便捷集群间直接调用
cat>>/etc/hosts<<EOF
192.168.68.100 master
192.168.68.101 node1
192.168.68.102 node2
EOF
2.3时间同步
k8s要求集群内节点时间精确一致。这儿使用chronyd进行时间同步,也可以使用ntpntpdate
systemctl start chronyd && systemctl enable chronyd
2.4关掉防火墙
kubernetes和docker在运行中会形成大量的iptables规则,为了不让系统规则跟它们混淆,直接关掉系统的规则
systemctl stop firewalld && systemctl disable firewalld
# 以下在 centos7 上未启用,可不做处理
systemctl stop iptables && systemctl disable iptables
2.5禁用selinux
selinux是linux系统下的一个安全服务,假如不关掉它,在安装集群中会形成各类各样的雷人问题
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
2.6禁用swap分区
swap分区指的是虚拟显存分区,它的作用是在化学显存使用完以后,将c盘空间虚拟成显存来使用
启用swap设备会对系统的性能形成极其负面的影响,因而kubernetes要求每位节点都要禁用swap设备
然而若果由于个别缘由确实不能关掉swap分区,就须要在集群安装过程中通过明晰的参数进行配置说明
swapoff -a && sed -i '/ swap / s/^(.*)$/#1/g' /etc/fstab
2.7更改内核参数和模块
更改linux的内核参数,添加集线器过滤和地址转发功能
cat < /etc/sysctl.d/kubernetes.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
重新加载使内核参数配置生效
sysctl --system && modprobe br_netfilter && lsmod | grep br_netfilter
2.8ipset和ipvsadm
在kubernetes中service有两种代理模型,一种是基于iptables的,一种是基于ipvs的
二者比较的话红帽子linux下载,ipvs的性能显著要高一些,而且假如要使用它,须要自动载入ipvs模块
yum install ipset ipvsadm -y
编辑须要添加的模块脚本
cat <<EOF> /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_ipv4
EOF
添加执行权限,并执行脚本
# 添加执行权限
chmod +x /etc/sysconfig/modules/ipvs.modules
# 执行脚本
/bin/bash /etc/sysconfig/modules/ipvs.modules
# 查看是否加载成功
lsmod | grep -e ip_vs -e nf_conntrack_ipv4
2.9重启服务器
reboot
3安装docker
在所有服务器节点执行
3.1打算
# 更新yum
yum update
# 卸载旧版docker
yum remove docker docker-common docker-selinux docker-engine
# 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 或者使用阿里云的镜像源
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
3.2安装
这儿安装的是20.10.24版本
yum -y install docker-ce-20.10.24-3.el7 docker-ce-cli-20.10.24-3.el7 containerd.io
3.3配置镜像地址
这儿配置的北大镜像
Docker在默认情况下使用的CgroupDriver为cgroupfs,而kubernetes推荐使用systemd来取代cgroupfs
mkdir /etc/docker && cat <<EOF> /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]
}
EOF
3.4开机自启动
systemctl start docker && systemctl enable docker
4kubernetes安装
在所有服务器节点执行
4.1配置镜像源
因为kubernetes的镜像源在美国,速率比较慢,这儿切换成国内的镜像源
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=1
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
4.2安装指定版本
安装kubeadm、kubelet和kubectl,这儿安装的是1.23.17版本
yum -y install kubelet-1.23.17 kubeadm-1.23.17 kubectl-1.23.17
4.3配置
配置kubelet的cgroup,与3.3配置相同:systemd
cat>/etc/sysconfig/kubelet<<EOF
KUBELET_CGROUP_ARGS="--cgroup-driver=systemd"
KUBE_PROXY_MODE="ipvs"
EOF
4.4开机自启kubelet
启动不先启动,由于前面的安装过程中会手动启动
systemctl enable kubelet
5集群安装
以下在所有服务器都要执行
kubernetes默认CA证书为10年,其他证书为一年,须要更改可参考:,更改完成再进行以下操作,无需更改可无视,这儿我打包了一个100年的,k8s1.23.17版本kubeadm100年CA有效期,只须要1个积分,须要的可以下载
5.1打算集群镜像
因为网路缘由,未能联接,下边提供了一种取代方案,直接使用阿里云镜像
kubeadm config images pull --image-repository=registry.aliyuncs.com/google_containers
下边开始对集群进行初始化,并将node节点加入到集群中
以下只在master服务器上执行
5.2创建集群
kubeadm init
--kubernetes-version=v1.23.17
--pod-network-cidr=10.244.0.0/16
--service-cidr=10.96.0.0/12
--apiserver-advertise-address=192.168.68.100 --image-repository=registry.aliyuncs.com/google_containers
5.3创建必要文件
上面集群创建成功后,命令行会提示以下信息
mkdir -p $HOME/ .kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
以下只在node服务器上执行
5.4node节点加入集群
以下这个命令,是5.1创建集群成功后,会提示的一个命令,注意查看提示
kubeadm join 192.168.68.100:6443 --token 8587uc.o8knircuri8etnw2
--discovery-token-ca-cert-hash sha256:acc37967fb5b0acf39d7598f8a439cc7de88f439a3f4d0c9cae88e7901b9d3f
6网路插件安装
以下在master节点执行
查看各个节点的状态kubectlgetnodes,全部都是notready状态,须要安装网路插件。k8s支持多种网路插件,如flannel,calico,canal等利用虚拟机安装linux,这儿选择flannel。
wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
若未能访问,可直接去GitHub下载
https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml
这儿放在root目录下,然后再使用配置文件启动fannel
kubectl apply -f kube-flannel.yml
稍等片刻,再度查看node状态,发觉为ready
kubectl get nodes
至此,集群环境搭建完成
7验证集群
接入master节点,布署一个nginx进行测试
#部署nginx
kubectl create deployment nginx --image=nginx:1.18-alpine
#暴露端口
kubectl expose deployment nginx --port=80 --type=NodePort
kubectl get pod,svc
获取到布署信息如下
可以发觉port=32673,用浏览器访问master:port或node1:port或node2:port都可以步入nginx主页
文章评论