Kubernetes (K8s) 集群部署指南:从环境准备到应用部署(初级)

3,011 阅读5分钟

一、环境准备

服务器规划:

主机名IP地址
master01192.168.55.160
node01192.168.55.161
node02192.168.55.162

服务器要求:

  • 建议最小硬件配置:4核CPU、6G及以上内存、30G及以上的硬盘。
  • 服务器可以访问互联网, 能够联网下载镜像。

软件环境:( 注意检查版本是Centos7.9 )

软件版本
操作系统Cent0S7.9_x64
Docker20.10.24
Kubernetes1.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地址
master01192.168.55.160
node01192.168.55.161
node02192.168.55.162
  1. 修改网络配置文件(配置静态网络,可以参考下面图片)

网络配置文件位于 /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 服务器

  1. 重启网络服务并验证网络配置
# 重启网络服务使配置生效:
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)

CentOS 7 环境下的 Docker 安装与配置

  • 安装指定版本--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 服务的 NodePort30433,这意味着您可以通过集群中任何节点的 IP 地址和端口 30433 访问 Nginx。

3. 访问 Nginx

使用查看节点的 IP 地址kubectl get nodes -o wideNodePort 端口(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-admin ServiceAccount 绑定到 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 地址。