一、准备工作
ntp服务)。sudo apt update && sudo apt upgrade -y;sudo swapoff -a,并永久禁用(编辑/etc/fstab,注释或删除Swap行);k8s-master,工作节点设为k8s-node1、k8s-node2等,编辑/etc/hosts添加对应IP和主机名映射。二、安装Kubernetes核心组件
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
初始化完成后,会输出kubeadm join命令(包含token和CA证书哈希),需保存备用。mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
四、部署网络插件 Kubernetes需要网络插件实现Pod间通信,常用Calico(适合生产)或Flannel(简单易用):
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
部署完成后,检查插件状态:kubectl get pods -n kube-system(所有Pod应为Running状态)。五、加入工作节点
在工作节点上执行主节点初始化时输出的kubeadm join命令,例如:
sudo kubeadm join 192.168.1.100:6443 --token abcdef.0123456789abcdef --discovery-token-ca-cert-hash sha256:123456789abcdef
加入后,主节点会自动识别工作节点,可通过kubectl get nodes查看节点状态(需等待Ready状态)。
六、部署与管理应用
nginx-deployment.yaml:apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
应用配置:kubectl apply -f nginx-deployment.yaml。kubectl create deployment nginx --image=nginx --replicas=3
kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80
获取外部IP:kubectl get svc nginx(端口格式为节点IP:NodePort,如192.168.1.100:31743)。kubectl expose deployment nginx --type=LoadBalancer --port=80 --target-port=80
kubectl get pods;kubectl describe svc nginx;kubectl scale deployment nginx --replicas=5;kubectl delete -f nginx-deployment.yaml或kubectl delete deployment nginx。七、集群维护与管理
kubectl get nodes;kubectl get pods --all-namespaces;kubectl cluster-info。kubectl logs <pod-name>;kubectl exec -it <pod-name> -- /bin/bash;kubectl describe pod <pod-name>。apt upgrade升级kubelet、kubeadm、kubectl,升级后需重启节点;etcdctl工具备份/var/lib/etcd目录(需提前配置etcd访问权限)。