一、准备环境
服务器规划:
角色 | IP地址 |
k8s-master | 192.168.1.71 |
k8s-node1 | 192.168.1.72 |
k8s-node2 | 192.168.1.73 |
服务器要求:
- 建议最小硬件配置:2核CPU、2G内存、20G硬盘。
- 服务器可以访问互联网,会联网下载镜像。
软件环境:
软件 | 版本 |
操作系统 | CentOS7.9_x64 |
Docker | 24.0.0(CE) |
Kubernetes | 1.28 |
二、初始化配置
# 关闭Selinux
~]# sed -i 's/enforcing/disabled/' /etc/selinux/config # 永久~]# setenforce 0 # 临时
# 关闭Swap
~]# swapoff -a # 临时~]# sed -ri 's/.*swap.*/#&/' /etc/fstab # 永久
# 根据规划设置主机名
~]# hostnamectl set-hostname <hostname>
# 确保网络桥接的数据包经过Iptables处理,启用相关的内核参数
~]# cat > /etc/sysctl.d/k8s.conf << EOFnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1EOF~]# sysctl --system # 生效
三、安装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~]# systemctl enable docker && systemctl start docker
配置镜像下载加速器和设置Cgroup驱动:
~]# cat > /etc/docker/daemon.json << EOF{"registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"],"exec-opts": ["native.cgroupdriver=systemd"]}
EOF~]# systemctl restart docker~]# docker info
安装cri-dockerd(Docker与Kubernetes通信的中间程序):
~]# wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm
~]# rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
指定依赖镜像地址为国内镜像地址:
~]# vi /usr/lib/systemd/system/cri-docker.service
ExecStart=/usr/bin/cri-dockerd --container-runtime-endpoint fd:// --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9~]# systemctl daemon-reload
~]# systemctl enable cri-docker && systemctl start cri-docker
四、部署Kubernetes集群
4.1 添加阿里云YUM软件源
~]# cat > /etc/yum.repos.d/kubernetes.repo << EOF[kubernetes]name=Kubernetesbaseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64enabled=1gpgcheck=0repo_gpgcheck=0gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpgEOF
4.2 安装kubeadm,kubelet和kubectl
~]# yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0~]# systemctl enable kubelet
4.3 初始化Master节点(前提必须先执行 swapoff –a )
~]# kubeadm init \--apiserver-advertise-address=192.168.1.71 \--image-repository registry.aliyuncs.com/google_containers \--kubernetes-version v1.28.0 \--service-cidr=10.96.0.0/12 \--pod-network-cidr=10.244.0.0/16 \--cri-socket=unix:///var/run/cri-dockerd.sock
初始化完成后,根据提示信息,拷贝kubectl工具认证文件到默认路径:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
使用kubectl工具查看节点状态:
~]# kubectl get nodesNAME STATUS ROLES AGE VERSIONk8s-master NotReady control-plane 20s v1.28.0
注:由于网络插件还没有部署,节点会处于“NotReady”状态。
4.4 将Node节点加入集群
执行上述输出的“kubeadm join”命令,将本节点加入到Kubernetes集群中:
~]# kubeadm join 192.168.1.71:6443 --token 7gqt13.kncw9hg5085iwclx \--discovery-token-ca-cert-hash sha256:66fbfcf18649a5841474c2dc4b9ff90c02fc05de0798ed690e1754437be35a01 --cri-socket=unix:///var/run/cri-dockerd.sock
4.5 安装网络组件
这里使用Calico作为Kubernetes的网络插件,负责集群中网络通信。
创建Calico网络组件的资源:
~]# kubectl create -f tigera-operator.yaml
~]# kubectl create -f custom-resources.yaml
应用完成后,等待5分钟后,查看Pod运行状态:
kubectl get pods -n calico-system
注:如果Pod处于“ContainerCreating”状态说明在下载镜像中,需耐心等待~
4.6 安装Dashboard
Dashboard是官方提供的一个UI,可用于基本管理K8s资源。
~]# kubectl apply -f kubernetes-dashboard.yaml~]# kubectl get pods -n kubernetes-dashboard
浏览器访问“https://<节点IP地址>:30001”,将看到Dashboard登录界面。
创建服务账号并授权管理员权限:
# 创建用户
~]# kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
# 用户授权
~]# kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
# 获取用户Token
~]# kubectl create token dashboard-admin -n kubernetes-dashboard
使用输出的Token登录Dashboard,将进入到首页,如图所示:
至此,Kubernetes集群部署完成。
如果出现报错 清理
kubeadm reset -fmodprobe -r ipiplsmodrm -rf ~/.kube/rm -rf /etc/kubernetes/rm -rf /etc/systemd/system/kubelet.service.drm -rf /etc/systemd/system/kubelet.servicerm -rf /usr/bin/kube*rm -rf /etc/cnirm -rf /opt/cnirm -rf /var/lib/etcdrm -rf /var/etcdyum remove kubeadmyum remove kubeletyum clean allyum remove kube*
#如果上面的令牌忘记了,或者新的node节点加入,在master上执行下面的命令,生成新的令牌
如果连接错误的话
方法一:重新创建token,token可能过期
kubeadm token create --print-join-command
方法二:selinux或防护墙
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
systemctl disable firewalld --now
如果遇到[preflight] Running pre-flight checks
[WARNING Hostname]: hostname "node3" could not be reached
[WARNING Hostname]: hostname "node3": lookup node3 on 192.168.235.2:53: no such host
在 Linux 系统中,编辑 /etc/hosts 文件可以使用常见的文本编辑器,如 vi 或 vim、nano ,以下是具体操作步骤:
使用 vi 编辑器:
- 打开 /etc/hosts 文件:在命令行输入 vi /etc/hosts,按下回车键后,文件内容会显示在终端。
- 进入编辑模式:按 i 键,此时屏幕左下角会显示 -- INSERT --,表示进入了编辑模式。
- 添加映射:移动光标到文件的最后一行,输入 192.168.235.130 k8s-master 。