2. 环境准备:Kubernetes集群搭建、安装Argo CD、安装Knative Serving与Eventing

本章是实战课程的基石。我们将从零搭建一套可用于生产模拟的Kubernetes集群,并依次安装Argo CD、Knative Serving与Knative Eventing三个核心组件。所有操作均基于Kubernetes v1.28+与Helm v3,确保版本兼容性与后续故障恢复场景的可复现性。

环境建议:推荐使用3节点(1 Master + 2 Worker)的集群配置,每节点至少2核CPU、4GB内存。若使用本地虚拟机或云主机,请确保节点间网络互通且DNS解析正常。

2.1 Kubernetes集群搭建

我们采用kubeadm工具进行集群初始化。以下步骤适用于Ubuntu 22.04 LTS或CentOS 7.9+环境。

2.1.1 基础环境配置(所有节点)

# 关闭交换分区
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

sudo modprobe overlay
sudo modprobe br_netfilter

# 设置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

sudo sysctl --system

2.1.2 安装容器运行时(所有节点)

使用containerd作为CRI运行时,配置systemd cgroup驱动。

# 安装 containerd
sudo apt-get update && sudo apt-get install -y containerd

# 生成默认配置并修改
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml

# 修改 SystemdCgroup = true
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml

# 重启 containerd
sudo systemctl restart containerd
sudo systemctl enable containerd

2.1.3 安装kubeadm/kubelet/kubectl(所有节点)

sudo apt-get install -y apt-transport-https ca-certificates curl gpg

curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | sudo 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.28/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

sudo apt-get update
sudo apt-get install -y kubelet=1.28.0-1.1 kubeadm=1.28.0-1.1 kubectl=1.28.0-1.1
sudo apt-mark hold kubelet kubeadm kubectl

2.1.4 初始化控制平面(Master节点)

# 初始化集群,--pod-network-cidr 根据CNI插件调整
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --apiserver-advertise-address=<MASTER_IP>

# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装Calico CNI
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

2.1.5 加入工作节点(Worker节点)

# 在Worker节点执行Master初始化输出的join命令
sudo kubeadm join <MASTER_IP>:6443 -- <> --discovery--ca-cert-hash sha256:<HASH>
验证集群:在Master节点执行 kubectl get nodes,所有节点状态应为 Ready。

2.2 安装Argo CD

Argo CD将作为GitOps控制器,负责Knative服务的声明式部署与故障恢复驱动。

2.2.1 创建命名空间并安装

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

2.2.2 暴露Argo CD API Server

将Service类型改为NodePort或LoadBalancer,便于后续访问。

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'

# 获取初始admin密码
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

2.2.3 安装Argo CD CLI(可选但推荐)

curl -sSL -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
chmod +x /usr/local/bin/argocd
安全提示:生产环境请配置TLS证书并禁用默认的admin密码。本课程实验环境可暂用HTTP+admin登录。

2.3 安装Knative Serving

Knative Serving提供Serverless工作负载的自动伸缩与流量管理能力。

2.3.1 安装Knative Serving核心组件

# 安装Serving CRDs与核心控制器
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.11.0/serving-crds.yaml
kubectl apply -f https://github.com/knative/serving/releases/download/knative-v1.11.0/serving-core.yaml

2.3.2 安装网络层(Kourier)

kubectl apply -f https://github.com/knative/net-kourier/releases/download/knative-v1.11.0/kourier.yaml

# 将Kourier设置为默认网络层
kubectl patch configmap/config-network \
  -n knative-serving \
  --type merge \
  -p '{"data":{"ingress-class":"kourier.ingress.networking.knative.dev"}}'

2.3.3 配置DNS(使用sslip.io)

# 配置Knative使用sslip.io作为DNS后缀
kubectl patch configmap/config-domain \
  -n knative-serving \
  --type merge \
  -p '{"data":{"sslip.io":""}}'
注意:如果使用自定义域名,请确保DNS解析指向Kourier Gateway的External IP。本课程使用sslip.io简化实验环境。

2.4 安装Knative Eventing

Knative Eventing提供事件驱动架构的核心能力,包括Broker、Trigger、Source等资源。

2.4.1 安装Eventing核心组件

# 安装Eventing CRDs与核心控制器
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.11.0/eventing-crds.yaml
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.11.0/eventing-core.yaml

2.4.2 安装默认Broker(InMemoryChannel)

# 安装InMemoryChannel
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.11.0/in-memory-channel.yaml

# 安装MT-Channel-Based Broker
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.11.0/mt-channel-broker.yaml

2.4.3 安装PingSource(用于模拟故障触发事件)

# PingSource作为定时事件源,用于后续故障恢复测试
kubectl apply -f https://github.com/knative/eventing/releases/download/knative-v1.11.0/ping-source.yaml

2.5 环境验证清单

完成上述安装后,请使用下表逐项验证环境状态。

组件 验证命令 预期结果
Kubernetes集群 kubectl get nodes 所有节点状态为 Ready
Argo CD kubectl get pods -n argocd 所有Pod状态为 Running
Knative Serving kubectl get pods -n knative-serving 所有Pod状态为 Running
Knative Eventing kubectl get pods -n knative-eventing 所有Pod状态为 Running
Kourier Gateway kubectl get svc -n kourier-system External IP或NodePort可访问

2.6 整体架构关系图

下图展示了本章搭建的各个组件之间的逻辑关系与数据流向,为后续故障恢复场景提供全局视角。

环境准备:组件架构关系图 环境准备:组件架构关系图 Kubernetes 集群 (v1.28+) Argo CD GitOps 控制器 Application / AppProject Knative Serving Service / Revision 自动伸缩 / 流量管理 Knative Eventing Broker / Trigger PingSource / SinkBinding Kourier Ingress Gateway 流量入口 同步部署 事件触发 流量转发 事件源管理 说明 Argo CD 通过 GitOps 管理 Knative Serving 与 Eventing 资源; Eventing 接收外部事件并触发 Serving 服务伸缩;Kourier 作为统一流量入口。

2.7 常见问题与避坑指南

  • Pod 启动失败(CrashLoopBackOff):检查 containerd 配置中 SystemdCgroup 是否已设置为 true,并确认内核参数 net.bridge.bridge-nf-call-iptables 已生效。
  • Argo CD 无法连接 Git 仓库:确保集群节点可以访问 Git 仓库地址(如 GitHub/GitLab),必要时配置 HTTP 代理或 SSH 密钥。
  • Knative Service 无法获取 External IP:检查 Kourier Gateway 的 Service 类型是否为 LoadBalancer 或 NodePort,并确认 config-domain 配置正确。
  • Eventing Broker 无法投递事件:确认 InMemoryChannel 或 KafkaChannel 的 Pod 正常运行,并检查 Trigger 的过滤器配置是否匹配事件类型。