快速搭建
- 安装要求
在开始之前,部署Kubernetes集群机器需要满足以下几个条件:
3台以上机器,操作系统 CentOS7.7以上64位系统
硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘20GB或更多
集群中所有机器之间网络互通
可以访问外网,需要拉取镜像
禁止swap分区 - 部署内容
kubernetes1.28.0版本,docker21.1.1版本
在所有节点上安装Docker和kubeadm,kubenet
部署Kubernetes Master
部署容器网络插件
部署 Kubernetes Node,将节点加入Kubernetes集群中 - 准备环境
这里我准备了三台虚拟机,都是centos7的镜像,推荐大家使用远程工具MobaXterm连接,方便我们操作虚拟机
ip: 192.168.230.167 主机名:k8s-master 配置:2核2G 20G
ip: 192.168.230.168 主机名:k8s-node1 配置:2核2G 20G
ip: 192.168.230.169 主机名:k8s-node2 配置:2核2G 20G
配置静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
把dhcp改成static //这里是动态变静态
在文件最下方添加
IPADDR=192.168.230.167 //这是我masterip
NETMASk=255.255.255.0 //这是子网掩码
GATEWAY=192.168.230.2 //这是网关
DNS1=8.8.8.8 //这是域名解析器 -
开始搭建
这里我们用MobaXterm连接虚拟机,三台同时操作在master主机添加hosts cat >> /etc/hosts << EOF 192.168.230.167 k8s-master 192.168.230.168 k8s-node1 192.168.230.169 k8s-node2 EOF 关闭防火墙 systemctl stop firewalld systemctl disable firewalld 禁用iptables systemctl stop iptables systemctl disable iptables 关闭selinux sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久 setenforce 0 # 临时 关闭swap swapoff -a # 临时 sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久 # 将桥接的IPv4流量传递到iptables的链 cat <
/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 # 时间同步 yum install ntpdate -y ntpdate time.windows.com 注意:虚拟机不管关机还是挂起,每次重新操作都需要更新时间进行同步。 #reboot重启 -
三个节点安装Docker/kubeadm/kubelet
dokcer安装 #安装docker以及依赖库 sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # 启动docker sudo systemctl start docker # 设置docker开机启动 sudo systemctl enable docker # 验证出现 running即成功 sudo systemctl status docker #安装cri-dockerd k8s 1.24版本后需要使用cri-dockerd和docker通信 #下载cri-dockerd # 若没有wget,则执行 sudo yum install -y wget # 下载(建议开个加速外网的,不然下载不了) sudo wgethttps://github.com/Mirantis/cri- dockerd/releases/download/v0.3.4/cri-dockerd-0.3.4-3.el7.x86_64.rpm # 安装 sudo rpm -ivh cri-dockerd-0.3.4-3.el7.x86_64.rpm # 重载系统守护进程 sudo systemctl daemon-reload #设置镜像加速 sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://c12xt3od.mirror.aliyuncs.com"] } EOF #修改配置文件 vi /usr/lib/systemd/system/cri-docker.service 修改第十行改为 ExecStart=/usr/bin/cri-dockerd --network- plugin=cni --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.7 # 重载系统守护进程 sudo systemctl daemon-reload # 设置cri-dockerd自启动 sudo systemctl enable cri-docker.socket cri-docker # 启动cri-dockerd sudo systemctl start cri-docker.socket cri-docker # 检查Docker组件状态 sudo systemctl status docker cir-docker.socket cri-docker 安装Kubelet,kubeadm,kubectl yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0 #安装runc(所有节点执行) # 下载 runc.amd64(建议开外网加速,不然很慢) sudo wget https://github.com/opencontainers/runc/releases/download/v1.1.9/runc.amd64 # 安装 sudo install -m 755 runc.amd64 /usr/local/bin/runc # 验证 runc -v 6. 部署集群 **初始化集群,只在master节点** kubeadm init --node-name=k8s-master --image-repository=registry.aliyuncs.com/google_containers --cri-socket=unix:///var/run/cri-dockerd.sock --apiserver-advertise-address=192.168.230.167 --pod-network-cidr=10.244.0.0/16 --service-cidr=10.96.0.0/12 --apiserver-advertise-address 集群通告地址,也就是masterip --image-repository 由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址 --kubernetes-version K8s版本,与上面安装的一致 --service-cidr 集群内部虚拟网络,Pod统一访问入口 --pod-network-cidr Pod网络,与下面部署的CNI网络组件yaml中保持一致 # 初始化成功后运行下面的命令 mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config # master节点执行 配置文件的复制(为了在node节点可以使用kubectl相关命令) scp /etc/kubernetes/admin.conf 192.168.230.168:/etc/kubernetes/ scp /etc/kubernetes/admin.conf 192.168.230.169:/etc/kubernetes/ #node节点 # 到node节点检查admin.conf文件是否传输完成 ls /etc/kubernetes/ 显示admin.conf manifests # 将admin.conf加入环境变量,直接使用永久生效 echo "export KUBECONFIG=/etc/kubernetes/admin.conf" >> ~/.bash_profile # 加载 source ~/.bash_profile # ---------------------------------加入集群------------------------------------- #在master节点执行 kubeadm init成功后,会出现 kubeadm join xxx xxx的命令,直接复制到node节点执行就好。 #下面是若没有复制到kubeadm join的命令或者是想要在集群中加入新节点, #则先在master执行,获取token 和 discovery-token-ca-cert-hash。 #获取 token 参数 kubeadm token list # 查看已有 token kubeadm token create # 没有token则执行,创建新的 TOKEN #获取 discovery-token-ca-cert-hash 参数 openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //' #node节点执行 kubeadm join # 修改获取的 token 和 discovery-token-ca-cert-hash 后,再执行 kubeadm join 192.168.230.167:6443 --token 1qetgz.ugw5whz9fl8yvf3r --discovery-token-ca-cert-hash sha256:802271a2c3f17e3df09b2054b9f21e3dffea1ea9e87ac20bd5765736812d78b8 --cri-socket unix:///var/run/cri-dockerd.sock #安装flannel插件(轻量级用于快速搭建使用,初学推荐,开外网加速下载) sudo wget https://github.com/flannel-io/flannel/releases/download/v0.22.3/kube-flannel.yml # 执行 kubectl apply -f kube-flannel.yml 测试集群 # 下面一般在master节点执行,若node节点可以使用kubectl命令,也可以在node节点上操作 kubectl get nodes kubectl get pod -A 使用nginx测试 vi nginx-deployment.yaml #这是写入的代码 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: -name: http port: 80 targetPort: 80 nodePort: 30080 type: NodePort #运行 kubectl apply -f nginx-deployment.yaml kubectl get pod,svc |grep nginx
7.访问网站nginx(自己的ip+刚刚写的30080)