一、环境准备
服务器规划:
| 主机名 | IP地址 |
|---|---|
| master01 | 192.168.55.160 |
| node01 | 192.168.55.161 |
| node02 | 192.168.55.162 |
服务器要求:
- 建议最小硬件配置:4核CPU、6G及以上内存、30G及以上的硬盘。
- 服务器可以访问互联网, 能够联网下载镜像。
软件环境:( 注意检查版本是Centos7.9 )
| 软件 | 版本 |
|---|---|
| 操作系统 | Cent0S7.9_x64 |
| Docker | 20.10.24 |
| Kubernetes | 1.28 |
准备工作:切换 yum 源为阿里 (master01+node)
# 备份yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 切换 yum源 为阿里云
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
下载基础软件 (master01+node)
yum -y install vim
yum -y install wget
配置静态 IP 地址 (master01+node)
(注意每个节点配置时候 ip 地址要修改,网关要和自己的虚拟机一致)
| 主机名 | IP地址 |
|---|---|
| master01 | 192.168.55.160 |
| node01 | 192.168.55.161 |
| node02 | 192.168.55.162 |
- 修改网络配置文件(配置静态网络,可以参考下面图片)
网络配置文件位于 /etc/sysconfig/network-scripts/ 目录下,文件名格式为 ifcfg-<接口名>(如 ifcfg-ens33)。编辑对应的文件:
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static # 设置为静态 IP
NAME=ens33 # 接口名称
DEVICE=ens33 # 接口名称
ONBOOT=yes # 开机自动启动
IPADDR=192.168.55.160 # 静态 IP 地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.55.2 # 网关地址
DNS1=114.114.114.114 # 首选 DNS 服务器
DNS2=223.5.5.5 # 备用 DNS 服务器
- 重启网络服务并验证网络配置
# 重启网络服务使配置生效:
sudo systemctl restart network
# 检查 IP 地址是否生效:
ip add
二、开始每个节点的配置
注意事项: 以下1-9需要每个主机都配置,10,12,13,14只需在master上配置,11只需要node主机配置。
1. 设置主机名(分别设置)
将三台主机名分别设置为 master01 node01 node02
hostnamectl set-hostname master01
hostnamectl set-hostname node01
hostnamectl set-hostname node02
2. 配置 /etc/hosts 文件 (master01+node)
- 编辑
/etc/hosts文件,添加集群节点的 IP 和主机名映射:
#追加内容到 /etc/hosts 文件
echo "192.168.55.160 master01" >> /etc/hosts
echo "192.168.55.161 node01" >> /etc/hosts
echo "192.168.55.162 node02" >> /etc/hosts
3. 关闭防火墙并禁用SELinux (master01+node)
systemctl stop firewalld
systemctl disable firewalld
sed -i '/^SELINUX/s/enforcing/disabled/' /etc/selinux/config
setenforce 0
4. 禁用 Swap (master01+node)
# 临时关闭 Swap
swapoff -a
# 永久关闭 Swap
sed -ri 's/.*swap.*/#&/' /etc/fstab
# 验证 Swap 是否已关闭
free -h
5. 相关网络内核参数配置 (master01+node)
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
#使其生效
sysctl --system
6. 安装Docker-20.10.24 (master01+node)
- 安装指定版本--20.10.24版本
# 安装必要的一些系统工具
sudo yum install -y yum-utils
# 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查询 docker-ce 的可用版本
# yum list --showduplicates docker-ce
# 下载指定版本
yum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io
# 开启Docker服务并设置自启动
sudo service docker start
sudo systemctl enable docker
- 修改配置文件
在结尾处添加
"exec-opts": ["native.cgroupdriver=systemd"]
cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
"https://docker.xuanyuan.me",
"https://docker.1ms.run",
"https://docker.m.daocloud.io",
"https://atomhub.openatom.cn"
],
"exec-opts": ["native.cgroupdriver=systemd"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
7. 下载安装 cri-dockerd (master01+node)
# 下载 cri-dockerd
wget https://github.com/Mirantis/cri-dockerd/releases/download/v0.3.2/cri-dockerd-0.3.2-3.el7.x86_64.rpm
# 安装 cri-dockerd
rpm -ivh cri-dockerd-0.3.2-3.el7.x86_64.rpm
- 指定依赖镜像地址为国内镜像地址
sed -i '/^ExecStart=/ s|$| --pod-infra-container-image=registry.aliyuncs.com/google_containers/pause:3.9|' /usr/lib/systemd/system/cri-docker.service
- 使配置生效
# 使配置生效
systemctl daemon-reload
systemctl enable cri-docker
systemctl start cri-docker
8. 添加Kubernetes的阿里云镜像源 (master01+node)
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=1
repo_gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
9. 安装kubelet、kubeadm、kubectl (master01+node)
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable kubelet
10. 初始化Master节点(更改IP地址为自己的) (master01)
sudo kubeadm init \
--apiserver-advertise-address=192.168.55.160 \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.28.0 \
--service-cidr=10.96.0.0/12 \
--pod-network-cidr=192.168.0.0/16 \
--cri-socket=unix:///var/run/cri-dockerd.sock
- 初始化完成后,根据提示信息,拷贝kubectl工具认证文件到认路径
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
11. 将Node节点加入集群(node节点)
执行下面输出的"kubeadm join"命令,将本节点加入到Kuberrnetes集群中:
- sha256后面参数每次生成是不一样的。
- 需要在结尾处添加
--cri-socket=unix:///var/run/cri-dockerd.sock以后,复制到其他几个节点输入。
kubeadm join 192.168.55.160:6443 --token j7w0q2.5k7iu8duc3hp9hfz \
--discovery-token-ca-cert-hash sha256:e4677ff498e83195f129c13f0161206c3f6d8cdc77db158389bd4f46e93013b0 \
--cri-socket=unix:///var/run/cri-dockerd.sock
12. 安装网络组件(master节点)
- 这里使用Calico作为Kubernetes的网络插件,负责集群中网络通信。
# 下载 Calico 配置文件(以下wget链接二选一)
wget https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml
kubectl apply -f calico.yaml
- 查看安装状态(需要10分钟左右,需确保内存和空间充足)
kubectl get nodes
kubectl get nodes -o wide
# 全部running就行了
kubectl get pods -n kube-system
查看拉取的镜像都有哪些 kubectl get daemonset -n kube-system calico-node -o yaml | grep image:
13. 部署测试应用并访问 (master01)
1. 部署一个简单的Nginx应用:
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
2. 查看服务状态:
kubectl get services
kubectl get pods
kubectl get deployments
[root@master ~] kubectl get svc nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
nginx NodePort 10.111.140.102 <none> 80:30433/TCP 5
您已经成功创建了一个 Nginx 的 Deployment 并将其暴露为
NodePort类型的 Service。根据您的输出,Nginx 服务的NodePort是30433,这意味着您可以通过集群中任何节点的 IP 地址和端口30433访问 Nginx。
3. 访问 Nginx
使用查看节点的 IP 地址kubectl get nodes -o wide和 NodePort 端口(30433)访问 Nginx。您可以通过以下方式访问:
- 通过浏览器访问:在浏览器地址栏中输入
http://<节点IP>:30433
http://192.168.55.161:30433
- 通过 **
curl**命令在虚拟机中访问:
curl http://192.168.55.161:30433
14. 安装 Kubernetes Dashboard 可视化工具(可选)
暂时无法在飞书文档外展示此内容
# 安装 Kubernetes Dashboard
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 检查是否正常运行,需状态全都为running
kubectl get pods -n kubernetes-dashboard
- 创建 dashboard-admin 用户并授权
kubectl create serviceaccount dashboard-admin -n kubernetes-dashboard
kubectl create clusterrolebinding dashboard-admin --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:dashboard-admin
创建了一个名为
dashboard-admin的 ServiceAccount,位于kubernetes-dashboard命名空间。创建了一个名为
dashboard-admin的 ClusterRoleBinding,将dashboard-adminServiceAccount 绑定到cluster-admin角色。
- 获取用户 Token
kubectl create token dashboard-admin -n kubernetes-dashboard
- 修改 Service 类型为 NodePort
kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec":{"type":"NodePort"}}'
- 查看 Service 的 NodePort:
kubectl get svc -n kubernetes-dashboard
- 访问 Dashboard
通过 https://<节点IP>:30375 访问 Dashboard。
注意:请将 <节点IP> 替换为实际的 Kubernetes 节点 IP 地址。