# 禁用交换空间 (Kubernetes 1.8+要求)
sudo swapoff -a
# 永久禁用,编辑 /etc/fstab 注释掉swap行
# 设置主机名
sudo hostnamectl set-hostname k8s-master # 主节点
sudo hostnamectl set-hostname k8s-node1 # 工作节点
# 将主机名添加到 /etc/hosts
echo "127.0.0.1 $(hostname)" | sudo tee -a /etc/hosts
# 允许iptables检查桥接流量
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
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
# 安装依赖
sudo apt-get update && sudo apt-get install -y containerd # Ubuntu
sudo yum install -y containerd # CentOS/RHEL
# 配置containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
# 修改配置启用systemd cgroup驱动
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 重启并启用服务
sudo systemctl restart containerd
sudo systemctl enable containerd
# 安装Docker
curl -fsSL https://get.docker.com | sh
# 配置Docker使用systemd作为cgroup驱动
sudo mkdir -p /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
# 重启并启用服务
sudo systemctl enable docker
sudo systemctl daemon-reload
sudo systemctl restart docker
# Ubuntu/Debian
sudo apt-get update && sudo apt-get 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
# CentOS/RHEL
cat <<EOF | sudo tee /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y kubelet kubeadm kubectl
sudo apt-mark hold kubelet kubeadm kubectl # 防止自动更新
# CentOS/RHEL
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet
# 使用containerd时
sudo kubeadm init --pod-network-cidr=10.244.0.0/16 --cri-socket=unix:///var/run/containerd/containerd.sock
# 使用Docker时
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 成功初始化后会显示加入集群的命令,类似:
# kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl create -f https://docs.projectcalico.org/manifests/tigera-operator.yaml
kubectl create -f https://docs.projectcalico.org/manifests/custom-resources.yaml
在每个工作节点上执行初始化时输出的kubeadm join
命令:
sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash sha256:<hash>
# 查看节点状态
kubectl get nodes
# 查看所有pod状态
kubectl get pods --all-namespaces
# 检查集群健康状况
kubectl get componentstatuses
kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml
# 创建管理员用户
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
EOF
# 创建集群角色绑定
cat <<EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
EOF
# 获取访问令牌
kubectl -n kubernetes-dashboard create token admin-user
# 访问Dashboard (需要配置kubectl proxy)
kubectl proxy
# 然后访问 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
高可用控制平面: 设置多个主节点
# 在第一个主节点初始化后,在其他控制平面节点上执行
sudo kubeadm join <load-balancer-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane --certificate-key <cert-key>
使用外部etcd集群提高可靠性
配置持久化存储: 考虑使用Ceph, NFS或云提供商存储解决方案
启用RBAC: 确保适当的访问控制
配置网络策略: 增强安全性
设置监控和日志: Prometheus + Grafana + ELK Stack
定期备份: 使用Velero等工具备份集群状态
journalctl -u kubelet -f
sudo kubeadm reset
sudo systemctl status containerd
或 sudo systemctl status docker
遵循这些最佳实践将帮助您建立一个稳定、高效的Kubernetes集群。根据您的具体需求和环境,可能需要进行额外的配置和调整。