Kubernetes(K8s)入门部署:用两台香港VPS搭建生产级容器编排集群

Kubernetes(K8s)是目前最主流的容器编排平台,可以自动化管理容器的部署、扩缩容、自愈和负载均衡。本文基于两台香港VPS,带你完成一个最小可用的K8s生产集群的搭建。

一、K8s核心架构简介

  • Master节点(控制平面):运行API Server、Scheduler、Controller Manager、etcd,负责整个集群的管理和调度
  • Worker节点:运行实际的业务容器(Pod),受Master调度和管理
  • Pod:K8s最小调度单元,一个Pod包含一个或多个容器
  • Service:为Pod提供稳定的访问入口,屏蔽Pod IP变化
  • Ingress:HTTP层的负载均衡器,将外部流量路由到不同的Service

二、服务器配置要求

角色最低配置推荐配置数量
Master节点2核2G4核4G1台
Worker节点2核2G4核8G1台起

两台服务器需要在同一内网(或能通过内网IP互通),IDC.Net支持同账号下多台服务器通过内网通信,避免跨公网传输集群内部流量。

三、所有节点通用准备

# 在所有节点(Master和Worker)执行以下操作

# 1. 关闭Swap(K8s要求)
swapoff -a
sed -i '/ swap / s/^/#/' /etc/fstab

# 2. 设置主机名(每台不同)
# Master节点:
hostnamectl set-hostname k8s-master
# Worker节点:
hostnamectl set-hostname k8s-worker1

# 3. 配置hosts(使用内网IP)
cat >> /etc/hosts << EOF 192.168.1.10 k8s-master 192.168.1.20 k8s-worker1 EOF # 4. 加载必要内核模块 cat > /etc/modules-load.d/k8s.conf << EOF overlay br_netfilter EOF modprobe overlay && modprobe br_netfilter # 5. 配置内核参数 cat > /etc/sysctl.d/k8s.conf << EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

四、安装容器运行时(containerd)

# 在所有节点安装containerd
apt update
apt install -y containerd

# 生成默认配置
mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

# 修改Cgroup驱动为systemd
sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 重启containerd
systemctl restart containerd
systemctl enable containerd

五、安装kubeadm、kubelet、kubectl

# 在所有节点执行
apt install -y apt-transport-https ca-certificates curl gpg

# 添加K8s软件源
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | \
  gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
  https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' \
  > /etc/apt/sources.list.d/kubernetes.list

apt update
apt install -y kubelet kubeadm kubectl
apt-mark hold kubelet kubeadm kubectl  # 锁定版本防止自动升级

systemctl enable kubelet

六、初始化Master节点

# 仅在Master节点执行
kubeadm init \
  --apiserver-advertise-address=Master节点内网IP \
  --pod-network-cidr=10.244.0.0/16 \
  --kubernetes-version=v1.29.0

# 初始化成功后,配置kubectl
mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

# 验证集群状态
kubectl get nodes

七、安装网络插件(Flannel)

# 在Master节点安装Flannel网络插件
kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

# 等待Flannel Pod就绪
kubectl get pods -n kube-flannel -w

# 确认Master节点状态变为Ready
kubectl get nodes

八、Worker节点加入集群

# 复制kubeadm init输出的join命令,在Worker节点执行
# 格式类似:
kubeadm join Master内网IP:6443 \
  --token xxxxx.xxxxxxxxxxxxxxxx \
  --discovery-token-ca-cert-hash sha256:xxxxxxxxxx

# 在Master节点验证Worker已加入
kubectl get nodes
# 输出:
# NAME          STATUS   ROLES           AGE   VERSION
# k8s-master    Ready    control-plane   10m   v1.29.0
# k8s-worker1   Ready              2m    v1.29.0

九、部署第一个应用

<code"># 创建Nginx部署
kubectl create deployment nginx --image=nginx:alpine --replicas=2

# 暴露为NodePort服务(外部可访问)
kubectl expose deployment nginx --port=80 --type=NodePort

# 查看分配的端口
kubectl get svc nginx
# 输出中NodePort列显示的端口(如 80:31234/TCP)

# 通过 http://Worker节点公网IP:31234 访问Nginx

十、安装Ingress控制器

<code"># 安装Nginx Ingress Controller
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.4/deploy/static/provider/baremetal/deploy.yaml

# 创建Ingress规则(将域名路由到服务)
cat > ingress.yaml << EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: app.yourdomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx
            port:
              number: 80
EOF

kubectl apply -f ingress.yaml

十一、常用管理命令速查

<code"># 查看所有Pod状态
kubectl get pods -A

# 查看Pod日志
kubectl logs -f Pod名称

# 进入Pod内部
kubectl exec -it Pod名称 -- /bin/sh

# 扩缩容
kubectl scale deployment nginx --replicas=5

# 滚动更新
kubectl set image deployment/nginx nginx=nginx:1.25

# 查看集群资源使用
kubectl top nodes
kubectl top pods

十二、总结

两台香港VPS搭建的最小K8s集群可以支撑中小规模的微服务应用,完整部署过程约1~2小时。对于更高可用性需求,可以扩展为3个Master节点的HA集群。IDC.Net的香港VPS支持同账号多台服务器内网互通,是搭建K8s集群的理想基础设施,4核8G配置的Worker节点可以运行10~20个中小型Pod。

THE END