在 Linux 系统上手动配置 Kubernetes (k8s) 集群是一个进阶操作,需要详细掌握 Linux 系统管理和 K8s 架构。以下是基于原生 Kubernetes 的配置流程(以 Ubuntu 22.04 为例):
核心组件及配置顺序
- 所有节点准备 → 2. 控制平面节点配置 → 3. 工作节点加入 → 4. 网络插件 → 5. 附加组件
1. 所有节点基础配置(Master+Worker)
# 禁用Swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
# 设置主机名解析(以master节点为例)
sudo hostnamectl set-hostname k8s-master
echo "192.168.1.100 k8s-master" | sudo tee -a /etc/hosts
echo "192.168.1.101 k8s-worker1" | sudo tee -a /etc/hosts
# 内核参数调优
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
overlay
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
# 安装容器运行时(containerd)
sudo apt update
sudo apt install -y containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd
2. 控制平面节点安装(Master Node)
# 安装kubeadm/kubelet/kubectl
sudo apt install -y apt-transport-https ca-certificates curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update
sudo apt install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl
# 初始化控制平面(关键配置点)
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.1.100 \
--upload-certs
# 配置kubectl
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
📌 记录输出的
kubeadm join
命令(用于工作节点加入)
3. 工作节点配置(Worker Nodes)
# 在各工作节点执行:
sudo kubeadm join 192.168.1.100:6443 \
--token <your-token> \
--discovery-token-ca-cert-hash <hash-value>
4. 网络插件安装(控制平面执行)
Flannel 示例:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Calico 示例:
kubectl create -f https://docs.projectcalico.org/manifests/calico.yaml
5. 集群验证
# 查看节点状态
kubectl get nodes -o wide
# 检查核心Pod
kubectl get pods -n kube-system
# 测试DNS解析
kubectl run test-nginx --image=nginx
kubectl exec test-nginx -- nslookup kubernetes.default
6. 必要附加组件
组件 | 安装命令 | 作用 |
---|---|---|
Metrics Server | kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml | 资源监控 |
Dashboard | kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml | Web管理界面 |
Ingress Controller | kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml | 入口流量管理 |
关键配置文件位置
文件/目录 | 路径 | 作用 |
---|---|---|
kubeconfig | /etc/kubernetes/admin.conf | 集群凭证 |
kubelet配置 | /var/lib/kubelet/config.yaml | 节点代理设置 |
证书目录 | /etc/kubernetes/pki/** | CA/证书文件 |
etcd数据 | /var/lib/etcd/** | 集群状态存储 |
CNI配置 | /etc/cni/net.d/** | 网络插件配置 |
生产环境注意事项
-
高可用控制平面
- 部署至少 3 个 Master 节点
- 使用
kubeadm init --control-plane-endpoint=<负载均衡IP>
-
证书管理
- 使用
kubeadm certs renew
更新证书 - 或配置外部 CA(修改
/etc/kubernetes/pki
文件)
- 使用
-
安全加固
- 启用 Pod 安全准入控制器
- 配置 Network Policies
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny spec: podSelector: {} policyTypes: - Ingress - Egress
-
持久化存储
# NFS 示例 kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/deploy/install-driver.sh
-
自动化运维
- 使用 Ansible 实现集群自动化部署
- 配置 Prometheus + Grafana 监控
- 实现 etcd 定期备份
# etcd 手动备份 kubectl exec -n kube-system etcd-k8s-master -- sh -c \ 'ETCDCTL_API=3 etcdctl snapshot save /var/lib/etcd/snapshot.db \ --cacert /etc/kubernetes/pki/etcd/ca.crt \ --cert /etc/kubernetes/pki/etcd/server.crt \ --key /etc/kubernetes/pki/etcd/server.key'
排错命令速查
# 查看服务状态
sudo systemctl status kubelet
journalctl -xeu kubelet
# 诊断容器
crictl ps -a
crictl logs <container-id>
# 检查证书有效期
openssl x509 -in /etc/kubernetes/pki/apiserver.crt -noout -text | grep Not
💡 建议:生产环境优先考虑使用 kubeadm、kops 或 Rancher 等工具简化部署。手工配置主要适用于学习场景或定制化需求高的环境。